From cf218e9bce76fd787743a92f500a8d99ecc59bff Mon Sep 17 00:00:00 2001 From: David Grudl Date: Thu, 20 Jan 2022 01:15:08 +0100 Subject: [PATCH] Driver::getColumns() removed case convert for 'nativetype' and keys in 'vendor' (BC break) --- src/Database/Drivers/MsSqlDriver.php | 2 +- src/Database/Drivers/MySqlDriver.php | 15 +++++++-------- src/Database/Drivers/PgSqlDriver.php | 2 +- src/Database/Drivers/SqlsrvDriver.php | 2 +- tests/Database/Reflection.phpt | 11 ++++++----- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/Database/Drivers/MsSqlDriver.php b/src/Database/Drivers/MsSqlDriver.php index 91d5eb490..50b9b2610 100644 --- a/src/Database/Drivers/MsSqlDriver.php +++ b/src/Database/Drivers/MsSqlDriver.php @@ -102,7 +102,7 @@ public function getColumns(string $table): array $columns[] = [ 'name' => $row['COLUMN_NAME'], 'table' => $table, - 'nativetype' => strtoupper($row['DATA_TYPE']), + 'nativetype' => $row['DATA_TYPE'], 'size' => $row['CHARACTER_MAXIMUM_LENGTH'] ?? ($row['NUMERIC_PRECISION'] ?? null), 'unsigned' => false, 'nullable' => $row['IS_NULLABLE'] === 'YES', diff --git a/src/Database/Drivers/MySqlDriver.php b/src/Database/Drivers/MySqlDriver.php index ab38281d2..db47ba36a 100644 --- a/src/Database/Drivers/MySqlDriver.php +++ b/src/Database/Drivers/MySqlDriver.php @@ -134,17 +134,16 @@ public function getColumns(string $table): array { $columns = []; foreach ($this->pdo->query('SHOW FULL COLUMNS FROM ' . $this->delimite($table), \PDO::FETCH_ASSOC) as $row) { - $row = array_change_key_case($row, CASE_LOWER); - $type = explode('(', $row['type']); + $type = explode('(', $row['Type']); $columns[] = [ - 'name' => $row['field'], + 'name' => $row['Field'], 'table' => $table, - 'nativetype' => strtoupper($type[0]), + 'nativetype' => $type[0], 'size' => isset($type[1]) ? (int) $type[1] : null, - 'nullable' => $row['null'] === 'YES', - 'default' => $row['default'], - 'autoincrement' => $row['extra'] === 'auto_increment', - 'primary' => $row['key'] === 'PRI', + 'nullable' => $row['Null'] === 'YES', + 'default' => $row['Default'], + 'autoincrement' => $row['Extra'] === 'auto_increment', + 'primary' => $row['Key'] === 'PRI', 'vendor' => $row, ]; } diff --git a/src/Database/Drivers/PgSqlDriver.php b/src/Database/Drivers/PgSqlDriver.php index 31f13d518..59defba35 100644 --- a/src/Database/Drivers/PgSqlDriver.php +++ b/src/Database/Drivers/PgSqlDriver.php @@ -117,7 +117,7 @@ public function getColumns(string $table): array SELECT a.attname::varchar AS name, c.relname::varchar AS table, - upper(t.typname) AS nativetype, + t.typname AS nativetype, CASE WHEN a.atttypmod = -1 THEN NULL ELSE a.atttypmod -4 END AS size, NOT (a.attnotnull OR t.typtype = 'd' AND t.typnotnull) AS nullable, pg_catalog.pg_get_expr(ad.adbin, 'pg_catalog.pg_attrdef'::regclass)::varchar AS default, diff --git a/src/Database/Drivers/SqlsrvDriver.php b/src/Database/Drivers/SqlsrvDriver.php index c781344c3..3135e7166 100644 --- a/src/Database/Drivers/SqlsrvDriver.php +++ b/src/Database/Drivers/SqlsrvDriver.php @@ -122,7 +122,7 @@ public function getColumns(string $table): array SELECT c.name AS name, o.name AS [table], - UPPER(t.name) AS nativetype, + t.name AS nativetype, NULL AS size, c.is_nullable AS nullable, OBJECT_DEFINITION(c.default_object_id) AS [default], diff --git a/tests/Database/Reflection.phpt b/tests/Database/Reflection.phpt index 5b60e3bc4..78c6d4623 100644 --- a/tests/Database/Reflection.phpt +++ b/tests/Database/Reflection.phpt @@ -50,7 +50,7 @@ $expectedColumns = [ [ 'name' => 'id', 'table' => 'author', - 'nativetype' => 'INT', + 'nativetype' => 'int', 'size' => 11, 'nullable' => false, 'default' => null, @@ -60,7 +60,7 @@ $expectedColumns = [ [ 'name' => 'name', 'table' => 'author', - 'nativetype' => 'VARCHAR', + 'nativetype' => 'varchar', 'size' => 30, 'nullable' => false, 'default' => null, @@ -70,7 +70,7 @@ $expectedColumns = [ [ 'name' => 'web', 'table' => 'author', - 'nativetype' => 'VARCHAR', + 'nativetype' => 'varchar', 'size' => 100, 'nullable' => false, 'default' => null, @@ -80,7 +80,7 @@ $expectedColumns = [ [ 'name' => 'born', 'table' => 'author', - 'nativetype' => 'DATE', + 'nativetype' => 'date', 'size' => null, 'nullable' => true, 'default' => null, @@ -97,7 +97,7 @@ switch ($driverName) { } break; case 'pgsql': - $expectedColumns[0]['nativetype'] = 'INT4'; + $expectedColumns[0]['nativetype'] = 'int4'; $expectedColumns[0]['default'] = "nextval('author_id_seq'::regclass)"; $expectedColumns[0]['size'] = null; break; @@ -108,6 +108,7 @@ switch ($driverName) { $expectedColumns[1]['size'] = null; $expectedColumns[2]['nativetype'] = 'TEXT'; $expectedColumns[2]['size'] = null; + $expectedColumns[3]['nativetype'] = 'DATE'; break; case 'sqlsrv': $expectedColumns[0]['size'] = null;