Details
Description
When trying to use the mysql assignment operator in a native query one gets an exception as SqlParserUtils does not qualify the character after the : as being part of a valid parameter value.
Undefined index: in vendor/doctrine/dbal/lib/Doctrine/DBAL/SQLParserUtils.php line 156 (uncaught exception)
A simple example is
$rsm = new ResultSetMapping();
$rsm->addScalarResult('rank', 'rank');
$qry = $em->createNativeQuery("
SELECT (@rank := 1) AS rank
");
$result = $qry->getResult(Query::HYDRATE_ARRAY);
Or a more complicated example is (similar to actual use):
$rsm = new ResultSetMapping();
$rsm->addScalarResult('rank', 'rank');
$qry = $em->createNativeQuery("
SELECT rank FROM
(SELECT (@rank := @rank +1) AS rank FROM (SELECT @rank :=0) rnk2) rnk1
");
$result = $qry->getResult(Query::HYDRATE_ARRAY);
I have attached quick-fix patch, but it looks like the getPlaceholderPositions method is wanting something better overall (due to the TODO comment in it).
Activity
| Field | Original Value | New Value |
|---|---|---|
| Description |
When trying to use the mysql assignment operator in a native query one gets an exception as SqlParserUtils does not qualify the character after the : as being part of a valid parameter value.
Undefined index: in vendor/doctrine/dbal/lib/Doctrine/DBAL/SQLParserUtils.php line 156 (uncaught exception) A simple example is $rsm = new ResultSetMapping(); $rsm->addScalarResult('rank', 'rank'); $qry = $em->createNativeQuery(" SELECT rank FROM (SELECT (@rank := @rank +1) AS rank FROM (SELECT @rank :=0) rnk2) rnk1 "); $result = $qry->getResult(Query::HYDRATE_ARRAY); I have attached quick-fix patch, but it looks like the getPlaceholderPositions method is wanting something better overall (due to the TODO comment in it). |
When trying to use the mysql assignment operator in a native query one gets an exception as SqlParserUtils does not qualify the character after the : as being part of a valid parameter value.
Undefined index: in vendor/doctrine/dbal/lib/Doctrine/DBAL/SQLParserUtils.php line 156 (uncaught exception) A simple example is $rsm = new ResultSetMapping(); $rsm->addScalarResult('rank', 'rank'); $qry = $em->createNativeQuery(" SELECT (@rank := 1) AS rank "); $result = $qry->getResult(Query::HYDRATE_ARRAY); Or a more complicated example is (similar to actual use): $rsm = new ResultSetMapping(); $rsm->addScalarResult('rank', 'rank'); $qry = $em->createNativeQuery(" SELECT rank FROM (SELECT (@rank := @rank +1) AS rank FROM (SELECT @rank :=0) rnk2) rnk1 "); $result = $qry->getResult(Query::HYDRATE_ARRAY); I have attached quick-fix patch, but it looks like the getPlaceholderPositions method is wanting something better overall (due to the TODO comment in it). |
| Status | Open [ 1 ] | Resolved [ 5 ] |
| Fix Version/s | 2.3.2 [ 10326 ] | |
| Resolution | Fixed [ 1 ] |
- Request to http://www.doctrine-project.org/fisheye/ failed: Error in remote call to 'FishEye 0 (http://www.doctrine-project.org/fisheye/)' (http://www.doctrine-project.org/fisheye) [AbstractRestCommand{path='/rest-service-fe/search-v1/crossRepositoryQuery', params={query=DBAL-398, expand=changesets[-21:-1].revisions[0:29],reviews}, methodType=GET}] : Received status code 503 (Service Temporarily Unavailable)
A pull request has been added at https://github.com/doctrine/dbal/pull/237 which also has tests added.