Fix #18134: Instance of ExpressionInterface will not be quoted in Connection:quoteColumnName

This commit is contained in:
DarkDef
2020-06-30 17:59:23 +03:00
committed by GitHub
parent 17742afb73
commit e342162425
3 changed files with 20 additions and 4 deletions

View File

@ -24,6 +24,7 @@ Yii Framework 2 Change Log
- Enh #18120: Include path to the log file into error message if `FileTarget::export` fails (uaoleg)
- Enh #15202: Add optional param `--silent-exit-on-exception` in `yii\console\Controller` (egorrishe)
- Bug #18110: Add quotes to return value of viewName in MSSQL schema. It is `[someView]` now (darkdef)
- Bug #18134: Instance of `ExpressionInterface` will not be quoted in `Connection:quoteColumnName` (darkdef)
2.0.35 May 02, 2020

View File

@ -925,11 +925,15 @@ class Connection extends Component
* If the column name contains prefix, the prefix will also be properly quoted.
* If the column name is already quoted or contains special characters including '(', '[[' and '{{',
* then this method will do nothing.
* @param string $name column name
* If the column name is an instance of `ExpressionInterface` it is returned as is.
* @param string $name|ExpressionInterface column name
* @return string the properly quoted column name
*/
public function quoteColumnName($name)
{
if ($name instanceof ExpressionInterface) {
return $name;
}
if (isset($this->_quotedColumnNames[$name])) {
return $this->_quotedColumnNames[$name];
}

View File

@ -2523,6 +2523,17 @@ abstract class QueryBuilderTest extends DatabaseTestCase
$this->assertEquals($expectedParams, $params);
}
/**
* @see https://github.com/yiisoft/yii2/issues/18134
*/
public function testExpressionIsNotQuotedInColumnName()
{
$query = (new Query())->where(['like', new Expression('name'), 'string']);
list($sql, $params) = $this->getQueryBuilder()->build($query);
$this->assertEquals('SELECT * WHERE name LIKE :qp0'.$this->likeEscapeCharSql, $sql);
$this->assertEquals([':qp0' => "%string%"], $params);
}
/**
* @see https://github.com/yiisoft/yii2/issues/15653
*/