Browse Source

fix quoting column name in case of quoted table name

column name was not quoted if a table name was used, that was using the
table prefix feature.

fixes #11088
close #11238
tags/2.0.8
Carsten Brandt 9 years ago
parent
commit
38d347c9f5
  1. 1
      framework/CHANGELOG.md
  2. 6
      framework/db/Schema.php
  3. 30
      tests/framework/db/ConnectionTest.php

1
framework/CHANGELOG.md

@ -140,6 +140,7 @@ Yii Framework 2 Change Log
- Bug #10751: Fixed `yii\validators\UrlValidator` pattern to improve matching (silverfire)
- Bug #10760: `yii\widgets\DetailView::normalizeAttributes()` fixed for arrayable models (boehsermoe)
- Bug #10825: Fixed `yii\validators\EachValidator` does not respect `skipOnEmpty` rule parameter (klimov-paul)
- Bug #11088: Fixed bug with column name not being quoted correctly, when a quoted table name or a table name in prefix syntax was used (cebe, Ni-san)
- Bug: Fixed generation of canonical URLs for `ViewAction` pages (samdark)
- Bug: Fixed `mb_*` functions calls to use `UTF-8` or `Yii::$app->charset` (silverfire)
- Enh #2377: Allow specifying a table alias when joining relations via `joinWith()` (cebe, nainoon)

6
framework/db/Schema.php

@ -522,7 +522,7 @@ abstract class Schema extends Object
*/
public function quoteColumnName($name)
{
if (strpos($name, '(') !== false || strpos($name, '[[') !== false || strpos($name, '{{') !== false) {
if (strpos($name, '(') !== false || strpos($name, '[[') !== false) {
return $name;
}
if (($pos = strrpos($name, '.')) !== false) {
@ -531,7 +531,9 @@ abstract class Schema extends Object
} else {
$prefix = '';
}
if (strpos($name, '{{') !== false) {
return $name;
}
return $prefix . $this->quoteSimpleColumnName($name);
}

30
tests/framework/db/ConnectionTest.php

@ -70,7 +70,7 @@ class ConnectionTest extends DatabaseTestCase
public function testQuoteTableName()
{
$connection = $this->getConnection(false);
$connection = $this->getConnection(false, false);
$this->assertEquals('`table`', $connection->quoteTableName('table'));
$this->assertEquals('`table`', $connection->quoteTableName('`table`'));
$this->assertEquals('`schema`.`table`', $connection->quoteTableName('schema.table'));
@ -81,14 +81,36 @@ class ConnectionTest extends DatabaseTestCase
public function testQuoteColumnName()
{
$connection = $this->getConnection(false);
$connection = $this->getConnection(false, false);
$this->assertEquals('`column`', $connection->quoteColumnName('column'));
$this->assertEquals('`column`', $connection->quoteColumnName('`column`'));
$this->assertEquals('`table`.`column`', $connection->quoteColumnName('table.column'));
$this->assertEquals('`table`.`column`', $connection->quoteColumnName('table.`column`'));
$this->assertEquals('[[column]]', $connection->quoteColumnName('[[column]]'));
$this->assertEquals('{{column}}', $connection->quoteColumnName('{{column}}'));
$this->assertEquals('(column)', $connection->quoteColumnName('(column)'));
$this->assertEquals('`column`', $connection->quoteSql('[[column]]'));
$this->assertEquals('`column`', $connection->quoteSql('{{column}}'));
}
public function testQuoteFullColumnName()
{
$connection = $this->getConnection(false, false);
$this->assertEquals('`table`.`column`', $connection->quoteColumnName('table.column'));
$this->assertEquals('`table`.`column`', $connection->quoteColumnName('table.`column`'));
$this->assertEquals('`table`.`column`', $connection->quoteColumnName('`table`.column'));
$this->assertEquals('`table`.`column`', $connection->quoteColumnName('table.`column`'));
$this->assertEquals('[[table.column]]', $connection->quoteColumnName('[[table.column]]'));
$this->assertEquals('{{table}}.`column`', $connection->quoteColumnName('{{table}}.column'));
$this->assertEquals('{{table}}.`column`', $connection->quoteColumnName('{{table}}.`column`'));
$this->assertEquals('{{%table}}.`column`', $connection->quoteColumnName('{{%table}}.column'));
$this->assertEquals('{{%table}}.`column`', $connection->quoteColumnName('{{%table}}.`column`'));
$this->assertEquals('`table`.`column`', $connection->quoteSql('[[table.column]]'));
$this->assertEquals('`table`.`column`', $connection->quoteSql('{{table}}.[[column]]'));
$this->assertEquals('`table`.`column`', $connection->quoteSql('{{table}}.`column`'));
$this->assertEquals('`table`.`column`', $connection->quoteSql('{{%table}}.[[column]]'));
$this->assertEquals('`table`.`column`', $connection->quoteSql('{{%table}}.`column`'));
}
public function testTransaction()

Loading…
Cancel
Save