From faab30641881991a91492d2fb5d6758e947f1d1e Mon Sep 17 00:00:00 2001 From: David Grudl Date: Tue, 22 Oct 2019 19:26:24 +0200 Subject: [PATCH] Translator: trims spaces from SQL [Closes #326] --- src/Dibi/Translator.php | 2 +- tests/dibi/DataSource.phpt | 6 +++--- tests/dibi/Fluent.fetch.limit.mssql.phpt | 20 +++++++++--------- tests/dibi/Fluent.fetch.limit.phpt | 26 ++++++++++++------------ tests/dibi/Fluent.select.phpt | 6 +++--- tests/dibi/Translator.phpt | 18 ++++++++-------- 6 files changed, 39 insertions(+), 39 deletions(-) diff --git a/src/Dibi/Translator.php b/src/Dibi/Translator.php index 12907b55b..157f3b54c 100644 --- a/src/Dibi/Translator.php +++ b/src/Dibi/Translator.php @@ -151,7 +151,7 @@ public function translate(array $args): string $sql[] = '*/'; } - $sql = implode(' ', $sql); + $sql = trim(implode(' ', $sql), ' '); if ($this->errors) { throw new Exception('SQL translate error: ' . trim(reset($this->errors), '*'), 0, $sql); diff --git a/tests/dibi/DataSource.phpt b/tests/dibi/DataSource.phpt index cbeced0d6..12ac92453 100644 --- a/tests/dibi/DataSource.phpt +++ b/tests/dibi/DataSource.phpt @@ -77,7 +77,7 @@ SELECT [product_id] FROM (SELECT * FROM products) t WHERE (title like '%a%') AND (product_id = 1) AND (product_id = 1) ORDER BY [product_id] ASC - ) t"), dibi::$sql); +) t"), dibi::$sql); Assert::same(1, $ds->toDataSource()->count()); @@ -93,7 +93,7 @@ SELECT [product_id] FROM (SELECT * FROM products) t WHERE (title like '%a%') AND (product_id = 1) AND (product_id = 1) ORDER BY [product_id] ASC - "), +"), dibi::$sql ); @@ -106,7 +106,7 @@ SELECT [product_id] FROM (SELECT * FROM products) t WHERE (title like '%a%') AND (product_id = 1) AND (product_id = 1) ORDER BY [product_id] ASC - ) t"), +) t"), (string) $fluent ); diff --git a/tests/dibi/Fluent.fetch.limit.mssql.phpt b/tests/dibi/Fluent.fetch.limit.mssql.phpt index 14118d7bf..3bffb7976 100644 --- a/tests/dibi/Fluent.fetch.limit.mssql.phpt +++ b/tests/dibi/Fluent.fetch.limit.mssql.phpt @@ -56,28 +56,28 @@ $fluent = $conn->select('*') ->orderBy('customer_id'); Assert::same( - reformat('SELECT TOP (1) * FROM ( SELECT * FROM [customers] ORDER BY [customer_id]) t'), + reformat('SELECT TOP (1) * FROM (SELECT * FROM [customers] ORDER BY [customer_id]) t'), (string) $fluent ); $fluent->fetch(); Assert::same( - 'SELECT TOP (1) * FROM ( SELECT * FROM [customers] ORDER BY [customer_id]) t', + 'SELECT TOP (1) * FROM (SELECT * FROM [customers] ORDER BY [customer_id]) t', dibi::$sql ); $fluent->fetchSingle(); Assert::same( - reformat('SELECT TOP (1) * FROM ( SELECT * FROM [customers] ORDER BY [customer_id]) t'), + reformat('SELECT TOP (1) * FROM (SELECT * FROM [customers] ORDER BY [customer_id]) t'), dibi::$sql ); $fluent->fetchAll(0, 3); Assert::same( - reformat('SELECT TOP (3) * FROM ( SELECT * FROM [customers] ORDER BY [customer_id]) t'), + reformat('SELECT TOP (3) * FROM (SELECT * FROM [customers] ORDER BY [customer_id]) t'), dibi::$sql ); Assert::same( - reformat('SELECT TOP (1) * FROM ( SELECT * FROM [customers] ORDER BY [customer_id]) t'), + reformat('SELECT TOP (1) * FROM (SELECT * FROM [customers] ORDER BY [customer_id]) t'), (string) $fluent ); @@ -85,16 +85,16 @@ Assert::same( $fluent->limit(0); $fluent->fetch(); Assert::same( - reformat('SELECT TOP (0) * FROM ( SELECT * FROM [customers] ORDER BY [customer_id]) t'), + reformat('SELECT TOP (0) * FROM (SELECT * FROM [customers] ORDER BY [customer_id]) t'), dibi::$sql ); $fluent->fetchSingle(); Assert::same( - reformat('SELECT TOP (0) * FROM ( SELECT * FROM [customers] ORDER BY [customer_id]) t'), + reformat('SELECT TOP (0) * FROM (SELECT * FROM [customers] ORDER BY [customer_id]) t'), dibi::$sql ); Assert::same( - reformat('SELECT TOP (0) * FROM ( SELECT * FROM [customers] ORDER BY [customer_id]) t'), + reformat('SELECT TOP (0) * FROM (SELECT * FROM [customers] ORDER BY [customer_id]) t'), (string) $fluent ); @@ -103,12 +103,12 @@ $fluent->removeClause('limit'); $fluent->removeClause('offset'); $fluent->fetch(); Assert::same( - reformat('SELECT TOP (1) * FROM ( SELECT * FROM [customers] ORDER BY [customer_id]) t'), + reformat('SELECT TOP (1) * FROM (SELECT * FROM [customers] ORDER BY [customer_id]) t'), dibi::$sql ); $fluent->fetchSingle(); Assert::same( - reformat('SELECT TOP (1) * FROM ( SELECT * FROM [customers] ORDER BY [customer_id]) t'), + reformat('SELECT TOP (1) * FROM (SELECT * FROM [customers] ORDER BY [customer_id]) t'), dibi::$sql ); Assert::same( diff --git a/tests/dibi/Fluent.fetch.limit.phpt b/tests/dibi/Fluent.fetch.limit.phpt index e8e54be8f..f8f4f5d52 100644 --- a/tests/dibi/Fluent.fetch.limit.phpt +++ b/tests/dibi/Fluent.fetch.limit.phpt @@ -22,28 +22,28 @@ $fluent = $conn->select('*') ->orderBy('customer_id'); Assert::same( - reformat(' SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 1 OFFSET 3'), + reformat('SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 1 OFFSET 3'), (string) $fluent ); $fluent->fetch(); Assert::same( - reformat(' SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 1 OFFSET 3'), + reformat('SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 1 OFFSET 3'), dibi::$sql ); $fluent->fetchSingle(); Assert::same( - reformat(' SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 1 OFFSET 3'), + reformat('SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 1 OFFSET 3'), dibi::$sql ); $fluent->fetchAll(2, 3); Assert::same( - reformat(' SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 3 OFFSET 2'), + reformat('SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 3 OFFSET 2'), dibi::$sql ); Assert::same( - reformat(' SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 1 OFFSET 3'), + reformat('SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 1 OFFSET 3'), (string) $fluent ); @@ -51,16 +51,16 @@ Assert::same( $fluent->limit(0); $fluent->fetch(); Assert::same( - reformat(' SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 0 OFFSET 3'), + reformat('SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 0 OFFSET 3'), dibi::$sql ); $fluent->fetchSingle(); Assert::same( - reformat(' SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 0 OFFSET 3'), + reformat('SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 0 OFFSET 3'), dibi::$sql ); Assert::same( - reformat(' SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 0 OFFSET 3'), + reformat('SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 0 OFFSET 3'), (string) $fluent ); @@ -68,16 +68,16 @@ Assert::same( $fluent->removeClause('limit'); $fluent->fetch(); Assert::same( - reformat(' SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 1 OFFSET 3'), + reformat('SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 1 OFFSET 3'), dibi::$sql ); $fluent->fetchSingle(); Assert::same( - reformat(' SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 1 OFFSET 3'), + reformat('SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 1 OFFSET 3'), dibi::$sql ); Assert::same( - reformat(' SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 18446744073709551615 OFFSET 3'), + reformat('SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 18446744073709551615 OFFSET 3'), (string) $fluent ); @@ -85,12 +85,12 @@ Assert::same( $fluent->removeClause('offset'); $fluent->fetch(); Assert::same( - reformat(' SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 1'), + reformat('SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 1'), dibi::$sql ); $fluent->fetchSingle(); Assert::same( - reformat(' SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 1'), + reformat('SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 1'), dibi::$sql ); Assert::same( diff --git a/tests/dibi/Fluent.select.phpt b/tests/dibi/Fluent.select.phpt index ee0366213..17a1f914c 100644 --- a/tests/dibi/Fluent.select.phpt +++ b/tests/dibi/Fluent.select.phpt @@ -95,9 +95,9 @@ $fluent = $conn->select('*') Assert::same( reformat([ - 'odbc' => 'SELECT TOP 1 * FROM ( SELECT * , (SELECT count(*) FROM [precteni] AS [P] WHERE P.id_clanku = C.id_clanku) FROM [clanky] AS [C] WHERE id_clanku=123) t', - 'sqlsrv' => ' SELECT * , (SELECT count(*) FROM [precteni] AS [P] WHERE P.id_clanku = C.id_clanku) FROM [clanky] AS [C] WHERE id_clanku=123 OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY', - ' SELECT * , (SELECT count(*) FROM [precteni] AS [P] WHERE P.id_clanku = C.id_clanku) FROM [clanky] AS [C] WHERE id_clanku=123 LIMIT 1', + 'odbc' => 'SELECT TOP 1 * FROM (SELECT * , (SELECT count(*) FROM [precteni] AS [P] WHERE P.id_clanku = C.id_clanku) FROM [clanky] AS [C] WHERE id_clanku=123) t', + 'sqlsrv' => 'SELECT * , (SELECT count(*) FROM [precteni] AS [P] WHERE P.id_clanku = C.id_clanku) FROM [clanky] AS [C] WHERE id_clanku=123 OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY', + 'SELECT * , (SELECT count(*) FROM [precteni] AS [P] WHERE P.id_clanku = C.id_clanku) FROM [clanky] AS [C] WHERE id_clanku=123 LIMIT 1', ]), (string) $fluent ); diff --git a/tests/dibi/Translator.phpt b/tests/dibi/Translator.phpt index 74a290c04..916f7e771 100644 --- a/tests/dibi/Translator.phpt +++ b/tests/dibi/Translator.phpt @@ -168,9 +168,9 @@ Assert::same( // with limit = 2 Assert::same( reformat([ - 'odbc' => 'SELECT TOP 2 * FROM (SELECT * FROM [products] ) t', + 'odbc' => 'SELECT TOP 2 * FROM (SELECT * FROM [products]) t', 'sqlsrv' => 'SELECT * FROM [products] OFFSET 0 ROWS FETCH NEXT 2 ROWS ONLY', - 'SELECT * FROM [products] LIMIT 2', + 'SELECT * FROM [products] LIMIT 2', ]), $conn->translate('SELECT * FROM [products] %lmt', 2) ); @@ -184,7 +184,7 @@ if ($config['system'] === 'odbc') { Assert::same( reformat([ 'sqlsrv' => 'SELECT * FROM [products] OFFSET 1 ROWS FETCH NEXT 2 ROWS ONLY', - 'SELECT * FROM [products] LIMIT 2 OFFSET 1', + 'SELECT * FROM [products] LIMIT 2 OFFSET 1', ]), $conn->translate('SELECT * FROM [products] %lmt %ofs', 2, 1) ); @@ -192,10 +192,10 @@ if ($config['system'] === 'odbc') { // with offset = 50 Assert::same( reformat([ - 'mysql' => 'SELECT * FROM `products` LIMIT 18446744073709551615 OFFSET 50', - 'postgre' => 'SELECT * FROM "products" OFFSET 50', + 'mysql' => 'SELECT * FROM `products` LIMIT 18446744073709551615 OFFSET 50', + 'postgre' => 'SELECT * FROM "products" OFFSET 50', 'sqlsrv' => 'SELECT * FROM [products] OFFSET 50 ROWS', - 'SELECT * FROM [products] LIMIT -1 OFFSET 50', + 'SELECT * FROM [products] LIMIT -1 OFFSET 50', ]), $conn->translate('SELECT * FROM [products] %ofs', 50) ); @@ -494,9 +494,9 @@ Assert::same( Assert::same( reformat([ - 'odbc' => 'SELECT TOP 10 * FROM (SELECT * FROM [test] WHERE [id] LIKE \'%d%t\' ) t', + 'odbc' => 'SELECT TOP 10 * FROM (SELECT * FROM [test] WHERE [id] LIKE \'%d%t\') t', 'sqlsrv' => 'SELECT * FROM [test] WHERE [id] LIKE N\'%d%t\' OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY', - 'SELECT * FROM [test] WHERE [id] LIKE \'%d%t\' LIMIT 10', + 'SELECT * FROM [test] WHERE [id] LIKE \'%d%t\' LIMIT 10', ]), $conn->translate("SELECT * FROM [test] WHERE %n LIKE '%d%t' %lmt", 'id', 10) ); @@ -512,7 +512,7 @@ Assert::same( Assert::same( - reformat('SELECT FROM ... '), + reformat('SELECT FROM ...'), $conn->translate('SELECT FROM ... %lmt', null) );