1
0
mirror of https://github.com/dg/dibi.git synced 2025-08-05 21:58:10 +02:00

Translator, Fluent: preserve dot in name after AS [Closes #224]

This commit is contained in:
David Grudl
2016-07-20 15:33:04 +02:00
parent d405ec369b
commit 25246529f7
4 changed files with 14 additions and 14 deletions

View File

@@ -181,7 +181,7 @@ class Fluent implements IDataSource
return $this; return $this;
} elseif (is_string($arg) && preg_match('#^[a-z:_][a-z0-9_.:]*\z#i', $arg)) { // identifier } elseif (is_string($arg) && preg_match('#^[a-z:_][a-z0-9_.:]*\z#i', $arg)) { // identifier
$args = ['%n', $arg]; $args = [$clause === 'AS' ? '%N' : '%n', $arg];
} elseif (is_array($arg) || ($arg instanceof \Traversable && !$arg instanceof self)) { // any array } elseif (is_array($arg) || ($arg instanceof \Traversable && !$arg instanceof self)) { // any array
if (isset(self::$modifiers[$clause])) { if (isset(self::$modifiers[$clause])) {

View File

@@ -225,7 +225,7 @@ final class Translator
case 'n': // key, key, ... identifier names case 'n': // key, key, ... identifier names
foreach ($value as $k => $v) { foreach ($value as $k => $v) {
if (is_string($k)) { if (is_string($k)) {
$vx[] = $this->identifiers->$k . (empty($v) ? '' : ' AS ' . $this->identifiers->$v); $vx[] = $this->identifiers->$k . (empty($v) ? '' : ' AS ' . $this->driver->escapeIdentifier($v));
} else { } else {
$pair = explode('%', $v, 2); // split into identifier & modifier $pair = explode('%', $v, 2); // split into identifier & modifier
$vx[] = $this->identifiers->{$pair[0]}; $vx[] = $this->identifiers->{$pair[0]};

View File

@@ -26,19 +26,19 @@ Assert::same(
(string) $fluent (string) $fluent
); );
$fluent->from('table')->as('tableAlias') $fluent->from('table')->as('table.Alias')
->innerJoin('table1')->on('table.col = table1.col') ->innerJoin('table1')->on('table.col = table1.col')
->innerJoin('table2')->on('table.col = table2.col'); ->innerJoin('table2')->on('table.col = table2.col');
Assert::same( Assert::same(
reformat('SELECT * , [a] , [b] AS [bAlias] , [c], [d], [e] , [d] FROM [table] AS [tableAlias] INNER JOIN [table1] ON table.col = table1.col INNER JOIN [table2] ON table.col = table2.col'), reformat('SELECT * , [a] , [b] AS [bAlias] , [c], [d], [e] , [d] FROM [table] AS [table.Alias] INNER JOIN [table1] ON table.col = table1.col INNER JOIN [table2] ON table.col = table2.col'),
(string) $fluent (string) $fluent
); );
$fluent->from('anotherTable'); $fluent->from('anotherTable');
Assert::same( Assert::same(
reformat('SELECT * , [a] , [b] AS [bAlias] , [c], [d], [e] , [d] FROM [table] AS [tableAlias] INNER JOIN [table1] ON table.col = table1.col INNER JOIN [table2] ON table.col = table2.col , [anotherTable]'), reformat('SELECT * , [a] , [b] AS [bAlias] , [c], [d], [e] , [d] FROM [table] AS [table.Alias] INNER JOIN [table1] ON table.col = table1.col INNER JOIN [table2] ON table.col = table2.col , [anotherTable]'),
(string) $fluent (string) $fluent
); );

View File

@@ -280,7 +280,7 @@ $array2 = ['one', 'two', 'three'];
$array3 = [ $array3 = [
'col1' => 'one', 'col1' => 'one',
'col2' => 'two', 'col2' => 'two',
'col3' => 'three', 'col3' => 'thr.ee',
]; ];
$array4 = [ $array4 = [
'a' => 12, 'a' => 12,
@@ -301,8 +301,8 @@ WHERE (`test`.`a` LIKE '1995-03-01'
OR `b2` IN ('1', '2', '3' ) OR `b2` IN ('1', '2', '3' )
OR `b3` IN ( ) OR `b3` IN ( )
OR `b4` IN ( 'one', 'two', 'three' ) OR `b4` IN ( 'one', 'two', 'three' )
OR `b5` IN (`col1` AS `one`, `col2` AS `two`, `col3` AS `three` ) OR `b5` IN (`col1` AS `one`, `col2` AS `two`, `col3` AS `thr.ee` )
OR `b6` IN ('one', 'two', 'three') OR `b6` IN ('one', 'two', 'thr.ee')
OR `b7` IN (NULL) OR `b7` IN (NULL)
OR `b8` IN (RAND() `col1` > `col2` ) OR `b8` IN (RAND() `col1` > `col2` )
OR `b9` IN (RAND(), [col1] > [col2] ) OR `b9` IN (RAND(), [col1] > [col2] )
@@ -322,8 +322,8 @@ WHERE ("test"."a" LIKE \'1995-03-01\'
OR "b2" IN (\'1\', \'2\', \'3\' ) OR "b2" IN (\'1\', \'2\', \'3\' )
OR "b3" IN ( ) OR "b3" IN ( )
OR "b4" IN ( \'one\', \'two\', \'three\' ) OR "b4" IN ( \'one\', \'two\', \'three\' )
OR "b5" IN ("col1" AS "one", "col2" AS "two", "col3" AS "three" ) OR "b5" IN ("col1" AS "one", "col2" AS "two", "col3" AS "thr.ee" )
OR "b6" IN (\'one\', \'two\', \'three\') OR "b6" IN (\'one\', \'two\', \'thr.ee\')
OR "b7" IN (NULL) OR "b7" IN (NULL)
OR "b8" IN (RAND() "col1" > "col2" ) OR "b8" IN (RAND() "col1" > "col2" )
OR "b9" IN (RAND(), [col1] > [col2] ) OR "b9" IN (RAND(), [col1] > [col2] )
@@ -343,8 +343,8 @@ WHERE ([test].[a] LIKE #03/01/1995#
OR [b2] IN ('1', '2', '3' ) OR [b2] IN ('1', '2', '3' )
OR [b3] IN ( ) OR [b3] IN ( )
OR [b4] IN ( 'one', 'two', 'three' ) OR [b4] IN ( 'one', 'two', 'three' )
OR [b5] IN ([col1] AS [one], [col2] AS [two], [col3] AS [three] ) OR [b5] IN ([col1] AS [one], [col2] AS [two], [col3] AS [thr.ee] )
OR [b6] IN ('one', 'two', 'three') OR [b6] IN ('one', 'two', 'thr.ee')
OR [b7] IN (NULL) OR [b7] IN (NULL)
OR [b8] IN (RAND() [col1] > [col2] ) OR [b8] IN (RAND() [col1] > [col2] )
OR [b9] IN (RAND(), [col1] > [col2] ) OR [b9] IN (RAND(), [col1] > [col2] )
@@ -364,8 +364,8 @@ WHERE ([test].[a] LIKE '1995-03-01'
OR [b2] IN ('1', '2', '3' ) OR [b2] IN ('1', '2', '3' )
OR [b3] IN ( ) OR [b3] IN ( )
OR [b4] IN ( 'one', 'two', 'three' ) OR [b4] IN ( 'one', 'two', 'three' )
OR [b5] IN ([col1] AS [one], [col2] AS [two], [col3] AS [three] ) OR [b5] IN ([col1] AS [one], [col2] AS [two], [col3] AS [thr.ee] )
OR [b6] IN ('one', 'two', 'three') OR [b6] IN ('one', 'two', 'thr.ee')
OR [b7] IN (NULL) OR [b7] IN (NULL)
OR [b8] IN (RAND() [col1] > [col2] ) OR [b8] IN (RAND() [col1] > [col2] )
OR [b9] IN (RAND(), [col1] > [col2] ) OR [b9] IN (RAND(), [col1] > [col2] )