[DBAL-577] AbstractPlatform::getInExpression calls non-existent method AbstractPlatform::getIdentifiers Created: 06/Aug/13  Updated: 07/Jan/14  Resolved: 22/Dec/13

Status: Resolved
Project: Doctrine DBAL
Component/s: Platforms
Affects Version/s: 2.3.4
Fix Version/s: None
Security Level: All

Type: Bug Priority: Minor
Reporter: Giovanni Lovato Assignee: Benjamin Eberlei
Resolution: Fixed Votes: 2
Labels: None


 Description   

The method AbstractPlatform::getInExpression($column, $values) still calls the non-existent method AbstractPlatform::getIdentifiers($values). This prevents the use of this method causing a brutal PHP failure. Why not pass the identifiers array instead of the values array, until the method is implemented?



 Comments   
Comment by Giovanni Lovato [ 11/Sep/13 ]

I really don't see the meaning of AbstractPlatform::getIdentifiers.
For example, suppose I want to find all rows where field 'tag' is in ['foo', 'bar', 'baz'], I would use getInExpression like this:

$array = array('foo', 'bar', 'baz');
$queryBuilder = $this->conn->createQueryBuilder();
$placeholders = array_map(array($queryBuilder, 'createNamedParameter'), $array);
$field = $this->link->quoteIdentifier('tag');
$inExpression = $this->conn->getDatabasePlatform()->getInExpression($field, $placeholders);
$result = $queryBuilder->select('*')->from('table', 't)->where($inExpression)->execute();

which works perfectly fine without any need of calling a getIdentifiers method.

Comment by Benjamin Eberlei [ 22/Dec/13 ]

Code was removed, as it was a leftover from Doctrine 1.* times.

Comment by Giovanni Lovato [ 07/Jan/14 ]

The whole getInExpression method was removed? How to build a IN-expression abstracting from platform now? The method worked, expect for a call to a non-existant AbstractPlatform::getIdentifiers.

Comment by Benjamin Eberlei [ 07/Jan/14 ]

The method did not work, because it was impossible to implement "getIdentifiers" at that point. You can build an IN expression by binding to a statement with "$statement->bindValue(1, $array, \Doctrine\DBAL\Connection::PARAM_INT_ARRAY);" or PARAM_STR_ARRAY.

Alternatively you can do: implode(", ", array_map(array($connection, 'quote'), $values));

Generated at Sat Nov 29 10:02:28 UTC 2014 using JIRA 6.2.3#6260-sha1:63ef1d6dac3f4f4d7db4c1effd405ba38ccdc558.