Browse Source

Merge pull request #5741 from cakephp/3.0-fix-query-regression

3.0 fix query regression
Mark Story 11 years ago
parent
commit
63e5b9e89f

+ 3 - 2
src/Database/Driver/Mysql.php

@@ -112,9 +112,10 @@ class Mysql extends \Cake\Database\Driver
     public function prepare($query)
     {
         $this->connect();
-        $statement = $this->_connection->prepare((string)$query);
+        $isObject = $query instanceof Query;
+        $statement = $this->_connection->prepare($isObject ? $query->sql() : $query);
         $result = new MysqlStatement($statement, $this);
-        if ($query instanceof Query && $query->bufferResults() === false) {
+        if ($isObject && $query->bufferResults() === false) {
             $result->bufferResults(false);
         }
         return $result;

+ 3 - 1
src/Database/Driver/PDODriverTrait.php

@@ -14,6 +14,7 @@
  */
 namespace Cake\Database\Driver;
 
+use Cake\Database\Query;
 use Cake\Database\Statement\PDOStatement;
 use PDO;
 
@@ -84,7 +85,8 @@ trait PDODriverTrait
     public function prepare($query)
     {
         $this->connect();
-        $statement = $this->_connection->prepare((string)$query);
+        $isObject = $query instanceof Query;
+        $statement = $this->_connection->prepare($isObject ? $query->sql() : $query);
         return new PDOStatement($statement, $this);
     }
 

+ 3 - 2
src/Database/Driver/Sqlite.php

@@ -87,9 +87,10 @@ class Sqlite extends \Cake\Database\Driver
     public function prepare($query)
     {
         $this->connect();
-        $statement = $this->_connection->prepare((string)$query);
+        $isObject = $query instanceof Query;
+        $statement = $this->_connection->prepare($isObject ? $query->sql() : $query);
         $result = new SqliteStatement(new PDOStatement($statement, $this), $this);
-        if ($query instanceof Query && $query->bufferResults() === false) {
+        if ($isObject && $query->bufferResults() === false) {
             $result->bufferResults(false);
         }
         return $result;

+ 3 - 2
src/Database/Driver/Sqlserver.php

@@ -101,10 +101,11 @@ class Sqlserver extends \Cake\Database\Driver
     {
         $this->connect();
         $options = [PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL];
-        if ($query instanceof Query && $query->bufferResults() === false) {
+        $isObject = $query instanceof Query;
+        if ($isObject && $query->bufferResults() === false) {
             $options = [];
         }
-        $statement = $this->_connection->prepare((string)$query, $options);
+        $statement = $this->_connection->prepare($isObject ? $query->sql() : $query);
         return new SqlserverStatement($statement, $this);
     }
 }

+ 14 - 0
tests/TestCase/ORM/QueryRegressionTest.php

@@ -696,4 +696,18 @@ class QueryRegressionTest extends TestCase
 
         $this->assertNotNull($result->article->author);
     }
+
+
+    /**
+     * Tests that trying to contain an inexistent association
+     * throws an exception and not a fatal error.
+     *
+     * @expectedException InvalidArgumentException
+     * @return void
+     */
+    public function testQueryNotFatalError()
+    {
+        $comments = TableRegistry::get('Comments');
+        $comments->find()->contain('Deprs')->all();
+    }
 }