#14150: Added {{ and }} to getTablesUsedInFrom() output

This commit is contained in:
Alexander Makarov
2017-05-12 15:55:03 +03:00
parent 5ea1acc960
commit 8a087c8537
4 changed files with 34 additions and 33 deletions

View File

@ -792,6 +792,7 @@ class ActiveQuery extends Query implements ActiveQueryInterface
/** /**
* Returns table names used in [[from]] indexed by aliases. * Returns table names used in [[from]] indexed by aliases.
* Both aliases and names are enclosed into {{ and }}.
* @return string[] table names indexed by aliases * @return string[] table names indexed by aliases
* @throws \yii\base\InvalidConfigException * @throws \yii\base\InvalidConfigException
* @since 2.0.12 * @since 2.0.12
@ -811,18 +812,18 @@ class ActiveQuery extends Query implements ActiveQueryInterface
// Clean up table names and aliases // Clean up table names and aliases
$cleanedUpTableNames = []; $cleanedUpTableNames = [];
foreach ($tableNames as $alias => $tableName) { foreach ($tableNames as $alias => $tableName) {
if (preg_match('~{{(.*?)}}~', $tableName, $matches)) {
$alias = $tableName = $matches[1];
}
if (!is_string($alias)) { if (!is_string($alias)) {
if (preg_match('~^\s*([\'"`\[].*?[\'"`\]]|\w+)(?:(?:\s+(?:as)?\s*)([\'"`\[].*?[\'"`\]]|\w+))?\s*$~iu', $tableName, $matches)) { if (preg_match('~\s*({{.*?}})\s*~', $tableName, $matches)) {
$alias = $tableName = $matches[1];
} elseif (preg_match('~^\s*([\'"`\[].*?[\'"`\]]|\w+)(?:(?:\s+(?:as)?\s*)([\'"`\[].*?[\'"`\]]|\w+))?\s*$~iu', $tableName, $matches)) {
if (isset($matches[1])) { if (isset($matches[1])) {
if (isset($matches[2])) { if (isset($matches[2])) {
list(, $tableName, $alias) = $matches; list(, $tableName, $alias) = $matches;
} else { } else {
$tableName = $alias = $matches[1]; $tableName = $alias = $matches[1];
} }
$alias = '{{' . $alias . '}}';
$tableName = '{{' . $tableName . '}}';
} }
} }
} }

View File

@ -223,7 +223,7 @@ class ExistValidator extends Validator
$primaryTableAlias = $tableAliases[0]; $primaryTableAlias = $tableAliases[0];
$prefixedConditions = []; $prefixedConditions = [];
foreach ($conditions as $columnName => $columnValue) { foreach ($conditions as $columnName => $columnValue) {
$prefixedColumn = "{{{$primaryTableAlias}}}.[[{$columnName}]]"; $prefixedColumn = "{$primaryTableAlias}.[[{$columnName}]]";
$prefixedConditions[$prefixedColumn] = $columnValue; $prefixedConditions[$prefixedColumn] = $columnValue;
} }

View File

@ -176,7 +176,7 @@ class UniqueValidator extends Validator
$primaryAlias = array_keys($query->getTablesUsedInFrom())[0]; $primaryAlias = array_keys($query->getTablesUsedInFrom())[0];
$columns = $targetClass::primaryKey(); $columns = $targetClass::primaryKey();
foreach($columns as $c => $column) { foreach($columns as $c => $column) {
$columns[$c] = "{{{$primaryAlias}}}.[[$column]]"; $columns[$c] = "{$primaryAlias}.[[$column]]";
} }
$query->select($columns); $query->select($columns);
} }
@ -296,7 +296,7 @@ class UniqueValidator extends Validator
$primaryTableAlias = $tableAliases[0]; $primaryTableAlias = $tableAliases[0];
$prefixedConditions = []; $prefixedConditions = [];
foreach ($conditions as $columnName => $columnValue) { foreach ($conditions as $columnName => $columnValue) {
$prefixedColumn = "{{{$primaryTableAlias}}}.[[{$columnName}]]"; $prefixedColumn = "{$primaryTableAlias}.[[{$columnName}]]";
$prefixedConditions[$prefixedColumn] = $columnValue; $prefixedConditions[$prefixedColumn] = $columnValue;
} }

View File

@ -239,7 +239,7 @@ abstract class ActiveQueryTest extends DatabaseTestCase
$tables = $query->getTablesUsedInFrom(); $tables = $query->getTablesUsedInFrom();
$this->assertEquals([ $this->assertEquals([
Profile::tableName() => Profile::tableName(), '{{' . Profile::tableName() . '}}' => '{{' . Profile::tableName() . '}}',
], $tables); ], $tables);
} }
@ -247,17 +247,17 @@ abstract class ActiveQueryTest extends DatabaseTestCase
{ {
$query = new ActiveQuery(null); $query = new ActiveQuery(null);
$query->from = [ $query->from = [
'prf' => 'profile', '{{prf}}' => '{{profile}}',
'usr' => 'user', '{{usr}}' => '{{user}}',
'a b' => 'c d', '{{a b}}' => '{{c d}}',
]; ];
$tables = $query->getTablesUsedInFrom(); $tables = $query->getTablesUsedInFrom();
$this->assertEquals([ $this->assertEquals([
'prf' => 'profile', '{{prf}}' => '{{profile}}',
'usr' => 'user', '{{usr}}' => '{{user}}',
'a b' => 'c d', '{{a b}}' => '{{c d}}',
], $tables); ], $tables);
} }
@ -269,11 +269,11 @@ abstract class ActiveQueryTest extends DatabaseTestCase
$tables = $query->getTablesUsedInFrom(); $tables = $query->getTablesUsedInFrom();
$this->assertEquals([ $this->assertEquals([
'prf' => 'profile', '{{prf}}' => '{{profile}}',
'usr' => 'user', '{{usr}}' => '{{user}}',
'order' => 'order', '{{order}}' => '{{order}}',
'customer' => 'customer', '{{customer}}' => '{{customer}}',
'c d' => 'a b', '{{c d}}' => '{{a b}}',
], $tables); ], $tables);
} }
@ -294,7 +294,7 @@ abstract class ActiveQueryTest extends DatabaseTestCase
$tables = $query->getTablesUsedInFrom(); $tables = $query->getTablesUsedInFrom();
$this->assertEquals([ $this->assertEquals([
Profile::tableName() => Profile::tableName(), '{{' . Profile::tableName() . '}}' => '{{' . Profile::tableName() . '}}',
], $tables); ], $tables);
} }
@ -302,17 +302,17 @@ abstract class ActiveQueryTest extends DatabaseTestCase
{ {
$query = new ActiveQuery(null); $query = new ActiveQuery(null);
$query->from = [ $query->from = [
'prf' => 'profile', '{{prf}}' => '{{profile}}',
'usr' => 'user', '{{usr}}' => '{{user}}',
'a b' => 'c d', '{{a b}}' => '{{c d}}',
]; ];
$tables = $query->getTablesUsedInFrom(); $tables = $query->getTablesUsedInFrom();
$this->assertEquals([ $this->assertEquals([
'prf' => 'profile', '{{prf}}' => '{{profile}}',
'usr' => 'user', '{{usr}}' => '{{user}}',
'a b' => 'c d', '{{a b}}' => '{{c d}}',
], $tables); ], $tables);
} }
@ -324,11 +324,11 @@ abstract class ActiveQueryTest extends DatabaseTestCase
$tables = $query->getTablesUsedInFrom(); $tables = $query->getTablesUsedInFrom();
$this->assertEquals([ $this->assertEquals([
'prf' => 'profile', '{{prf}}' => '{{profile}}',
'usr' => 'user', '{{usr}}' => '{{user}}',
'srv' => 'service', '{{srv}}' => '{{service}}',
'order' => 'order', '{{order}}' => '{{order}}',
'c d' => 'a b', '{{c d}}' => '{{a b}}',
], $tables); ], $tables);
} }
@ -353,7 +353,7 @@ abstract class ActiveQueryTest extends DatabaseTestCase
$tables = $query->getTablesUsedInFrom(); $tables = $query->getTablesUsedInFrom();
$this->assertEquals([ $this->assertEquals([
'%order_item' => '%order_item', '{{%order_item}}' => '{{%order_item}}',
], $tables); ], $tables);
} }
} }