Index: tests/Query/DriverTestCase.php =================================================================== --- tests/Query/DriverTestCase.php (revision 7690) +++ tests/Query/DriverTestCase.php (working copy) @@ -115,7 +115,8 @@ . "p.phonenumber AS p__phonenumber, p.entity_id AS p__entity_id " . "FROM entity e " . "INNER JOIN phonenumber p ON e.id = p.entity_id " - . "WHERE e.id IN (" + . "WHERE (e.type = 0)" + . " AND e.id IN (" . "SELECT b.id FROM ( " . "SELECT a.*, ROWNUM AS doctrine_rownum " . "FROM ( " @@ -126,7 +127,7 @@ . ") a " . " ) b " . "WHERE doctrine_rownum BETWEEN 3 AND 7" - . ") AND (e.type = 0)"; + . ")"; $this->assertEqual($q->getSqlQuery(), $correctSql); } @@ -153,7 +154,8 @@ . "p.phonenumber AS p__phonenumber, p.entity_id AS p__entity_id " . "FROM entity e " . "INNER JOIN phonenumber p ON e.id = p.entity_id " - . "WHERE e.id IN (" + . "WHERE (e.type = 0) " + . "AND e.id IN (" . "SELECT b.id FROM ( " . "SELECT a.*, ROWNUM AS doctrine_rownum " . "FROM ( " @@ -166,7 +168,8 @@ . ") a " . " ) b " . "WHERE doctrine_rownum BETWEEN 3 AND 7" - . ") AND (e.type = 0) GROUP BY e.name ORDER BY p.id"; + . ") " + . "GROUP BY e.name ORDER BY p.id"; $this->assertEqual($q->getSqlQuery(), $correctSql); } Index: tests/Query/ExpressionTestCase.php =================================================================== --- tests/Query/ExpressionTestCase.php (revision 7690) +++ tests/Query/ExpressionTestCase.php (working copy) @@ -132,7 +132,7 @@ ->groupby('l.id') ->limit(5); - $this->assertEqual($query->getSqlQuery(), "SELECT l.id AS l__id, l.lat AS l__lat, l.lon AS l__lon, l2.name AS l2__name, l2.id AS l2__id, l2.culture AS l2__culture, GeoDistKM(l.lat, l.lon, 13.23, 33.23) AS l__0 FROM location l LEFT JOIN location_i18n l2 ON l.id = l2.id WHERE l.id IN (SELECT DISTINCT l3.id FROM location l3 LEFT JOIN location_i18n l4 ON l3.id = l4.id WHERE (l3.id <> ? AND l4.culture = ?) GROUP BY l3.id HAVING GeoDistKM(l3.lat, l3.lon, 13.23, 33.23) < 33 ORDER BY GeoDistKM(l3.lat, l3.lon, 13.23, 33.23) LIMIT 5) AND (l.id <> ? AND l2.culture = ?) GROUP BY l.id HAVING l__0 < 33 ORDER BY l__0 ASC"); + $this->assertEqual($query->getSqlQuery(), "SELECT l.id AS l__id, l.lat AS l__lat, l.lon AS l__lon, l2.name AS l2__name, l2.id AS l2__id, l2.culture AS l2__culture, GeoDistKM(l.lat, l.lon, 13.23, 33.23) AS l__0 FROM location l LEFT JOIN location_i18n l2 ON l.id = l2.id WHERE (l.id <> ? AND l2.culture = ?) AND l.id IN (SELECT DISTINCT l3.id FROM location l3 LEFT JOIN location_i18n l4 ON l3.id = l4.id WHERE (l3.id <> ? AND l4.culture = ?) GROUP BY l3.id HAVING GeoDistKM(l3.lat, l3.lon, 13.23, 33.23) < 33 ORDER BY GeoDistKM(l3.lat, l3.lon, 13.23, 33.23) LIMIT 5) GROUP BY l.id HAVING l__0 < 33 ORDER BY l__0 ASC"); $this->conn->setAttribute(Doctrine_Core::ATTR_PORTABILITY, Doctrine_Core::PORTABILITY_ALL); } Index: tests/Query/IdentifierQuotingTestCase.php =================================================================== --- tests/Query/IdentifierQuotingTestCase.php (revision 7690) +++ tests/Query/IdentifierQuotingTestCase.php (working copy) @@ -96,7 +96,7 @@ $q->parseDqlQuery('SELECT u.name FROM User u INNER JOIN u.Phonenumber p')->limit(5); - $this->assertEqual($q->getSqlQuery(), 'SELECT "e"."id" AS "e__id", "e"."name" AS "e__name" FROM "entity" "e" INNER JOIN "phonenumber" "p" ON "e"."id" = "p"."entity_id" WHERE "e"."id" IN (SELECT DISTINCT "e2"."id" FROM "entity" "e2" INNER JOIN "phonenumber" "p2" ON "e2"."id" = "p2"."entity_id" WHERE ("e2"."type" = 0) LIMIT 5) AND ("e"."type" = 0)'); + $this->assertEqual($q->getSqlQuery(), 'SELECT "e"."id" AS "e__id", "e"."name" AS "e__name" FROM "entity" "e" INNER JOIN "phonenumber" "p" ON "e"."id" = "p"."entity_id" WHERE ("e"."type" = 0) AND "e"."id" IN (SELECT DISTINCT "e2"."id" FROM "entity" "e2" INNER JOIN "phonenumber" "p2" ON "e2"."id" = "p2"."entity_id" WHERE ("e2"."type" = 0) LIMIT 5)'); } public function testCountQuerySupportsIdentifierQuoting() Index: tests/Query/LimitTestCase.php =================================================================== --- tests/Query/LimitTestCase.php (revision 7690) +++ tests/Query/LimitTestCase.php (working copy) @@ -64,7 +64,7 @@ $photos = $q->execute(array(1)); $this->assertEqual($photos->count(), 3); $this->assertEqual($q->getSqlQuery(), - "SELECT p.id AS p__id, p.name AS p__name FROM photo p LEFT JOIN phototag p2 ON (p.id = p2.photo_id) LEFT JOIN tag t ON t.id = p2.tag_id WHERE p.id IN (SELECT DISTINCT p3.id FROM photo p3 LEFT JOIN phototag p4 ON (p3.id = p4.photo_id) LEFT JOIN tag t2 ON t2.id = p4.tag_id WHERE t2.id = ? ORDER BY p3.id DESC LIMIT 100) AND (t.id = ?) ORDER BY p.id DESC"); + "SELECT p.id AS p__id, p.name AS p__name FROM photo p LEFT JOIN phototag p2 ON (p.id = p2.photo_id) LEFT JOIN tag t ON t.id = p2.tag_id WHERE (t.id = ?) AND p.id IN (SELECT DISTINCT p3.id FROM photo p3 LEFT JOIN phototag p4 ON (p3.id = p4.photo_id) LEFT JOIN tag t2 ON t2.id = p4.tag_id WHERE t2.id = ? ORDER BY p3.id DESC LIMIT 100) ORDER BY p.id DESC"); } public function testLimitWithOneToOneLeftJoin() @@ -95,7 +95,7 @@ $sql = $q->getSqlQuery(); $this->assertEqual($q->getSqlQuery(), - 'SELECT e.id AS e__id, p.id AS p__id, p.phonenumber AS p__phonenumber, p.entity_id AS p__entity_id FROM entity e LEFT JOIN phonenumber p ON e.id = p.entity_id WHERE e.id IN (SELECT DISTINCT e2.id FROM entity e2 LEFT JOIN phonenumber p2 ON e2.id = p2.entity_id WHERE (e2.type = 0) LIMIT 5) AND (e.type = 0)'); + 'SELECT e.id AS e__id, p.id AS p__id, p.phonenumber AS p__phonenumber, p.entity_id AS p__entity_id FROM entity e LEFT JOIN phonenumber p ON e.id = p.entity_id WHERE (e.type = 0) AND e.id IN (SELECT DISTINCT e2.id FROM entity e2 LEFT JOIN phonenumber p2 ON e2.id = p2.entity_id WHERE (e2.type = 0) LIMIT 5)'); $users = $q->execute(); $count = $this->conn->count(); @@ -128,7 +128,7 @@ $this->assertEqual($users[4]->name, 'Jean Reno'); $this->assertEqual($q->getSqlQuery(), - "SELECT e.id AS e__id, e.name AS e__name FROM entity e LEFT JOIN phonenumber p ON e.id = p.entity_id WHERE e.id IN (SELECT DISTINCT e2.id FROM entity e2 LEFT JOIN phonenumber p2 ON e2.id = p2.entity_id WHERE p2.phonenumber LIKE '%123%' AND (e2.type = 0) LIMIT 5) AND (p.phonenumber LIKE '%123%' AND (e.type = 0))"); + "SELECT e.id AS e__id, e.name AS e__name FROM entity e LEFT JOIN phonenumber p ON e.id = p.entity_id WHERE (p.phonenumber LIKE '%123%' AND (e.type = 0)) AND e.id IN (SELECT DISTINCT e2.id FROM entity e2 LEFT JOIN phonenumber p2 ON e2.id = p2.entity_id WHERE p2.phonenumber LIKE '%123%' AND (e2.type = 0) LIMIT 5)"); } @@ -174,7 +174,7 @@ $this->assertEqual($count, $this->conn->count()); $this->assertEqual($q->getSqlQuery(), - 'SELECT e.id AS e__id, p.id AS p__id, p.phonenumber AS p__phonenumber, p.entity_id AS p__entity_id FROM entity e INNER JOIN phonenumber p ON e.id = p.entity_id WHERE e.id IN (SELECT DISTINCT e2.id FROM entity e2 INNER JOIN phonenumber p2 ON e2.id = p2.entity_id WHERE (e2.type = 0) LIMIT 5 OFFSET 2) AND (e.type = 0)'); + 'SELECT e.id AS e__id, p.id AS p__id, p.phonenumber AS p__phonenumber, p.entity_id AS p__entity_id FROM entity e INNER JOIN phonenumber p ON e.id = p.entity_id WHERE (e.type = 0) AND e.id IN (SELECT DISTINCT e2.id FROM entity e2 INNER JOIN phonenumber p2 ON e2.id = p2.entity_id WHERE (e2.type = 0) LIMIT 5 OFFSET 2)'); } public function testLimitWithPreparedQueries() @@ -191,7 +191,7 @@ $this->assertEqual($count, $this->conn->count()); $this->assertEqual($q->getSqlQuery(), - 'SELECT e.id AS e__id, p.id AS p__id FROM entity e LEFT JOIN phonenumber p ON e.id = p.entity_id WHERE e.id IN (SELECT DISTINCT e2.id FROM entity e2 LEFT JOIN phonenumber p2 ON e2.id = p2.entity_id WHERE e2.name = ? AND (e2.type = 0) LIMIT 5) AND (e.name = ? AND (e.type = 0))'); + 'SELECT e.id AS e__id, p.id AS p__id FROM entity e LEFT JOIN phonenumber p ON e.id = p.entity_id WHERE (e.name = ? AND (e.type = 0)) AND e.id IN (SELECT DISTINCT e2.id FROM entity e2 LEFT JOIN phonenumber p2 ON e2.id = p2.entity_id WHERE e2.name = ? AND (e2.type = 0) LIMIT 5)'); $q = new Doctrine_Query(); $q->select('u.id, p.id')->from('User u LEFT JOIN u.Phonenumber p'); @@ -208,9 +208,10 @@ $this->assertEqual($q->getSqlQuery(), "SELECT e.id AS e__id, p.id AS p__id FROM entity e LEFT JOIN phonenumber p ON" - . " e.id = p.entity_id WHERE e.id IN (SELECT DISTINCT e2.id FROM entity e2 LEFT JOIN phonenumber p2" - . " ON e2.id = p2.entity_id WHERE (e2.name LIKE ? OR e2.name LIKE ?) AND (e2.type = 0) LIMIT 5) AND " - . "(e.name LIKE ? OR e.name LIKE ?) AND (e.type = 0)"); + . " e.id = p.entity_id WHERE (e.name LIKE ? OR e.name LIKE ?) AND (e.type = 0)" + . " AND e.id IN (SELECT DISTINCT e2.id FROM entity e2 LEFT JOIN phonenumber p2" + . " ON e2.id = p2.entity_id WHERE (e2.name LIKE ? OR e2.name LIKE ?) AND (e2.type = 0) LIMIT 5)"); + } public function testConnectionFlushing() @@ -222,7 +223,7 @@ $users = $q->execute(); - $this->assertEqual($q->getSqlQuery(), 'SELECT e.id AS e__id, e.name AS e__name, e.loginname AS e__loginname, e.password AS e__password, e.type AS e__type, e.created AS e__created, e.updated AS e__updated, e.email_id AS e__email_id, p.id AS p__id, p.phonenumber AS p__phonenumber, p.entity_id AS p__entity_id FROM entity e LEFT JOIN phonenumber p ON e.id = p.entity_id WHERE e.id IN (SELECT DISTINCT e2.id FROM entity e2 LEFT JOIN phonenumber p2 ON e2.id = p2.entity_id WHERE e2.name = ? AND (e2.type = 0) LIMIT 5) AND (e.name = ? AND (e.type = 0))'); + $this->assertEqual($q->getSqlQuery(), 'SELECT e.id AS e__id, e.name AS e__name, e.loginname AS e__loginname, e.password AS e__password, e.type AS e__type, e.created AS e__created, e.updated AS e__updated, e.email_id AS e__email_id, p.id AS p__id, p.phonenumber AS p__phonenumber, p.entity_id AS p__entity_id FROM entity e LEFT JOIN phonenumber p ON e.id = p.entity_id WHERE (e.name = ? AND (e.type = 0)) AND e.id IN (SELECT DISTINCT e2.id FROM entity e2 LEFT JOIN phonenumber p2 ON e2.id = p2.entity_id WHERE e2.name = ? AND (e2.type = 0) LIMIT 5)'); $this->assertEqual($users->count(), 1); //$this->connection->flush(); Index: tests/Query/PgsqlSubqueryTestCase.php =================================================================== --- tests/Query/PgsqlSubqueryTestCase.php (revision 7690) +++ tests/Query/PgsqlSubqueryTestCase.php (working copy) @@ -49,10 +49,10 @@ $q->execute(); - $this->assertEqual($this->dbh->pop(), 'SELECT e.id AS e__id, e.name AS e__name, COUNT(DISTINCT a.id) AS a__0 FROM entity e LEFT JOIN album a ON e.id = a.user_id WHERE e.id IN ' + $this->assertEqual($this->dbh->pop(), 'SELECT e.id AS e__id, e.name AS e__name, COUNT(DISTINCT a.id) AS a__0 FROM entity e LEFT JOIN album a ON e.id = a.user_id WHERE (e.type = 0) AND e.id IN ' . '(SELECT doctrine_subquery_alias.id FROM ' . '(SELECT DISTINCT e2.id, COUNT(DISTINCT a2.id) AS a2__0 FROM entity e2 LEFT JOIN album a2 ON e2.id = a2.user_id WHERE (e2.type = 0) GROUP BY e2.id ORDER BY a2__0 LIMIT 5) ' - . 'AS doctrine_subquery_alias) AND (e.type = 0) GROUP BY e.id ORDER BY a__0'); + . 'AS doctrine_subquery_alias) GROUP BY e.id ORDER BY a__0'); } @@ -67,7 +67,7 @@ $q->execute(); - $this->assertEqual($this->dbh->pop(), 'SELECT e.id AS e__id, e.name AS e__name, COUNT(DISTINCT a.id) AS a__0 FROM entity e LEFT JOIN album a ON e.id = a.user_id WHERE e.id IN (SELECT doctrine_subquery_alias.id FROM (SELECT DISTINCT e2.id, e2.name, COUNT(DISTINCT a2.id) AS a2__0 FROM entity e2 LEFT JOIN album a2 ON e2.id = a2.user_id WHERE (e2.type = 0) GROUP BY e2.id ORDER BY a2__0, e2.name LIMIT 5) AS doctrine_subquery_alias) AND (e.type = 0) GROUP BY e.id ORDER BY a__0, e.name'); + $this->assertEqual($this->dbh->pop(), 'SELECT e.id AS e__id, e.name AS e__name, COUNT(DISTINCT a.id) AS a__0 FROM entity e LEFT JOIN album a ON e.id = a.user_id WHERE (e.type = 0) AND e.id IN (SELECT doctrine_subquery_alias.id FROM (SELECT DISTINCT e2.id, e2.name, COUNT(DISTINCT a2.id) AS a2__0 FROM entity e2 LEFT JOIN album a2 ON e2.id = a2.user_id WHERE (e2.type = 0) GROUP BY e2.id ORDER BY a2__0, e2.name LIMIT 5) AS doctrine_subquery_alias) GROUP BY e.id ORDER BY a__0, e.name'); } } Index: tests/Query/SubqueryTestCase.php =================================================================== --- tests/Query/SubqueryTestCase.php (revision 7690) +++ tests/Query/SubqueryTestCase.php (working copy) @@ -124,7 +124,7 @@ $this->fail($e->getMessage()); } - $this->assertEqual($q->getSqlQuery(), 'SELECT e.id AS e__id, e.name AS e__name, COUNT(DISTINCT a.id) AS a__0 FROM entity e LEFT JOIN album a ON e.id = a.user_id WHERE e.id IN (SELECT DISTINCT e2.id FROM entity e2 LEFT JOIN album a2 ON e2.id = a2.user_id WHERE (e2.type = 0) GROUP BY e2.id ORDER BY COUNT(DISTINCT a2.id) LIMIT 5) AND (e.type = 0) GROUP BY e.id ORDER BY a__0'); + $this->assertEqual($q->getSqlQuery(), 'SELECT e.id AS e__id, e.name AS e__name, COUNT(DISTINCT a.id) AS a__0 FROM entity e LEFT JOIN album a ON e.id = a.user_id WHERE (e.type = 0) AND e.id IN (SELECT DISTINCT e2.id FROM entity e2 LEFT JOIN album a2 ON e2.id = a2.user_id WHERE (e2.type = 0) GROUP BY e2.id ORDER BY COUNT(DISTINCT a2.id) LIMIT 5) GROUP BY e.id ORDER BY a__0'); } public function testAggregateFunctionsInOrderByAndHavingWithCount() Index: tests/Ticket/1523TestCase.php =================================================================== --- tests/Ticket/1523TestCase.php (revision 7690) +++ tests/Ticket/1523TestCase.php (working copy) @@ -49,7 +49,7 @@ $pager = new Doctrine_Pager($q, 1, 10); $pager->execute(array()); - $this->assertEqual($pager->getQuery()->getSqlQuery(), 'SELECT t.id AS t__id, t.code AS t__code, t2.id AS t2__id, t2.tmp_id AS t2__tmp_id FROM ticket_1523__user t INNER JOIN ticket_1523__group t2 ON t.id = t2.tmp_id WHERE t.id IN (SELECT DISTINCT t3.id FROM ticket_1523__user t3 INNER JOIN ticket_1523__group t4 ON t3.id = t4.tmp_id WHERE EXISTS (SELECT t5.id AS t3__id FROM ticket_1523__user t5 WHERE (t5.id = t3.id)) ORDER BY t3.code ASC LIMIT 10) AND (EXISTS (SELECT t3.id AS t3__id FROM ticket_1523__user t3 WHERE (t3.id = t.id))) ORDER BY t.code ASC'); + $this->assertEqual($pager->getQuery()->getSqlQuery(), 'SELECT t.id AS t__id, t.code AS t__code, t2.id AS t2__id, t2.tmp_id AS t2__tmp_id FROM ticket_1523__user t INNER JOIN ticket_1523__group t2 ON t.id = t2.tmp_id WHERE (EXISTS (SELECT t3.id AS t3__id FROM ticket_1523__user t3 WHERE (t3.id = t.id))) AND t.id IN (SELECT DISTINCT t3.id FROM ticket_1523__user t3 INNER JOIN ticket_1523__group t4 ON t3.id = t4.tmp_id WHERE EXISTS (SELECT t5.id AS t3__id FROM ticket_1523__user t5 WHERE (t5.id = t3.id)) ORDER BY t3.code ASC LIMIT 10) ORDER BY t.code ASC'); } } Index: tests/Ticket/486TestCase.php =================================================================== --- tests/Ticket/486TestCase.php (revision 7690) +++ tests/Ticket/486TestCase.php (working copy) @@ -85,7 +85,7 @@ ->where('r.id = 3') ->limit(1); - $this->assertEqual('SELECT "c"."id" AS "c__id" FROM "country" "c" LEFT JOIN "state" "s" ON "c"."id" = "s"."country_id" LEFT JOIN "resort" "r" ON "s"."id" = "r"."state_id" WHERE "c"."id" IN (SELECT DISTINCT "c2"."id" FROM "country" "c2" LEFT JOIN "state" "s2" ON "c2"."id" = "s2"."country_id" LEFT JOIN "resort" "r2" ON "s2"."id" = "r2"."state_id" WHERE "r2"."id" = 3 LIMIT 1) AND ("r"."id" = 3)', $q->getSqlQuery()); + $this->assertEqual('SELECT "c"."id" AS "c__id" FROM "country" "c" LEFT JOIN "state" "s" ON "c"."id" = "s"."country_id" LEFT JOIN "resort" "r" ON "s"."id" = "r"."state_id" WHERE ("r"."id" = 3) AND "c"."id" IN (SELECT DISTINCT "c2"."id" FROM "country" "c2" LEFT JOIN "state" "s2" ON "c2"."id" = "s2"."country_id" LEFT JOIN "resort" "r2" ON "s2"."id" = "r2"."state_id" WHERE "r2"."id" = 3 LIMIT 1)', $q->getSqlQuery()); // Restoring quote identifier $this->getConnection()->setAttribute(Doctrine_Core::ATTR_QUOTE_IDENTIFIER, $curQuoteIdentifier);