DBAL-398: Do not treat assignment operator as a parameter #237

Merged
merged 3 commits into from Dec 22, 2012
@@ -54,7 +54,7 @@ static public function getPlaceholderPositions($statement, $isPositional = true)
$stmtLen = strlen($statement);
$paramMap = array();
for ($i = 0; $i < $stmtLen; $i++) {
- if ($statement[$i] == $match && !$inLiteral) {
+ if ($statement[$i] == $match && !$inLiteral && ($isPositional || $statement[$i+1] != '=')) {
// real positional parameter detected
if ($isPositional) {
$paramMap[$count] = $i;
@@ -180,4 +180,4 @@ static public function expandListParameters($query, $params, $types)
return array($query, $paramsOrd, $typesOrd);
}
-}
+}
@@ -35,6 +35,8 @@ static public function dataGetPlaceholderPositions()
array('SELECT ":foo" FROM Foo WHERE bar IN (:name1, :name2)', false, array(37 => 'name1', 45 => 'name2')),
array("SELECT ':foo' FROM Foo WHERE bar IN (:name1, :name2)", false, array(37 => 'name1', 45 => 'name2')),
array('SELECT :foo_id', false, array(7 => 'foo_id')), // Ticket DBAL-231
+ array('SELECT @rank := 1', false, array()), // Ticket DBAL-398
+ array('SELECT @rank := 1 AS rank, :foo AS foo FROM :bar', false, array(27 => 'foo', 44 => 'bar')), // Ticket DBAL-398
);
}