Uploaded image for project: 'Doctrine 1'
  1. Doctrine 1
  2. DC-254

getLimitSubquery Not Including All Order By Parts

    Details

    • Type: Bug
    • Status: Reopened
    • Priority: Major
    • Resolution: Unresolved
    • Affects Version/s: 1.2.0-BETA3
    • Fix Version/s: 1.2.0-RC1
    • Component/s: Query
    • Labels:
      None

      Description

      The getLimitSubquery function is only including the first orderby field and ignoring all remaining parts. The function also needs to be changed to include mssql and odbc.

      The diff's below provide corrections.

      Thanks,

      Mike

      diff -r Doctrine-1.1.2\lib\Doctrine\Query.php Doctrine-1.1.2-Fixes\lib\Doctrine\Query.php
      1367c1367
      <         if ($driverName == 'pgsql' || $driverName == 'oracle' || $driverName == 'oci') {
      ---
      >         if ($driverName == 'pgsql' || $driverName == 'oracle' || $driverName == 'oci' || $driverName == 'mssql' || $driverName == 'odbc') {
      1371,1387c1371,1392
      <                 $part_original = trim($e[0]);
      <                 $callback = create_function('$e', 'return trim($e, \'[]`"\');');
      <                 $part = trim(implode('.', array_map($callback, explode('.', $part_original))));
      < 
      <                 if (strpos($part, '.') === false) {
      <                     continue;
      <                 }
      < 
      <                 // don't add functions
      <                 if (strpos($part, '(') !== false) {
      <                     continue;
      <                 }
      < 
      <                 // don't add primarykey column (its already in the select clause)
      <                 if ($part !== $primaryKey) {
      <                     $subquery .= ', ' . $part_original;
      <                 }
      ---
      > 
      >                 foreach ($e as $f) {
      >                     if ($f == 0 || $f % 2 == 0) {
      >                         $part_original = trim($f);
      >                         $callback = create_function('$e', 'return trim($e, \'[]`"\');');
      >                         $part = trim(implode('.', array_map($callback, explode('.', $part_original))));
      > 
      >                         if (strpos($part, '.') === false) {
      >                             continue;
      >                         }
      > 
      >                         // don't add functions
      >                         if (strpos($part, '(') !== false) {
      >                             continue;
      >                         }
      > 
      >                         // don't add primarykey column (its already in the select clause)
      >                         if ($part !== $primaryKey) {
      >                             $subquery .= ', ' . $part_original;
      >                         }
      >                     }
      >                 }
      
      

        Activity

          People

          • Assignee:
            guilhermeblanco Guilherme Blanco
            Reporter:
            gensisns Michael Card
          • Votes:
            1 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated: