diff --git a/model/queries/SQLConditionalExpression.php b/model/queries/SQLConditionalExpression.php index dca203843..9df19ae27 100644 --- a/model/queries/SQLConditionalExpression.php +++ b/model/queries/SQLConditionalExpression.php @@ -650,9 +650,8 @@ abstract class SQLConditionalExpression extends SQLExpression { * @return boolean */ public function filtersOnID() { - $regexp = '/^(.*\.)?("|`)?ID("|`)?\s?=/'; + $regexp = '/^(.*\.)?("|`)?ID("|`)?\s?(=|IN)/'; - // @todo - Test this works with paramaterised queries foreach($this->getWhereParameterised($parameters) as $predicate) { if(preg_match($regexp, $predicate)) return true; } @@ -668,7 +667,7 @@ abstract class SQLConditionalExpression extends SQLExpression { * @return boolean */ public function filtersOnFK() { - $regexp = '/^(.*\.)?("|`)?[a-zA-Z]+ID("|`)?\s?=/'; + $regexp = '/^(.*\.)?("|`)?[a-zA-Z]+ID("|`)?\s?(=|IN)/'; // @todo - Test this works with paramaterised queries foreach($this->getWhereParameterised($parameters) as $predicate) { diff --git a/tests/model/SQLQueryTest.php b/tests/model/SQLQueryTest.php index c97821785..ec43668f8 100755 --- a/tests/model/SQLQueryTest.php +++ b/tests/model/SQLQueryTest.php @@ -321,6 +321,41 @@ class SQLQueryTest extends SapphireTest { "filtersOnID() is true with simple unquoted column name" ); + $query = new SQLQuery(); + $query->setWhere('"ID" = 5'); + $this->assertTrue( + $query->filtersOnID(), + "filtersOnID() is true with simple quoted column name" + ); + + $query = new SQLQuery(); + $query->setWhere(array('"ID"' => 4)); + $this->assertTrue( + $query->filtersOnID(), + "filtersOnID() is true with parameterised quoted column name" + ); + + $query = new SQLQuery(); + $query->setWhere(array('"ID" = ?' => 4)); + $this->assertTrue( + $query->filtersOnID(), + "filtersOnID() is true with parameterised quoted column name" + ); + + $query = new SQLQuery(); + $query->setWhere('"ID" IN (5,4)'); + $this->assertTrue( + $query->filtersOnID(), + "filtersOnID() is true with WHERE ID IN" + ); + + $query = new SQLQuery(); + $query->setWhere(array('"ID" IN ?' => array(1,2))); + $this->assertTrue( + $query->filtersOnID(), + "filtersOnID() is true with parameterised WHERE ID IN" + ); + $query = new SQLQuery(); $query->setWhere("ID=5"); $this->assertTrue(