diff --git a/Cake/Test/TestCase/Database/QueryTest.php b/Cake/Test/TestCase/Database/QueryTest.php index 00f055b9fb8..1cef5a8b1a3 100644 --- a/Cake/Test/TestCase/Database/QueryTest.php +++ b/Cake/Test/TestCase/Database/QueryTest.php @@ -18,6 +18,7 @@ use Cake\Core\Configure; use Cake\Database\ConnectionManager; +use Cake\Database\Expression\FieldExpression; use Cake\Database\Query; use Cake\TestSuite\TestCase; @@ -2019,6 +2020,59 @@ public function testAppendDelete() { $this->assertEquals(' RETURNING id', substr($sql, -13)); } +/** + * Tests automatic identifier quoting in the select clause + * + * @return void + */ + public function testQuotingSelectFieldsAndAlias() { + $this->connection->driver()->autoQuoting(true); + $query = new Query($this->connection); + $sql = $query->select(['something'])->sql(); + $this->assertRegExp('/SELECT [`"]something[`"]$/', $sql); + + $query = new Query($this->connection); + $sql = $query->select(['foo' => 'something'])->sql(); + $this->assertRegExp('/SELECT [`"]something[`"] AS [`"]foo[`"]$/', $sql); + + $query = new Query($this->connection); + $sql = $query->select(['foo' => 1])->sql(); + $this->assertRegExp('/SELECT 1 AS [`"]foo[`"]$/', $sql); + + $query = new Query($this->connection); + $sql = $query->select(['foo' => '1 + 1'])->sql(); + $this->assertRegExp('/SELECT [`"]1 \+ 1[`"] AS [`"]foo[`"]$/', $sql); + + $query = new Query($this->connection); + $sql = $query->select(['foo' => $query->newExpr()->add('1 + 1')])->sql(); + $this->assertRegExp('/SELECT \(1 \+ 1\) AS [`"]foo[`"]$/', $sql); + + $query = new Query($this->connection); + $sql = $query->select(['foo' => new FieldExpression('bar')])->sql(); + $this->assertRegExp('/[`"]bar[`"]/', $sql); + } + +/** + * Tests automatic identifier quoting in the from clause + * + * @return void + */ + public function testQuotingFromAndAlias() { + $this->connection->driver()->autoQuoting(true); + $query = new Query($this->connection); + $sql = $query->select('*')->from(['something'])->sql(); + $this->assertRegExp('/FROM [`"]something[`"]/', $sql); + + $query = new Query($this->connection); + $sql = $query->select('*')->from(['foo' => 'something'])->sql(); + $this->assertRegExp('/FROM [`"]something[`"] AS [`"]foo[`"]$/', $sql); + + $query = new Query($this->connection); + $sql = $query->select('*')->from(['foo' => $query->newExpr()->add('bar')])->sql(); + $this->assertRegExp('/FROM \(bar\) AS [`"]foo[`"]$/', $sql); + } + + /** * Assertion for comparing a table's contents with what is in it. *