From 2a027a91361f7c43b2c2906384a5587351a2cca2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Tamarelle?= Date: Mon, 22 Jul 2024 19:33:27 +0200 Subject: [PATCH 01/14] Enable extension of connection inspection methods --- src/Illuminate/Database/Connection.php | 18 +++++++++++++++ .../Console/DatabaseInspectionCommand.php | 23 ++----------------- src/Illuminate/Database/MariaDbConnection.php | 5 ++++ src/Illuminate/Database/MySqlConnection.php | 16 +++++++++++++ .../Database/PostgresConnection.php | 16 +++++++++++++ src/Illuminate/Database/SQLiteConnection.php | 5 ++++ .../Database/SqlServerConnection.php | 16 +++++++++++++ 7 files changed, 78 insertions(+), 21 deletions(-) diff --git a/src/Illuminate/Database/Connection.php b/src/Illuminate/Database/Connection.php index 584dd9957dde..38e2e39d8860 100755 --- a/src/Illuminate/Database/Connection.php +++ b/src/Illuminate/Database/Connection.php @@ -1347,6 +1347,24 @@ public function getDriverName() return $this->getConfig('driver'); } + /** + * Get a human-readable name for the given connection. + */ + public function getConnectionName(): string + { + return $this->getName() . '(' . $this->getDriverName() . ')'; + } + + /** + * Get the number of open connections for a database. + * + * @return int|null + */ + public function getConnectionCount(): ?int + { + return null; + } + /** * Get the query grammar used by the connection. * diff --git a/src/Illuminate/Database/Console/DatabaseInspectionCommand.php b/src/Illuminate/Database/Console/DatabaseInspectionCommand.php index f5ba9036e6ef..9267391bbf83 100644 --- a/src/Illuminate/Database/Console/DatabaseInspectionCommand.php +++ b/src/Illuminate/Database/Console/DatabaseInspectionCommand.php @@ -22,15 +22,7 @@ abstract class DatabaseInspectionCommand extends Command */ protected function getConnectionName(ConnectionInterface $connection, $database) { - return match (true) { - $connection instanceof MySqlConnection && $connection->isMaria() => 'MariaDB', - $connection instanceof MySqlConnection => 'MySQL', - $connection instanceof MariaDbConnection => 'MariaDB', - $connection instanceof PostgresConnection => 'PostgreSQL', - $connection instanceof SQLiteConnection => 'SQLite', - $connection instanceof SqlServerConnection => 'SQL Server', - default => $database, - }; + return method_exists($connection, 'getConnectionName') ? $connection->getConnectionName() : $database; } /** @@ -41,18 +33,7 @@ protected function getConnectionName(ConnectionInterface $connection, $database) */ protected function getConnectionCount(ConnectionInterface $connection) { - $result = match (true) { - $connection instanceof MySqlConnection => $connection->selectOne('show status where variable_name = "threads_connected"'), - $connection instanceof PostgresConnection => $connection->selectOne('select count(*) as "Value" from pg_stat_activity'), - $connection instanceof SqlServerConnection => $connection->selectOne('select count(*) Value from sys.dm_exec_sessions where status = ?', ['running']), - default => null, - }; - - if (! $result) { - return null; - } - - return Arr::wrap((array) $result)['Value']; + return method_exists($connection, 'getConnectionCount') ? $connection->getConnectionCount() : null; } /** diff --git a/src/Illuminate/Database/MariaDbConnection.php b/src/Illuminate/Database/MariaDbConnection.php index 721641b66c1c..ea53da8d119c 100755 --- a/src/Illuminate/Database/MariaDbConnection.php +++ b/src/Illuminate/Database/MariaDbConnection.php @@ -32,6 +32,11 @@ public function getServerVersion(): string return Str::between(parent::getServerVersion(), '5.5.5-', '-MariaDB'); } + public function getConnectionName(): string + { + return $this->getName() . ' (MariaDB)'; + } + /** * Get the default query grammar instance. * diff --git a/src/Illuminate/Database/MySqlConnection.php b/src/Illuminate/Database/MySqlConnection.php index 147551338fd7..602ebea25d8d 100755 --- a/src/Illuminate/Database/MySqlConnection.php +++ b/src/Illuminate/Database/MySqlConnection.php @@ -48,6 +48,22 @@ public function isMaria() return str_contains($this->getPdo()->getAttribute(PDO::ATTR_SERVER_VERSION), 'MariaDB'); } + public function getConnectionName(): string + { + return $this->getName() . ' (' . ($this->isMaria() ? 'MariaDB' : 'MySQL') . ')'; + } + + public function getConnectionCount(): ?int + { + $result = $this->selectOne('show status where variable_name = "threads_connected"'); + + if (! $result) { + return null; + } + + return (int) $result['Value']; + } + /** * Get the server version for the connection. * diff --git a/src/Illuminate/Database/PostgresConnection.php b/src/Illuminate/Database/PostgresConnection.php index 8f1d098907c2..3afc75d84d4d 100755 --- a/src/Illuminate/Database/PostgresConnection.php +++ b/src/Illuminate/Database/PostgresConnection.php @@ -12,6 +12,22 @@ class PostgresConnection extends Connection { + public function getConnectionName(): string + { + return $this->getName() . ' (PostgreSQL)'; + } + + public function getConnectionCount(): ?int + { + $result = $this->selectOne('select count(*) as "Value" from pg_stat_activity'); + + if (! $result) { + return null; + } + + return (int) $result['Value']; + } + /** * Escape a binary value for safe SQL embedding. * diff --git a/src/Illuminate/Database/SQLiteConnection.php b/src/Illuminate/Database/SQLiteConnection.php index ce9286fa2911..17dcf3a1ca90 100755 --- a/src/Illuminate/Database/SQLiteConnection.php +++ b/src/Illuminate/Database/SQLiteConnection.php @@ -31,6 +31,11 @@ public function __construct($pdo, $database = '', $tablePrefix = '', array $conf $this->configureSynchronous(); } + public function getConnectionName(): string + { + return $this->getName() . ' (SQLite)'; + } + /** * Enable or disable foreign key constraints if configured. * diff --git a/src/Illuminate/Database/SqlServerConnection.php b/src/Illuminate/Database/SqlServerConnection.php index a0644bf5c75a..e483df664fbb 100755 --- a/src/Illuminate/Database/SqlServerConnection.php +++ b/src/Illuminate/Database/SqlServerConnection.php @@ -90,6 +90,22 @@ protected function getDefaultQueryGrammar() return $this->withTablePrefix($grammar); } + public function getConnectionName(): string + { + return $this->getName() . ' (SQL Server)'; + } + + public function getConnectionCount(): ?int + { + $result = $this->selectOne('select count(*) Value from sys.dm_exec_sessions where status = ?', ['running']); + + if (! $result) { + return null; + } + + return (int) $result['Value']; + } + /** * Get a schema builder instance for the connection. * From 67e9cd6e1763ff2c765947f412523509c4a75cbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Tamarelle?= Date: Tue, 23 Jul 2024 18:17:51 +0200 Subject: [PATCH 02/14] Fix CS --- src/Illuminate/Database/Connection.php | 2 +- .../Database/Console/DatabaseInspectionCommand.php | 5 ----- src/Illuminate/Database/MariaDbConnection.php | 2 +- src/Illuminate/Database/MySqlConnection.php | 2 +- src/Illuminate/Database/PostgresConnection.php | 2 +- src/Illuminate/Database/SQLiteConnection.php | 2 +- src/Illuminate/Database/SqlServerConnection.php | 2 +- 7 files changed, 6 insertions(+), 11 deletions(-) diff --git a/src/Illuminate/Database/Connection.php b/src/Illuminate/Database/Connection.php index 38e2e39d8860..c1e06ccfe9a9 100755 --- a/src/Illuminate/Database/Connection.php +++ b/src/Illuminate/Database/Connection.php @@ -1352,7 +1352,7 @@ public function getDriverName() */ public function getConnectionName(): string { - return $this->getName() . '(' . $this->getDriverName() . ')'; + return $this->getName().'('.$this->getDriverName().')'; } /** diff --git a/src/Illuminate/Database/Console/DatabaseInspectionCommand.php b/src/Illuminate/Database/Console/DatabaseInspectionCommand.php index 9267391bbf83..fbf2847bc634 100644 --- a/src/Illuminate/Database/Console/DatabaseInspectionCommand.php +++ b/src/Illuminate/Database/Console/DatabaseInspectionCommand.php @@ -4,11 +4,6 @@ use Illuminate\Console\Command; use Illuminate\Database\ConnectionInterface; -use Illuminate\Database\MariaDbConnection; -use Illuminate\Database\MySqlConnection; -use Illuminate\Database\PostgresConnection; -use Illuminate\Database\SQLiteConnection; -use Illuminate\Database\SqlServerConnection; use Illuminate\Support\Arr; abstract class DatabaseInspectionCommand extends Command diff --git a/src/Illuminate/Database/MariaDbConnection.php b/src/Illuminate/Database/MariaDbConnection.php index ea53da8d119c..4e2fe9bdaf88 100755 --- a/src/Illuminate/Database/MariaDbConnection.php +++ b/src/Illuminate/Database/MariaDbConnection.php @@ -34,7 +34,7 @@ public function getServerVersion(): string public function getConnectionName(): string { - return $this->getName() . ' (MariaDB)'; + return $this->getName().' (MariaDB)'; } /** diff --git a/src/Illuminate/Database/MySqlConnection.php b/src/Illuminate/Database/MySqlConnection.php index 602ebea25d8d..1488bbd76fc4 100755 --- a/src/Illuminate/Database/MySqlConnection.php +++ b/src/Illuminate/Database/MySqlConnection.php @@ -50,7 +50,7 @@ public function isMaria() public function getConnectionName(): string { - return $this->getName() . ' (' . ($this->isMaria() ? 'MariaDB' : 'MySQL') . ')'; + return $this->getName().' ('.($this->isMaria() ? 'MariaDB' : 'MySQL').')'; } public function getConnectionCount(): ?int diff --git a/src/Illuminate/Database/PostgresConnection.php b/src/Illuminate/Database/PostgresConnection.php index 3afc75d84d4d..36640e21c5ee 100755 --- a/src/Illuminate/Database/PostgresConnection.php +++ b/src/Illuminate/Database/PostgresConnection.php @@ -14,7 +14,7 @@ class PostgresConnection extends Connection { public function getConnectionName(): string { - return $this->getName() . ' (PostgreSQL)'; + return $this->getName().' (PostgreSQL)'; } public function getConnectionCount(): ?int diff --git a/src/Illuminate/Database/SQLiteConnection.php b/src/Illuminate/Database/SQLiteConnection.php index 17dcf3a1ca90..dc6b4b62fb81 100755 --- a/src/Illuminate/Database/SQLiteConnection.php +++ b/src/Illuminate/Database/SQLiteConnection.php @@ -33,7 +33,7 @@ public function __construct($pdo, $database = '', $tablePrefix = '', array $conf public function getConnectionName(): string { - return $this->getName() . ' (SQLite)'; + return $this->getName().' (SQLite)'; } /** diff --git a/src/Illuminate/Database/SqlServerConnection.php b/src/Illuminate/Database/SqlServerConnection.php index e483df664fbb..ea7d22e5e499 100755 --- a/src/Illuminate/Database/SqlServerConnection.php +++ b/src/Illuminate/Database/SqlServerConnection.php @@ -92,7 +92,7 @@ protected function getDefaultQueryGrammar() public function getConnectionName(): string { - return $this->getName() . ' (SQL Server)'; + return $this->getName().' (SQL Server)'; } public function getConnectionCount(): ?int From d5e773086d639ca49bebb9af6d0db4fe31c22c05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Tamarelle?= Date: Tue, 23 Jul 2024 19:26:09 +0200 Subject: [PATCH 03/14] Move the queries to the Grammar classes and show the driver name --- src/Illuminate/Database/Connection.php | 18 ------------------ .../Console/DatabaseInspectionCommand.php | 19 +++++++++++++++++-- .../Database/Console/ShowCommand.php | 4 +++- src/Illuminate/Database/MariaDbConnection.php | 5 ----- src/Illuminate/Database/MySqlConnection.php | 16 ---------------- .../Database/PostgresConnection.php | 16 ---------------- .../Database/Query/Grammars/Grammar.php | 10 ++++++++++ .../Database/Query/Grammars/MySqlGrammar.php | 11 +++++++++++ .../Query/Grammars/PostgresGrammar.php | 11 +++++++++++ .../Query/Grammars/SqlServerGrammar.php | 11 +++++++++++ src/Illuminate/Database/SQLiteConnection.php | 5 ----- .../Database/SqlServerConnection.php | 16 ---------------- 12 files changed, 63 insertions(+), 79 deletions(-) diff --git a/src/Illuminate/Database/Connection.php b/src/Illuminate/Database/Connection.php index c1e06ccfe9a9..584dd9957dde 100755 --- a/src/Illuminate/Database/Connection.php +++ b/src/Illuminate/Database/Connection.php @@ -1347,24 +1347,6 @@ public function getDriverName() return $this->getConfig('driver'); } - /** - * Get a human-readable name for the given connection. - */ - public function getConnectionName(): string - { - return $this->getName().'('.$this->getDriverName().')'; - } - - /** - * Get the number of open connections for a database. - * - * @return int|null - */ - public function getConnectionCount(): ?int - { - return null; - } - /** * Get the query grammar used by the connection. * diff --git a/src/Illuminate/Database/Console/DatabaseInspectionCommand.php b/src/Illuminate/Database/Console/DatabaseInspectionCommand.php index fbf2847bc634..c0657359c9bc 100644 --- a/src/Illuminate/Database/Console/DatabaseInspectionCommand.php +++ b/src/Illuminate/Database/Console/DatabaseInspectionCommand.php @@ -4,6 +4,11 @@ use Illuminate\Console\Command; use Illuminate\Database\ConnectionInterface; +use Illuminate\Database\MariaDbConnection; +use Illuminate\Database\MySqlConnection; +use Illuminate\Database\PostgresConnection; +use Illuminate\Database\SQLiteConnection; +use Illuminate\Database\SqlServerConnection; use Illuminate\Support\Arr; abstract class DatabaseInspectionCommand extends Command @@ -14,10 +19,20 @@ abstract class DatabaseInspectionCommand extends Command * @param \Illuminate\Database\ConnectionInterface $connection * @param string $database * @return string + * + * @deprecated Use $connection->getName() instead. */ protected function getConnectionName(ConnectionInterface $connection, $database) { - return method_exists($connection, 'getConnectionName') ? $connection->getConnectionName() : $database; + return match (true) { + $connection instanceof MariaDbConnection => 'MariaDB', + $connection instanceof MySqlConnection && $connection->isMaria() => 'MariaDB', + $connection instanceof MySqlConnection => 'MySQL', + $connection instanceof PostgresConnection => 'PostgreSQL', + $connection instanceof SQLiteConnection => 'SQLite', + $connection instanceof SqlServerConnection => 'SQL Server', + default => $database, + }; } /** @@ -28,7 +43,7 @@ protected function getConnectionName(ConnectionInterface $connection, $database) */ protected function getConnectionCount(ConnectionInterface $connection) { - return method_exists($connection, 'getConnectionCount') ? $connection->getConnectionCount() : null; + return $connection->getQueryGrammar()->getConnectionCount(); } /** diff --git a/src/Illuminate/Database/Console/ShowCommand.php b/src/Illuminate/Database/Console/ShowCommand.php index 1d4aff3398b5..70ed556fe980 100644 --- a/src/Illuminate/Database/Console/ShowCommand.php +++ b/src/Illuminate/Database/Console/ShowCommand.php @@ -45,7 +45,8 @@ public function handle(ConnectionResolverInterface $connections) $data = [ 'platform' => [ 'config' => $this->getConfigFromDatabase($database), - 'name' => $this->getConnectionName($connection, $database), + 'name' => $connection->getName(), + 'driver' => $connection->getDriverName(), 'version' => $connection->getServerVersion(), 'open_connections' => $this->getConnectionCount($connection), ], @@ -159,6 +160,7 @@ protected function displayForCli(array $data) $this->newLine(); $this->components->twoColumnDetail(''.$platform['name'].'', $platform['version']); + $this->components->twoColumnDetail('Driver', Arr::get($platform['config'], 'driver')); $this->components->twoColumnDetail('Database', Arr::get($platform['config'], 'database')); $this->components->twoColumnDetail('Host', Arr::get($platform['config'], 'host')); $this->components->twoColumnDetail('Port', Arr::get($platform['config'], 'port')); diff --git a/src/Illuminate/Database/MariaDbConnection.php b/src/Illuminate/Database/MariaDbConnection.php index 4e2fe9bdaf88..721641b66c1c 100755 --- a/src/Illuminate/Database/MariaDbConnection.php +++ b/src/Illuminate/Database/MariaDbConnection.php @@ -32,11 +32,6 @@ public function getServerVersion(): string return Str::between(parent::getServerVersion(), '5.5.5-', '-MariaDB'); } - public function getConnectionName(): string - { - return $this->getName().' (MariaDB)'; - } - /** * Get the default query grammar instance. * diff --git a/src/Illuminate/Database/MySqlConnection.php b/src/Illuminate/Database/MySqlConnection.php index 1488bbd76fc4..147551338fd7 100755 --- a/src/Illuminate/Database/MySqlConnection.php +++ b/src/Illuminate/Database/MySqlConnection.php @@ -48,22 +48,6 @@ public function isMaria() return str_contains($this->getPdo()->getAttribute(PDO::ATTR_SERVER_VERSION), 'MariaDB'); } - public function getConnectionName(): string - { - return $this->getName().' ('.($this->isMaria() ? 'MariaDB' : 'MySQL').')'; - } - - public function getConnectionCount(): ?int - { - $result = $this->selectOne('show status where variable_name = "threads_connected"'); - - if (! $result) { - return null; - } - - return (int) $result['Value']; - } - /** * Get the server version for the connection. * diff --git a/src/Illuminate/Database/PostgresConnection.php b/src/Illuminate/Database/PostgresConnection.php index 36640e21c5ee..8f1d098907c2 100755 --- a/src/Illuminate/Database/PostgresConnection.php +++ b/src/Illuminate/Database/PostgresConnection.php @@ -12,22 +12,6 @@ class PostgresConnection extends Connection { - public function getConnectionName(): string - { - return $this->getName().' (PostgreSQL)'; - } - - public function getConnectionCount(): ?int - { - $result = $this->selectOne('select count(*) as "Value" from pg_stat_activity'); - - if (! $result) { - return null; - } - - return (int) $result['Value']; - } - /** * Escape a binary value for safe SQL embedding. * diff --git a/src/Illuminate/Database/Query/Grammars/Grammar.php b/src/Illuminate/Database/Query/Grammars/Grammar.php index 63e624bcaf17..fc774a01f020 100755 --- a/src/Illuminate/Database/Query/Grammars/Grammar.php +++ b/src/Illuminate/Database/Query/Grammars/Grammar.php @@ -1564,4 +1564,14 @@ public function getBitwiseOperators() { return $this->bitwiseOperators; } + + /** + * Get the number of open connections for a database. + * + * @return int|null + */ + public function getConnectionCount(): ?int + { + return null; + } } diff --git a/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php b/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php index 397dbe54e24b..e302d4ff667b 100755 --- a/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php +++ b/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php @@ -514,4 +514,15 @@ protected function wrapJsonBooleanSelector($value) return 'json_extract('.$field.$path.')'; } + + public function getConnectionCount(): ?int + { + $result = $this->connection->selectOne('show status where variable_name = "threads_connected"'); + + if (! $result) { + return null; + } + + return (int) $result['Value']; + } } diff --git a/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php b/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php index bbb11284e72b..44180b313cd1 100755 --- a/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php +++ b/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php @@ -762,4 +762,15 @@ public function substituteBindingsIntoRawSql($sql, $bindings) return $query; } + + public function getConnectionCount(): ?int + { + $result = $this->connection->selectOne('select count(*) as "Value" from pg_stat_activity'); + + if (! $result) { + return null; + } + + return (int) $result['Value']; + } } diff --git a/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php b/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php index c084308b74ba..4a2ce5eb37d8 100755 --- a/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php +++ b/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php @@ -571,4 +571,15 @@ protected function wrapTableValuedFunction($table) return $table; } + + public function getConnectionCount(): ?int + { + $result = $this->connection->selectOne('select count(*) Value from sys.dm_exec_sessions where status = ?', ['running']); + + if (! $result) { + return null; + } + + return (int) $result['Value']; + } } diff --git a/src/Illuminate/Database/SQLiteConnection.php b/src/Illuminate/Database/SQLiteConnection.php index dc6b4b62fb81..ce9286fa2911 100755 --- a/src/Illuminate/Database/SQLiteConnection.php +++ b/src/Illuminate/Database/SQLiteConnection.php @@ -31,11 +31,6 @@ public function __construct($pdo, $database = '', $tablePrefix = '', array $conf $this->configureSynchronous(); } - public function getConnectionName(): string - { - return $this->getName().' (SQLite)'; - } - /** * Enable or disable foreign key constraints if configured. * diff --git a/src/Illuminate/Database/SqlServerConnection.php b/src/Illuminate/Database/SqlServerConnection.php index ea7d22e5e499..a0644bf5c75a 100755 --- a/src/Illuminate/Database/SqlServerConnection.php +++ b/src/Illuminate/Database/SqlServerConnection.php @@ -90,22 +90,6 @@ protected function getDefaultQueryGrammar() return $this->withTablePrefix($grammar); } - public function getConnectionName(): string - { - return $this->getName().' (SQL Server)'; - } - - public function getConnectionCount(): ?int - { - $result = $this->selectOne('select count(*) Value from sys.dm_exec_sessions where status = ?', ['running']); - - if (! $result) { - return null; - } - - return (int) $result['Value']; - } - /** * Get a schema builder instance for the connection. * From 32570c929a1592d42d7aa1caacfa8eb78712a7c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Tamarelle?= Date: Tue, 23 Jul 2024 22:00:10 +0200 Subject: [PATCH 04/14] Replace Grammar::getConnectionCount with compileConnectionCount --- .../Database/Console/DatabaseInspectionCommand.php | 4 +++- src/Illuminate/Database/Query/Grammars/Grammar.php | 4 ++-- .../Database/Query/Grammars/MySqlGrammar.php | 10 ++-------- .../Database/Query/Grammars/PostgresGrammar.php | 10 ++-------- .../Database/Query/Grammars/SqlServerGrammar.php | 10 ++-------- 5 files changed, 11 insertions(+), 27 deletions(-) diff --git a/src/Illuminate/Database/Console/DatabaseInspectionCommand.php b/src/Illuminate/Database/Console/DatabaseInspectionCommand.php index c0657359c9bc..f2a2a4b52d29 100644 --- a/src/Illuminate/Database/Console/DatabaseInspectionCommand.php +++ b/src/Illuminate/Database/Console/DatabaseInspectionCommand.php @@ -43,7 +43,9 @@ protected function getConnectionName(ConnectionInterface $connection, $database) */ protected function getConnectionCount(ConnectionInterface $connection) { - return $connection->getQueryGrammar()->getConnectionCount(); + $query = $connection->getSchemaGrammar()->compileConnectionCount(); + + return $query ? $connection->scalar($query) : null; } /** diff --git a/src/Illuminate/Database/Query/Grammars/Grammar.php b/src/Illuminate/Database/Query/Grammars/Grammar.php index fc774a01f020..3b4e0ebccab0 100755 --- a/src/Illuminate/Database/Query/Grammars/Grammar.php +++ b/src/Illuminate/Database/Query/Grammars/Grammar.php @@ -1568,9 +1568,9 @@ public function getBitwiseOperators() /** * Get the number of open connections for a database. * - * @return int|null + * @return string|null */ - public function getConnectionCount(): ?int + public function compileConnectionCount() { return null; } diff --git a/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php b/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php index e302d4ff667b..3ee0abafbe25 100755 --- a/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php +++ b/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php @@ -515,14 +515,8 @@ protected function wrapJsonBooleanSelector($value) return 'json_extract('.$field.$path.')'; } - public function getConnectionCount(): ?int + public function compileConnectionCount() { - $result = $this->connection->selectOne('show status where variable_name = "threads_connected"'); - - if (! $result) { - return null; - } - - return (int) $result['Value']; + return 'show status where variable_name = "threads_connected"'; } } diff --git a/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php b/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php index 44180b313cd1..6cd8c29b593a 100755 --- a/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php +++ b/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php @@ -763,14 +763,8 @@ public function substituteBindingsIntoRawSql($sql, $bindings) return $query; } - public function getConnectionCount(): ?int + public function compileConnectionCount() { - $result = $this->connection->selectOne('select count(*) as "Value" from pg_stat_activity'); - - if (! $result) { - return null; - } - - return (int) $result['Value']; + return 'select count(*) as "Value" from pg_stat_activity'; } } diff --git a/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php b/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php index 4a2ce5eb37d8..35afa728b17e 100755 --- a/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php +++ b/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php @@ -572,14 +572,8 @@ protected function wrapTableValuedFunction($table) return $table; } - public function getConnectionCount(): ?int + public function compileConnectionCount() { - $result = $this->connection->selectOne('select count(*) Value from sys.dm_exec_sessions where status = ?', ['running']); - - if (! $result) { - return null; - } - - return (int) $result['Value']; + return 'select count(*) Value from sys.dm_exec_sessions where status = "running"'; } } From 533eb11168b2e0bb66dd3b82728fc47be14ae12b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Tamarelle?= Date: Tue, 23 Jul 2024 22:19:17 +0200 Subject: [PATCH 05/14] Add Connection::getDriverTitle and move compileConnectionCount to the Schema Grammar --- src/Illuminate/Database/Connection.php | 10 ++++++++++ .../Database/Console/DatabaseInspectionCommand.php | 12 ++---------- src/Illuminate/Database/Console/ShowCommand.php | 2 +- src/Illuminate/Database/MariaDbConnection.php | 8 ++++++++ src/Illuminate/Database/MySqlConnection.php | 8 ++++++++ src/Illuminate/Database/PostgresConnection.php | 8 ++++++++ src/Illuminate/Database/Query/Grammars/Grammar.php | 10 ---------- .../Database/Query/Grammars/MySqlGrammar.php | 5 ----- .../Database/Query/Grammars/PostgresGrammar.php | 5 ----- .../Database/Query/Grammars/SqlServerGrammar.php | 5 ----- src/Illuminate/Database/SQLiteConnection.php | 8 ++++++++ src/Illuminate/Database/Schema/Grammars/Grammar.php | 10 ++++++++++ .../Database/Schema/Grammars/MySqlGrammar.php | 5 +++++ .../Database/Schema/Grammars/PostgresGrammar.php | 5 +++++ .../Database/Schema/Grammars/SqlServerGrammar.php | 5 +++++ src/Illuminate/Database/SqlServerConnection.php | 8 ++++++++ 16 files changed, 78 insertions(+), 36 deletions(-) diff --git a/src/Illuminate/Database/Connection.php b/src/Illuminate/Database/Connection.php index 584dd9957dde..61b41e13cf0f 100755 --- a/src/Illuminate/Database/Connection.php +++ b/src/Illuminate/Database/Connection.php @@ -1347,6 +1347,16 @@ public function getDriverName() return $this->getConfig('driver'); } + /** + * Get a human-readable name for the given connection driver. + * + * @return string + */ + public function getDriverTitle() + { + return $this->getDriverName(); + } + /** * Get the query grammar used by the connection. * diff --git a/src/Illuminate/Database/Console/DatabaseInspectionCommand.php b/src/Illuminate/Database/Console/DatabaseInspectionCommand.php index f2a2a4b52d29..a14ba7731dd7 100644 --- a/src/Illuminate/Database/Console/DatabaseInspectionCommand.php +++ b/src/Illuminate/Database/Console/DatabaseInspectionCommand.php @@ -20,19 +20,11 @@ abstract class DatabaseInspectionCommand extends Command * @param string $database * @return string * - * @deprecated Use $connection->getName() instead. + * @deprecated Use $connection->getDriverTitle() instead. */ protected function getConnectionName(ConnectionInterface $connection, $database) { - return match (true) { - $connection instanceof MariaDbConnection => 'MariaDB', - $connection instanceof MySqlConnection && $connection->isMaria() => 'MariaDB', - $connection instanceof MySqlConnection => 'MySQL', - $connection instanceof PostgresConnection => 'PostgreSQL', - $connection instanceof SQLiteConnection => 'SQLite', - $connection instanceof SqlServerConnection => 'SQL Server', - default => $database, - }; + return $connection->getDriverTitle(); } /** diff --git a/src/Illuminate/Database/Console/ShowCommand.php b/src/Illuminate/Database/Console/ShowCommand.php index 70ed556fe980..7be7eb591e06 100644 --- a/src/Illuminate/Database/Console/ShowCommand.php +++ b/src/Illuminate/Database/Console/ShowCommand.php @@ -45,7 +45,7 @@ public function handle(ConnectionResolverInterface $connections) $data = [ 'platform' => [ 'config' => $this->getConfigFromDatabase($database), - 'name' => $connection->getName(), + 'name' => $connection->getDriverTitle(), 'driver' => $connection->getDriverName(), 'version' => $connection->getServerVersion(), 'open_connections' => $this->getConnectionCount($connection), diff --git a/src/Illuminate/Database/MariaDbConnection.php b/src/Illuminate/Database/MariaDbConnection.php index 721641b66c1c..4b9d1404e266 100755 --- a/src/Illuminate/Database/MariaDbConnection.php +++ b/src/Illuminate/Database/MariaDbConnection.php @@ -12,6 +12,14 @@ class MariaDbConnection extends MySqlConnection { + /** + * {@inheritdoc} + */ + public function getDriverTitle() + { + return 'SQLite'; + } + /** * Determine if the connected database is a MariaDB database. * diff --git a/src/Illuminate/Database/MySqlConnection.php b/src/Illuminate/Database/MySqlConnection.php index 147551338fd7..66a668cd19db 100755 --- a/src/Illuminate/Database/MySqlConnection.php +++ b/src/Illuminate/Database/MySqlConnection.php @@ -14,6 +14,14 @@ class MySqlConnection extends Connection { + /** + * {@inheritdoc} + */ + public function getDriverTitle() + { + return $this->isMaria() ? 'MariaDB' : 'MySQL'; + } + /** * Escape a binary value for safe SQL embedding. * diff --git a/src/Illuminate/Database/PostgresConnection.php b/src/Illuminate/Database/PostgresConnection.php index 8f1d098907c2..06fa2e1d8e48 100755 --- a/src/Illuminate/Database/PostgresConnection.php +++ b/src/Illuminate/Database/PostgresConnection.php @@ -12,6 +12,14 @@ class PostgresConnection extends Connection { + /** + * {@inheritdoc} + */ + public function getDriverTitle() + { + return 'PostgreSQL'; + } + /** * Escape a binary value for safe SQL embedding. * diff --git a/src/Illuminate/Database/Query/Grammars/Grammar.php b/src/Illuminate/Database/Query/Grammars/Grammar.php index 3b4e0ebccab0..63e624bcaf17 100755 --- a/src/Illuminate/Database/Query/Grammars/Grammar.php +++ b/src/Illuminate/Database/Query/Grammars/Grammar.php @@ -1564,14 +1564,4 @@ public function getBitwiseOperators() { return $this->bitwiseOperators; } - - /** - * Get the number of open connections for a database. - * - * @return string|null - */ - public function compileConnectionCount() - { - return null; - } } diff --git a/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php b/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php index 3ee0abafbe25..397dbe54e24b 100755 --- a/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php +++ b/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php @@ -514,9 +514,4 @@ protected function wrapJsonBooleanSelector($value) return 'json_extract('.$field.$path.')'; } - - public function compileConnectionCount() - { - return 'show status where variable_name = "threads_connected"'; - } } diff --git a/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php b/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php index 6cd8c29b593a..bbb11284e72b 100755 --- a/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php +++ b/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php @@ -762,9 +762,4 @@ public function substituteBindingsIntoRawSql($sql, $bindings) return $query; } - - public function compileConnectionCount() - { - return 'select count(*) as "Value" from pg_stat_activity'; - } } diff --git a/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php b/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php index 35afa728b17e..c084308b74ba 100755 --- a/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php +++ b/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php @@ -571,9 +571,4 @@ protected function wrapTableValuedFunction($table) return $table; } - - public function compileConnectionCount() - { - return 'select count(*) Value from sys.dm_exec_sessions where status = "running"'; - } } diff --git a/src/Illuminate/Database/SQLiteConnection.php b/src/Illuminate/Database/SQLiteConnection.php index ce9286fa2911..bccd33118118 100755 --- a/src/Illuminate/Database/SQLiteConnection.php +++ b/src/Illuminate/Database/SQLiteConnection.php @@ -31,6 +31,14 @@ public function __construct($pdo, $database = '', $tablePrefix = '', array $conf $this->configureSynchronous(); } + /** + * {@inheritdoc} + */ + public function getDriverTitle() + { + return 'SQLite'; + } + /** * Enable or disable foreign key constraints if configured. * diff --git a/src/Illuminate/Database/Schema/Grammars/Grammar.php b/src/Illuminate/Database/Schema/Grammars/Grammar.php index 8efc92592988..080fcb15e90b 100755 --- a/src/Illuminate/Database/Schema/Grammars/Grammar.php +++ b/src/Illuminate/Database/Schema/Grammars/Grammar.php @@ -382,4 +382,14 @@ public function supportsSchemaTransactions() { return $this->transactions; } + + /** + * Get the number of open connections for a database. + * + * @return string|null + */ + public function compileConnectionCount() + { + return null; + } } diff --git a/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php b/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php index f66317d619a6..03b554a6295e 100755 --- a/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php +++ b/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php @@ -1337,4 +1337,9 @@ protected function wrapJsonSelector($value) return 'json_unquote(json_extract('.$field.$path.'))'; } + + public function compileConnectionCount() + { + return 'show status where variable_name = "threads_connected"'; + } } diff --git a/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php b/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php index a8f2249e91ce..e26282e0c624 100755 --- a/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php +++ b/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php @@ -1201,4 +1201,9 @@ protected function modifyGeneratedAs(Blueprint $blueprint, Fluent $column) return $sql; } + + public function compileConnectionCount() + { + return 'select count(*) as "Value" from pg_stat_activity'; + } } diff --git a/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php b/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php index fe8121b4f4fc..5e429b8b113e 100755 --- a/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php +++ b/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php @@ -1054,4 +1054,9 @@ public function quoteString($value) return "N'$value'"; } + + public function compileConnectionCount() + { + return 'select count(*) Value from sys.dm_exec_sessions where status = "running"'; + } } diff --git a/src/Illuminate/Database/SqlServerConnection.php b/src/Illuminate/Database/SqlServerConnection.php index a0644bf5c75a..19f7bb8afbf3 100755 --- a/src/Illuminate/Database/SqlServerConnection.php +++ b/src/Illuminate/Database/SqlServerConnection.php @@ -14,6 +14,14 @@ class SqlServerConnection extends Connection { + /** + * {@inheritdoc} + */ + public function getDriverTitle() + { + return 'SQL Server'; + } + /** * Execute a Closure within a transaction. * From c1a9177725d12bf21eab776ad26f05aea02ae5a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Tamarelle?= Date: Tue, 23 Jul 2024 22:22:20 +0200 Subject: [PATCH 06/14] Replace duplicate driver name by the connection name --- .../Database/Console/DatabaseInspectionCommand.php | 5 ----- src/Illuminate/Database/Console/ShowCommand.php | 4 ++-- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/Illuminate/Database/Console/DatabaseInspectionCommand.php b/src/Illuminate/Database/Console/DatabaseInspectionCommand.php index a14ba7731dd7..24f5e5d31352 100644 --- a/src/Illuminate/Database/Console/DatabaseInspectionCommand.php +++ b/src/Illuminate/Database/Console/DatabaseInspectionCommand.php @@ -4,11 +4,6 @@ use Illuminate\Console\Command; use Illuminate\Database\ConnectionInterface; -use Illuminate\Database\MariaDbConnection; -use Illuminate\Database\MySqlConnection; -use Illuminate\Database\PostgresConnection; -use Illuminate\Database\SQLiteConnection; -use Illuminate\Database\SqlServerConnection; use Illuminate\Support\Arr; abstract class DatabaseInspectionCommand extends Command diff --git a/src/Illuminate/Database/Console/ShowCommand.php b/src/Illuminate/Database/Console/ShowCommand.php index 7be7eb591e06..c50dec1dca6f 100644 --- a/src/Illuminate/Database/Console/ShowCommand.php +++ b/src/Illuminate/Database/Console/ShowCommand.php @@ -46,7 +46,7 @@ public function handle(ConnectionResolverInterface $connections) 'platform' => [ 'config' => $this->getConfigFromDatabase($database), 'name' => $connection->getDriverTitle(), - 'driver' => $connection->getDriverName(), + 'connection' => $connection->getName(), 'version' => $connection->getServerVersion(), 'open_connections' => $this->getConnectionCount($connection), ], @@ -160,7 +160,7 @@ protected function displayForCli(array $data) $this->newLine(); $this->components->twoColumnDetail(''.$platform['name'].'', $platform['version']); - $this->components->twoColumnDetail('Driver', Arr::get($platform['config'], 'driver')); + $this->components->twoColumnDetail('Connection', Arr::get($platform['config'], 'connection')); $this->components->twoColumnDetail('Database', Arr::get($platform['config'], 'database')); $this->components->twoColumnDetail('Host', Arr::get($platform['config'], 'host')); $this->components->twoColumnDetail('Port', Arr::get($platform['config'], 'port')); From 5fa740aedfd9280652a9c85d542b5008ee5c2795 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Tamarelle?= Date: Tue, 23 Jul 2024 22:48:38 +0200 Subject: [PATCH 07/14] New MySQL query --- src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php b/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php index 03b554a6295e..fcffc1b0e7be 100755 --- a/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php +++ b/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php @@ -1340,6 +1340,6 @@ protected function wrapJsonSelector($value) public function compileConnectionCount() { - return 'show status where variable_name = "threads_connected"'; + return 'select variable_value as `Value` from performance_schema.session_status where variable_name = "threads_connected"'; } } From 1f0fe53d990ceebc6c8e789723ef886b4aca1f98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Tamarelle?= Date: Tue, 23 Jul 2024 23:03:04 +0200 Subject: [PATCH 08/14] Move getConnectionCount to Schema\Builder --- .../Database/Console/DatabaseInspectionCommand.php | 6 +++--- src/Illuminate/Database/Console/MonitorCommand.php | 3 ++- src/Illuminate/Database/Console/ShowCommand.php | 2 +- src/Illuminate/Database/Schema/Builder.php | 12 ++++++++++++ 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/Illuminate/Database/Console/DatabaseInspectionCommand.php b/src/Illuminate/Database/Console/DatabaseInspectionCommand.php index 24f5e5d31352..347e8930bb34 100644 --- a/src/Illuminate/Database/Console/DatabaseInspectionCommand.php +++ b/src/Illuminate/Database/Console/DatabaseInspectionCommand.php @@ -27,12 +27,12 @@ protected function getConnectionName(ConnectionInterface $connection, $database) * * @param \Illuminate\Database\ConnectionInterface $connection * @return int|null + * + * @deprecated Use Schema\Builder::getConnectionCount() instead. */ protected function getConnectionCount(ConnectionInterface $connection) { - $query = $connection->getSchemaGrammar()->compileConnectionCount(); - - return $query ? $connection->scalar($query) : null; + return $connection->getSchemaBuilder()->getConnectionCount(); } /** diff --git a/src/Illuminate/Database/Console/MonitorCommand.php b/src/Illuminate/Database/Console/MonitorCommand.php index d87a441c015c..a710489d3bb2 100644 --- a/src/Illuminate/Database/Console/MonitorCommand.php +++ b/src/Illuminate/Database/Console/MonitorCommand.php @@ -84,10 +84,11 @@ protected function parseDatabases($databases) } $maxConnections = $this->option('max'); + $connections = $this->connection->connection($database)->getSchemaBuilder()->getConnectionCount(); return [ 'database' => $database, - 'connections' => $connections = $this->getConnectionCount($this->connection->connection($database)), + 'connections' => $connections, 'status' => $maxConnections && $connections >= $maxConnections ? 'ALERT' : 'OK', ]; }); diff --git a/src/Illuminate/Database/Console/ShowCommand.php b/src/Illuminate/Database/Console/ShowCommand.php index c50dec1dca6f..505f0ad10084 100644 --- a/src/Illuminate/Database/Console/ShowCommand.php +++ b/src/Illuminate/Database/Console/ShowCommand.php @@ -48,7 +48,7 @@ public function handle(ConnectionResolverInterface $connections) 'name' => $connection->getDriverTitle(), 'connection' => $connection->getName(), 'version' => $connection->getServerVersion(), - 'open_connections' => $this->getConnectionCount($connection), + 'open_connections' => $schema->getConnectionCount(), ], 'tables' => $this->tables($connection, $schema), ]; diff --git a/src/Illuminate/Database/Schema/Builder.php b/src/Illuminate/Database/Schema/Builder.php index 7b899c0a1c7c..98be40cd677b 100755 --- a/src/Illuminate/Database/Schema/Builder.php +++ b/src/Illuminate/Database/Schema/Builder.php @@ -607,6 +607,18 @@ public function setConnection(Connection $connection) return $this; } + /** + * Get the number of open connections for a database. + * + * @return int|null + */ + public function getConnectionCount() + { + $query = $this->grammar->compileConnectionCount(); + + return $query ? $this->connection->scalar($query) : null; + } + /** * Set the Schema Blueprint resolver callback. * From 129fd2a6eebb8fded23cea2d554149c31b9362cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Tamarelle?= Date: Tue, 23 Jul 2024 23:17:32 +0200 Subject: [PATCH 09/14] Add integration test for Schema::getConnectionCount() --- src/Illuminate/Support/Facades/Schema.php | 1 + tests/Integration/Database/SchemaBuilderTest.php | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/src/Illuminate/Support/Facades/Schema.php b/src/Illuminate/Support/Facades/Schema.php index d4d39f9f0521..c3f8647ed33e 100755 --- a/src/Illuminate/Support/Facades/Schema.php +++ b/src/Illuminate/Support/Facades/Schema.php @@ -45,6 +45,7 @@ * @method static void mixin(object $mixin, bool $replace = true) * @method static bool hasMacro(string $name) * @method static void flushMacros() + * @method static int|null getConnectionCount() * * @see \Illuminate\Database\Schema\Builder */ diff --git a/tests/Integration/Database/SchemaBuilderTest.php b/tests/Integration/Database/SchemaBuilderTest.php index b0c1f67f3c9a..bc67208c5cb6 100644 --- a/tests/Integration/Database/SchemaBuilderTest.php +++ b/tests/Integration/Database/SchemaBuilderTest.php @@ -874,4 +874,14 @@ public function testAddingMacros() $this->assertTrue(Schema::hasForeignKeyForColumn('question_id', 'answers', 'questions')); $this->assertFalse(Schema::hasForeignKeyForColumn('body', 'answers', 'questions')); } + + public function testGetConnectionCount() + { + $count = Schema::getConnectionCount(); + if ($this->driver === 'sqlite') { + $this->assertNull($count, 'SQLite does not support connection count'); + } else { + $this->assertGreaterThanOrEqual(1, $count); + } + } } From 346d2e416ff3de5142dd271a3cbf5b2ababa52fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Tamarelle?= Date: Tue, 23 Jul 2024 23:37:00 +0200 Subject: [PATCH 10/14] Fix connection count query for mariadb --- src/Illuminate/Database/Schema/Grammars/MariaDbGrammar.php | 5 +++++ src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php | 2 +- src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Illuminate/Database/Schema/Grammars/MariaDbGrammar.php b/src/Illuminate/Database/Schema/Grammars/MariaDbGrammar.php index 2996406a27fb..1a9750342f20 100755 --- a/src/Illuminate/Database/Schema/Grammars/MariaDbGrammar.php +++ b/src/Illuminate/Database/Schema/Grammars/MariaDbGrammar.php @@ -55,4 +55,9 @@ protected function typeGeometry(Fluent $column) $column->srid ? ' ref_system_id='.$column->srid : '' ); } + + public function compileConnectionCount() + { + return 'select variable_value as `Value` from information_schema.global_status where variable_name = \'Threads_connected\''; + } } diff --git a/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php b/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php index fcffc1b0e7be..a642ebd39502 100755 --- a/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php +++ b/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php @@ -1340,6 +1340,6 @@ protected function wrapJsonSelector($value) public function compileConnectionCount() { - return 'select variable_value as `Value` from performance_schema.session_status where variable_name = "threads_connected"'; + return 'select variable_value as `Value` from performance_schema.session_status where variable_name = \'threads_connected\''; } } diff --git a/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php b/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php index 5e429b8b113e..9ac981be2019 100755 --- a/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php +++ b/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php @@ -1057,6 +1057,6 @@ public function quoteString($value) public function compileConnectionCount() { - return 'select count(*) Value from sys.dm_exec_sessions where status = "running"'; + return 'select count(*) Value from sys.dm_exec_sessions where status = N\'running\''; } } From 4916a6e1f2b23e421dd615784c9e23c5d7e298e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Tamarelle?= Date: Tue, 23 Jul 2024 23:56:06 +0200 Subject: [PATCH 11/14] Fix Driver title --- src/Illuminate/Database/MariaDbConnection.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Illuminate/Database/MariaDbConnection.php b/src/Illuminate/Database/MariaDbConnection.php index 4b9d1404e266..ebd33a15b9b5 100755 --- a/src/Illuminate/Database/MariaDbConnection.php +++ b/src/Illuminate/Database/MariaDbConnection.php @@ -17,7 +17,7 @@ class MariaDbConnection extends MySqlConnection */ public function getDriverTitle() { - return 'SQLite'; + return 'MariaDB'; } /** From f1e2205edcb98edb2634f935d38d1fe2cfa9248e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Tamarelle?= Date: Tue, 23 Jul 2024 23:56:30 +0200 Subject: [PATCH 12/14] Pluralize ConnectionsCount --- src/Illuminate/Database/Console/DatabaseInspectionCommand.php | 4 ++-- src/Illuminate/Database/Console/MonitorCommand.php | 2 +- src/Illuminate/Database/Console/ShowCommand.php | 2 +- src/Illuminate/Database/Schema/Builder.php | 4 ++-- src/Illuminate/Database/Schema/Grammars/Grammar.php | 2 +- src/Illuminate/Database/Schema/Grammars/MariaDbGrammar.php | 4 ++-- src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php | 2 +- src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php | 2 +- src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php | 2 +- src/Illuminate/Support/Facades/Schema.php | 2 +- tests/Integration/Database/SchemaBuilderTest.php | 4 ++-- 11 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/Illuminate/Database/Console/DatabaseInspectionCommand.php b/src/Illuminate/Database/Console/DatabaseInspectionCommand.php index 347e8930bb34..3f1451e170e3 100644 --- a/src/Illuminate/Database/Console/DatabaseInspectionCommand.php +++ b/src/Illuminate/Database/Console/DatabaseInspectionCommand.php @@ -28,11 +28,11 @@ protected function getConnectionName(ConnectionInterface $connection, $database) * @param \Illuminate\Database\ConnectionInterface $connection * @return int|null * - * @deprecated Use Schema\Builder::getConnectionCount() instead. + * @deprecated Use Schema\Builder::getConnectionsCount() instead. */ protected function getConnectionCount(ConnectionInterface $connection) { - return $connection->getSchemaBuilder()->getConnectionCount(); + return $connection->getSchemaBuilder()->getConnectionsCount(); } /** diff --git a/src/Illuminate/Database/Console/MonitorCommand.php b/src/Illuminate/Database/Console/MonitorCommand.php index a710489d3bb2..ed8826ac1e9e 100644 --- a/src/Illuminate/Database/Console/MonitorCommand.php +++ b/src/Illuminate/Database/Console/MonitorCommand.php @@ -84,7 +84,7 @@ protected function parseDatabases($databases) } $maxConnections = $this->option('max'); - $connections = $this->connection->connection($database)->getSchemaBuilder()->getConnectionCount(); + $connections = $this->connection->connection($database)->getSchemaBuilder()->getConnectionsCount(); return [ 'database' => $database, diff --git a/src/Illuminate/Database/Console/ShowCommand.php b/src/Illuminate/Database/Console/ShowCommand.php index 505f0ad10084..0ecdd1bd0f28 100644 --- a/src/Illuminate/Database/Console/ShowCommand.php +++ b/src/Illuminate/Database/Console/ShowCommand.php @@ -48,7 +48,7 @@ public function handle(ConnectionResolverInterface $connections) 'name' => $connection->getDriverTitle(), 'connection' => $connection->getName(), 'version' => $connection->getServerVersion(), - 'open_connections' => $schema->getConnectionCount(), + 'open_connections' => $schema->getConnectionsCount(), ], 'tables' => $this->tables($connection, $schema), ]; diff --git a/src/Illuminate/Database/Schema/Builder.php b/src/Illuminate/Database/Schema/Builder.php index 98be40cd677b..d926335f0fa5 100755 --- a/src/Illuminate/Database/Schema/Builder.php +++ b/src/Illuminate/Database/Schema/Builder.php @@ -612,9 +612,9 @@ public function setConnection(Connection $connection) * * @return int|null */ - public function getConnectionCount() + public function getConnectionsCount() { - $query = $this->grammar->compileConnectionCount(); + $query = $this->grammar->compileConnectionsCount(); return $query ? $this->connection->scalar($query) : null; } diff --git a/src/Illuminate/Database/Schema/Grammars/Grammar.php b/src/Illuminate/Database/Schema/Grammars/Grammar.php index 080fcb15e90b..3c0e4a0e772d 100755 --- a/src/Illuminate/Database/Schema/Grammars/Grammar.php +++ b/src/Illuminate/Database/Schema/Grammars/Grammar.php @@ -388,7 +388,7 @@ public function supportsSchemaTransactions() * * @return string|null */ - public function compileConnectionCount() + public function compileConnectionsCount() { return null; } diff --git a/src/Illuminate/Database/Schema/Grammars/MariaDbGrammar.php b/src/Illuminate/Database/Schema/Grammars/MariaDbGrammar.php index 1a9750342f20..a574edb3179c 100755 --- a/src/Illuminate/Database/Schema/Grammars/MariaDbGrammar.php +++ b/src/Illuminate/Database/Schema/Grammars/MariaDbGrammar.php @@ -56,8 +56,8 @@ protected function typeGeometry(Fluent $column) ); } - public function compileConnectionCount() + public function compileConnectionsCount() { - return 'select variable_value as `Value` from information_schema.global_status where variable_name = \'Threads_connected\''; + return 'select variable_value as `Value` from information_schema.global_status where variable_name = \'THREADS_CONNECTED\''; } } diff --git a/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php b/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php index a642ebd39502..6c29372e74a2 100755 --- a/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php +++ b/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php @@ -1338,7 +1338,7 @@ protected function wrapJsonSelector($value) return 'json_unquote(json_extract('.$field.$path.'))'; } - public function compileConnectionCount() + public function compileConnectionsCount() { return 'select variable_value as `Value` from performance_schema.session_status where variable_name = \'threads_connected\''; } diff --git a/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php b/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php index e26282e0c624..8ba43e703b50 100755 --- a/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php +++ b/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php @@ -1202,7 +1202,7 @@ protected function modifyGeneratedAs(Blueprint $blueprint, Fluent $column) return $sql; } - public function compileConnectionCount() + public function compileConnectionsCount() { return 'select count(*) as "Value" from pg_stat_activity'; } diff --git a/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php b/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php index 9ac981be2019..c56e97d9ecd7 100755 --- a/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php +++ b/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php @@ -1055,7 +1055,7 @@ public function quoteString($value) return "N'$value'"; } - public function compileConnectionCount() + public function compileConnectionsCount() { return 'select count(*) Value from sys.dm_exec_sessions where status = N\'running\''; } diff --git a/src/Illuminate/Support/Facades/Schema.php b/src/Illuminate/Support/Facades/Schema.php index c3f8647ed33e..c890aa48fc77 100755 --- a/src/Illuminate/Support/Facades/Schema.php +++ b/src/Illuminate/Support/Facades/Schema.php @@ -45,7 +45,7 @@ * @method static void mixin(object $mixin, bool $replace = true) * @method static bool hasMacro(string $name) * @method static void flushMacros() - * @method static int|null getConnectionCount() + * @method static int|null getConnectionsCount() * * @see \Illuminate\Database\Schema\Builder */ diff --git a/tests/Integration/Database/SchemaBuilderTest.php b/tests/Integration/Database/SchemaBuilderTest.php index bc67208c5cb6..105c4dacacdf 100644 --- a/tests/Integration/Database/SchemaBuilderTest.php +++ b/tests/Integration/Database/SchemaBuilderTest.php @@ -875,9 +875,9 @@ public function testAddingMacros() $this->assertFalse(Schema::hasForeignKeyForColumn('body', 'answers', 'questions')); } - public function testGetConnectionCount() + public function testGetConnectionsCount() { - $count = Schema::getConnectionCount(); + $count = Schema::getConnectionsCount(); if ($this->driver === 'sqlite') { $this->assertNull($count, 'SQLite does not support connection count'); } else { From bee8cd5337a609252580eb54277df941bf5f1ce5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Tamarelle?= Date: Wed, 31 Jul 2024 12:32:01 +0200 Subject: [PATCH 13/14] Move Schema::getConnectionsCount to Connection::getThreadsCount --- src/Illuminate/Database/Connection.php | 12 ++++++++++++ .../Console/DatabaseInspectionCommand.php | 7 ++++--- .../Database/Console/MonitorCommand.php | 3 ++- .../Database/Console/ShowCommand.php | 2 +- .../Database/Query/Grammars/Grammar.php | 10 ++++++++++ .../Database/Query/Grammars/MariaDbGrammar.php | 5 +++++ .../Database/Query/Grammars/MySqlGrammar.php | 5 +++++ .../Query/Grammars/PostgresGrammar.php | 5 +++++ .../Query/Grammars/SqlServerGrammar.php | 5 +++++ src/Illuminate/Database/Schema/Builder.php | 12 ------------ .../Database/Schema/Grammars/Grammar.php | 10 ---------- .../Schema/Grammars/MariaDbGrammar.php | 5 ----- .../Database/Schema/Grammars/MySqlGrammar.php | 5 ----- .../Schema/Grammars/PostgresGrammar.php | 5 ----- .../Schema/Grammars/SqlServerGrammar.php | 5 ----- src/Illuminate/Support/Facades/Schema.php | 1 - .../Database/ConnectionThreadsCountTest.php | 18 ++++++++++++++++++ .../Integration/Database/SchemaBuilderTest.php | 10 ---------- 18 files changed, 67 insertions(+), 58 deletions(-) create mode 100644 tests/Integration/Database/ConnectionThreadsCountTest.php diff --git a/src/Illuminate/Database/Connection.php b/src/Illuminate/Database/Connection.php index 61b41e13cf0f..28f7fdee9122 100755 --- a/src/Illuminate/Database/Connection.php +++ b/src/Illuminate/Database/Connection.php @@ -1084,6 +1084,18 @@ public function raw($value) return new Expression($value); } + /** + * Get the number of open connections for a database. + * + * @return int|null + */ + public function getThreadsCount() + { + $query = $this->getQueryGrammar()->compileThreadsCount(); + + return $query ? $this->scalar($query) : null; + } + /** * Escape a value for safe SQL embedding. * diff --git a/src/Illuminate/Database/Console/DatabaseInspectionCommand.php b/src/Illuminate/Database/Console/DatabaseInspectionCommand.php index 3f1451e170e3..d5d0aeb4a06d 100644 --- a/src/Illuminate/Database/Console/DatabaseInspectionCommand.php +++ b/src/Illuminate/Database/Console/DatabaseInspectionCommand.php @@ -3,6 +3,7 @@ namespace Illuminate\Database\Console; use Illuminate\Console\Command; +use Illuminate\Database\Connection; use Illuminate\Database\ConnectionInterface; use Illuminate\Support\Arr; @@ -15,7 +16,7 @@ abstract class DatabaseInspectionCommand extends Command * @param string $database * @return string * - * @deprecated Use $connection->getDriverTitle() instead. + * @deprecated */ protected function getConnectionName(ConnectionInterface $connection, $database) { @@ -28,11 +29,11 @@ protected function getConnectionName(ConnectionInterface $connection, $database) * @param \Illuminate\Database\ConnectionInterface $connection * @return int|null * - * @deprecated Use Schema\Builder::getConnectionsCount() instead. + * @deprecated */ protected function getConnectionCount(ConnectionInterface $connection) { - return $connection->getSchemaBuilder()->getConnectionsCount(); + return $connection->getThreadsCount(); } /** diff --git a/src/Illuminate/Database/Console/MonitorCommand.php b/src/Illuminate/Database/Console/MonitorCommand.php index ed8826ac1e9e..424527b7c715 100644 --- a/src/Illuminate/Database/Console/MonitorCommand.php +++ b/src/Illuminate/Database/Console/MonitorCommand.php @@ -84,7 +84,8 @@ protected function parseDatabases($databases) } $maxConnections = $this->option('max'); - $connections = $this->connection->connection($database)->getSchemaBuilder()->getConnectionsCount(); + + $connections = $this->connection->connection($database)->getThreadsCount(); return [ 'database' => $database, diff --git a/src/Illuminate/Database/Console/ShowCommand.php b/src/Illuminate/Database/Console/ShowCommand.php index 0ecdd1bd0f28..a089b3ad1f6d 100644 --- a/src/Illuminate/Database/Console/ShowCommand.php +++ b/src/Illuminate/Database/Console/ShowCommand.php @@ -48,7 +48,7 @@ public function handle(ConnectionResolverInterface $connections) 'name' => $connection->getDriverTitle(), 'connection' => $connection->getName(), 'version' => $connection->getServerVersion(), - 'open_connections' => $schema->getConnectionsCount(), + 'open_connections' => $connection->getThreadsCount(), ], 'tables' => $this->tables($connection, $schema), ]; diff --git a/src/Illuminate/Database/Query/Grammars/Grammar.php b/src/Illuminate/Database/Query/Grammars/Grammar.php index 63e624bcaf17..ff62eade90d3 100755 --- a/src/Illuminate/Database/Query/Grammars/Grammar.php +++ b/src/Illuminate/Database/Query/Grammars/Grammar.php @@ -1564,4 +1564,14 @@ public function getBitwiseOperators() { return $this->bitwiseOperators; } + + /** + * Get the number of open connections for a database. + * + * @return string|null + */ + public function compileThreadsCount() + { + return null; + } } diff --git a/src/Illuminate/Database/Query/Grammars/MariaDbGrammar.php b/src/Illuminate/Database/Query/Grammars/MariaDbGrammar.php index ca17399fe0dd..109fda31010e 100755 --- a/src/Illuminate/Database/Query/Grammars/MariaDbGrammar.php +++ b/src/Illuminate/Database/Query/Grammars/MariaDbGrammar.php @@ -43,4 +43,9 @@ public function useLegacyGroupLimit(Builder $query) { return false; } + + public function compileThreadsCount() + { + return 'select variable_value as `Value` from information_schema.global_status where variable_name = \'THREADS_CONNECTED\''; + } } diff --git a/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php b/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php index 397dbe54e24b..cb5023632c83 100755 --- a/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php +++ b/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php @@ -514,4 +514,9 @@ protected function wrapJsonBooleanSelector($value) return 'json_extract('.$field.$path.')'; } + + public function compileThreadsCount() + { + return 'select variable_value as `Value` from performance_schema.session_status where variable_name = \'threads_connected\''; + } } diff --git a/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php b/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php index bbb11284e72b..786844a0793f 100755 --- a/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php +++ b/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php @@ -762,4 +762,9 @@ public function substituteBindingsIntoRawSql($sql, $bindings) return $query; } + + public function compileThreadsCount() + { + return 'select count(*) as "Value" from pg_stat_activity'; + } } diff --git a/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php b/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php index c084308b74ba..f1975d8ddebc 100755 --- a/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php +++ b/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php @@ -497,6 +497,11 @@ public function compileSavepointRollBack($name) return 'ROLLBACK TRANSACTION '.$name; } + public function compileThreadsCount() + { + return 'select count(*) Value from sys.dm_exec_sessions where status = N\'running\''; + } + /** * Get the format for database stored dates. * diff --git a/src/Illuminate/Database/Schema/Builder.php b/src/Illuminate/Database/Schema/Builder.php index d926335f0fa5..7b899c0a1c7c 100755 --- a/src/Illuminate/Database/Schema/Builder.php +++ b/src/Illuminate/Database/Schema/Builder.php @@ -607,18 +607,6 @@ public function setConnection(Connection $connection) return $this; } - /** - * Get the number of open connections for a database. - * - * @return int|null - */ - public function getConnectionsCount() - { - $query = $this->grammar->compileConnectionsCount(); - - return $query ? $this->connection->scalar($query) : null; - } - /** * Set the Schema Blueprint resolver callback. * diff --git a/src/Illuminate/Database/Schema/Grammars/Grammar.php b/src/Illuminate/Database/Schema/Grammars/Grammar.php index 3c0e4a0e772d..8efc92592988 100755 --- a/src/Illuminate/Database/Schema/Grammars/Grammar.php +++ b/src/Illuminate/Database/Schema/Grammars/Grammar.php @@ -382,14 +382,4 @@ public function supportsSchemaTransactions() { return $this->transactions; } - - /** - * Get the number of open connections for a database. - * - * @return string|null - */ - public function compileConnectionsCount() - { - return null; - } } diff --git a/src/Illuminate/Database/Schema/Grammars/MariaDbGrammar.php b/src/Illuminate/Database/Schema/Grammars/MariaDbGrammar.php index a574edb3179c..2996406a27fb 100755 --- a/src/Illuminate/Database/Schema/Grammars/MariaDbGrammar.php +++ b/src/Illuminate/Database/Schema/Grammars/MariaDbGrammar.php @@ -55,9 +55,4 @@ protected function typeGeometry(Fluent $column) $column->srid ? ' ref_system_id='.$column->srid : '' ); } - - public function compileConnectionsCount() - { - return 'select variable_value as `Value` from information_schema.global_status where variable_name = \'THREADS_CONNECTED\''; - } } diff --git a/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php b/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php index 6c29372e74a2..f66317d619a6 100755 --- a/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php +++ b/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php @@ -1337,9 +1337,4 @@ protected function wrapJsonSelector($value) return 'json_unquote(json_extract('.$field.$path.'))'; } - - public function compileConnectionsCount() - { - return 'select variable_value as `Value` from performance_schema.session_status where variable_name = \'threads_connected\''; - } } diff --git a/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php b/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php index 8ba43e703b50..a8f2249e91ce 100755 --- a/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php +++ b/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php @@ -1201,9 +1201,4 @@ protected function modifyGeneratedAs(Blueprint $blueprint, Fluent $column) return $sql; } - - public function compileConnectionsCount() - { - return 'select count(*) as "Value" from pg_stat_activity'; - } } diff --git a/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php b/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php index c56e97d9ecd7..fe8121b4f4fc 100755 --- a/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php +++ b/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php @@ -1054,9 +1054,4 @@ public function quoteString($value) return "N'$value'"; } - - public function compileConnectionsCount() - { - return 'select count(*) Value from sys.dm_exec_sessions where status = N\'running\''; - } } diff --git a/src/Illuminate/Support/Facades/Schema.php b/src/Illuminate/Support/Facades/Schema.php index c890aa48fc77..d4d39f9f0521 100755 --- a/src/Illuminate/Support/Facades/Schema.php +++ b/src/Illuminate/Support/Facades/Schema.php @@ -45,7 +45,6 @@ * @method static void mixin(object $mixin, bool $replace = true) * @method static bool hasMacro(string $name) * @method static void flushMacros() - * @method static int|null getConnectionsCount() * * @see \Illuminate\Database\Schema\Builder */ diff --git a/tests/Integration/Database/ConnectionThreadsCountTest.php b/tests/Integration/Database/ConnectionThreadsCountTest.php new file mode 100644 index 000000000000..8fa3c89e85ca --- /dev/null +++ b/tests/Integration/Database/ConnectionThreadsCountTest.php @@ -0,0 +1,18 @@ +getThreadsCount(); + if ($this->driver === 'sqlite') { + $this->assertNull($count, 'SQLite does not support connection count'); + } else { + $this->assertGreaterThanOrEqual(1, $count); + } + } +} diff --git a/tests/Integration/Database/SchemaBuilderTest.php b/tests/Integration/Database/SchemaBuilderTest.php index 105c4dacacdf..b0c1f67f3c9a 100644 --- a/tests/Integration/Database/SchemaBuilderTest.php +++ b/tests/Integration/Database/SchemaBuilderTest.php @@ -874,14 +874,4 @@ public function testAddingMacros() $this->assertTrue(Schema::hasForeignKeyForColumn('question_id', 'answers', 'questions')); $this->assertFalse(Schema::hasForeignKeyForColumn('body', 'answers', 'questions')); } - - public function testGetConnectionsCount() - { - $count = Schema::getConnectionsCount(); - if ($this->driver === 'sqlite') { - $this->assertNull($count, 'SQLite does not support connection count'); - } else { - $this->assertGreaterThanOrEqual(1, $count); - } - } } From 22e6fe56727a1fcfe75d16061e9a76ff589454f0 Mon Sep 17 00:00:00 2001 From: Taylor Otwell Date: Thu, 1 Aug 2024 14:17:09 -0500 Subject: [PATCH 14/14] formatting --- src/Illuminate/Database/Connection.php | 24 +++++++++---------- .../Console/DatabaseInspectionCommand.php | 2 +- .../Database/Console/MonitorCommand.php | 2 +- .../Database/Console/ShowCommand.php | 2 +- .../Database/Query/Grammars/Grammar.php | 20 ++++++++-------- .../Query/Grammars/MariaDbGrammar.php | 15 ++++++++---- .../Database/Query/Grammars/MySqlGrammar.php | 15 ++++++++---- .../Query/Grammars/PostgresGrammar.php | 15 ++++++++---- .../Query/Grammars/SqlServerGrammar.php | 7 +++++- .../Database/ConnectionThreadsCountTest.php | 3 ++- 10 files changed, 63 insertions(+), 42 deletions(-) diff --git a/src/Illuminate/Database/Connection.php b/src/Illuminate/Database/Connection.php index 28f7fdee9122..723b586ec251 100755 --- a/src/Illuminate/Database/Connection.php +++ b/src/Illuminate/Database/Connection.php @@ -624,6 +624,18 @@ public function unprepared($query) }); } + /** + * Get the number of open connections for the database. + * + * @return int|null + */ + public function threadCount() + { + $query = $this->getQueryGrammar()->compileThreadCount(); + + return $query ? $this->scalar($query) : null; + } + /** * Execute the given callback in "dry run" mode. * @@ -1084,18 +1096,6 @@ public function raw($value) return new Expression($value); } - /** - * Get the number of open connections for a database. - * - * @return int|null - */ - public function getThreadsCount() - { - $query = $this->getQueryGrammar()->compileThreadsCount(); - - return $query ? $this->scalar($query) : null; - } - /** * Escape a value for safe SQL embedding. * diff --git a/src/Illuminate/Database/Console/DatabaseInspectionCommand.php b/src/Illuminate/Database/Console/DatabaseInspectionCommand.php index d5d0aeb4a06d..621a2f3a4387 100644 --- a/src/Illuminate/Database/Console/DatabaseInspectionCommand.php +++ b/src/Illuminate/Database/Console/DatabaseInspectionCommand.php @@ -33,7 +33,7 @@ protected function getConnectionName(ConnectionInterface $connection, $database) */ protected function getConnectionCount(ConnectionInterface $connection) { - return $connection->getThreadsCount(); + return $connection->threadCount(); } /** diff --git a/src/Illuminate/Database/Console/MonitorCommand.php b/src/Illuminate/Database/Console/MonitorCommand.php index 424527b7c715..7975b82dee93 100644 --- a/src/Illuminate/Database/Console/MonitorCommand.php +++ b/src/Illuminate/Database/Console/MonitorCommand.php @@ -85,7 +85,7 @@ protected function parseDatabases($databases) $maxConnections = $this->option('max'); - $connections = $this->connection->connection($database)->getThreadsCount(); + $connections = $this->connection->connection($database)->threadCount(); return [ 'database' => $database, diff --git a/src/Illuminate/Database/Console/ShowCommand.php b/src/Illuminate/Database/Console/ShowCommand.php index a089b3ad1f6d..4431c363fe6c 100644 --- a/src/Illuminate/Database/Console/ShowCommand.php +++ b/src/Illuminate/Database/Console/ShowCommand.php @@ -48,7 +48,7 @@ public function handle(ConnectionResolverInterface $connections) 'name' => $connection->getDriverTitle(), 'connection' => $connection->getName(), 'version' => $connection->getServerVersion(), - 'open_connections' => $connection->getThreadsCount(), + 'open_connections' => $connection->threadCount(), ], 'tables' => $this->tables($connection, $schema), ]; diff --git a/src/Illuminate/Database/Query/Grammars/Grammar.php b/src/Illuminate/Database/Query/Grammars/Grammar.php index ff62eade90d3..3478de3b2509 100755 --- a/src/Illuminate/Database/Query/Grammars/Grammar.php +++ b/src/Illuminate/Database/Query/Grammars/Grammar.php @@ -1429,6 +1429,16 @@ protected function compileLock(Builder $query, $value) return is_string($value) ? $value : ''; } + /** + * Compile a query to get the number of open connections for a database. + * + * @return string|null + */ + public function compileThreadCount() + { + return null; + } + /** * Determine if the grammar supports savepoints. * @@ -1564,14 +1574,4 @@ public function getBitwiseOperators() { return $this->bitwiseOperators; } - - /** - * Get the number of open connections for a database. - * - * @return string|null - */ - public function compileThreadsCount() - { - return null; - } } diff --git a/src/Illuminate/Database/Query/Grammars/MariaDbGrammar.php b/src/Illuminate/Database/Query/Grammars/MariaDbGrammar.php index 109fda31010e..da51125b9774 100755 --- a/src/Illuminate/Database/Query/Grammars/MariaDbGrammar.php +++ b/src/Illuminate/Database/Query/Grammars/MariaDbGrammar.php @@ -33,6 +33,16 @@ public function compileJsonValueCast($value) return "json_query({$value}, '$')"; } + /** + * Compile a query to get the number of open connections for a database. + * + * @return string + */ + public function compileThreadCount() + { + return 'select variable_value as `Value` from information_schema.global_status where variable_name = \'THREADS_CONNECTED\''; + } + /** * Determine whether to use a legacy group limit clause for MySQL < 8.0. * @@ -43,9 +53,4 @@ public function useLegacyGroupLimit(Builder $query) { return false; } - - public function compileThreadsCount() - { - return 'select variable_value as `Value` from information_schema.global_status where variable_name = \'THREADS_CONNECTED\''; - } } diff --git a/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php b/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php index cb5023632c83..f2823fd8e8d8 100755 --- a/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php +++ b/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php @@ -478,6 +478,16 @@ protected function compileDeleteWithoutJoins(Builder $query, $table, $where) return $sql; } + /** + * Compile a query to get the number of open connections for a database. + * + * @return string + */ + public function compileThreadCount() + { + return 'select variable_value as `Value` from performance_schema.session_status where variable_name = \'threads_connected\''; + } + /** * Wrap a single string in keyword identifiers. * @@ -514,9 +524,4 @@ protected function wrapJsonBooleanSelector($value) return 'json_extract('.$field.$path.')'; } - - public function compileThreadsCount() - { - return 'select variable_value as `Value` from performance_schema.session_status where variable_name = \'threads_connected\''; - } } diff --git a/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php b/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php index 786844a0793f..232c824d1b1f 100755 --- a/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php +++ b/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php @@ -649,6 +649,16 @@ public function compileTruncate(Builder $query) return ['truncate '.$this->wrapTable($query->from).' restart identity cascade' => []]; } + /** + * Compile a query to get the number of open connections for a database. + * + * @return string + */ + public function compileThreadCount() + { + return 'select count(*) as "Value" from pg_stat_activity'; + } + /** * Wrap the given JSON selector. * @@ -762,9 +772,4 @@ public function substituteBindingsIntoRawSql($sql, $bindings) return $query; } - - public function compileThreadsCount() - { - return 'select count(*) as "Value" from pg_stat_activity'; - } } diff --git a/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php b/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php index f1975d8ddebc..9d42682a5384 100755 --- a/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php +++ b/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php @@ -497,7 +497,12 @@ public function compileSavepointRollBack($name) return 'ROLLBACK TRANSACTION '.$name; } - public function compileThreadsCount() + /** + * Compile a query to get the number of open connections for a database. + * + * @return string + */ + public function compileThreadCount() { return 'select count(*) Value from sys.dm_exec_sessions where status = N\'running\''; } diff --git a/tests/Integration/Database/ConnectionThreadsCountTest.php b/tests/Integration/Database/ConnectionThreadsCountTest.php index 8fa3c89e85ca..abf53c91df92 100644 --- a/tests/Integration/Database/ConnectionThreadsCountTest.php +++ b/tests/Integration/Database/ConnectionThreadsCountTest.php @@ -8,7 +8,8 @@ class ConnectionThreadsCountTest extends DatabaseTestCase { public function testGetThreadsCount() { - $count = DB::connection()->getThreadsCount(); + $count = DB::connection()->threadCount(); + if ($this->driver === 'sqlite') { $this->assertNull($count, 'SQLite does not support connection count'); } else {