Doctrine DBAL
  1. Doctrine DBAL
  2. DBAL-398

Native query does not allow mysql assignment operator :=

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 2.3
    • Fix Version/s: 2.3.2
    • Component/s: None
    • Security Level: All
    • Labels:
    • Environment:
      Using Doctrine within Symfony 2.1.x

      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

          People

          • Assignee:
            Benjamin Eberlei
            Reporter:
            David Ward
          • Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: