Changeset 4560

Show
Ignore:
Timestamp:
06/25/08 18:58:06 (7 months ago)
Author:
guilhermeblanco
Message:

Fix for ( XXX ) in joins. Issue reported when using IN ( SUBSELECT ), but issue cound be reachable using SQL: and enum too.

Location:
branches/0.11
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • branches/0.11/lib/Doctrine/Query/JoinCondition.php

    r4509 r4560  
    7979            } 
    8080 
     81            // FIX: Issues with "(" XXX ")" 
     82            if ($hasRightAggExpression) { 
     83                $value = '(' . $value . ')'; 
     84            } 
     85 
    8186            if (substr($value, 0, 1) == '(') { 
    8287                // trim brackets 
     
    8691                    // subquery found 
    8792                    $q = $this->query->createSubquery(); 
    88                     $value = '(' . $q->parseQuery($trimmed)->getQuery() . ')'; 
     93 
     94                    // Change due to bug "(" XXX ")" 
     95                    //$value = '(' . $q->parseQuery($trimmed)->getQuery() . ')'; 
     96                    $value = $q->parseQuery($trimmed)->getQuery(); 
    8997                } elseif (substr($trimmed, 0, 4) == 'SQL:') { 
    90                     $value = '(' . substr($trimmed, 4) . ')'; 
     98                    // Change due to bug "(" XXX ")" 
     99                    //$value = '(' . substr($trimmed, 4) . ')'; 
     100                    $value = substr($trimmed, 4); 
    91101                } else { 
    92102                    // simple in expression found 
     
    107117                        } 
    108118                    } 
    109                     $value = '(' . implode(', ', $value) . ')'; 
     119 
     120                    // Change due to bug "(" XXX ")" 
     121                    //$value = '(' . implode(', ', $value) . ')'; 
     122                    $value = implode(', ', $value); 
    110123                } 
    111124            } else { 
  • branches/0.11/tests/Query/JoinTestCase.php

    r4558 r4560  
    9595              ->innerJoin('c.City c2 WITH (c2.name = ? OR c2.id IN (SELECT c3.id FROM Record_City c3 WHERE c3.id = ? OR c3.id = ?))'); 
    9696            $sql = $q->getSql(); 
    97             $this->assertEqual($sql, 'SELECT r.id AS r__id, r.name AS r__name, r2.id AS r2__id, r2.name AS r2__name, r2.country_id AS r2__country_id, r2.district_id AS r2__district_id FROM record__country r INNER JOIN record__city r2 ON r.id = r2.country_id AND (r2.name = ? OR c2.id IN (SELECT c3.id FROM Record_City c3 WHERE c3.id = ? OR c3.id = ?))'); 
     97            $this->assertEqual($sql, 'SELECT r.id AS r__id, r.name AS r__name, r2.id AS r2__id, r2.name AS r2__name, r2.country_id AS r2__country_id, r2.district_id AS r2__district_id FROM record__country r INNER JOIN record__city r2 ON r.id = r2.country_id AND (r2.name = ? OR r2.id IN (SELECT r3.id AS r3__id FROM record__city r3 WHERE (r3.id = ? OR r3.id = ?)))'); 
     98 
    9899            $this->pass(); 
    99100        } catch (Exception $e) { 
     
    124125          ->where('c.id = ?', array(1)); 
    125126 
    126         $this->assertEqual($q->getSql(), 'SELECT r.id AS r__id, r.name AS r__name, r2.id AS r2__id, r2.name AS r2__name, r2.country_id AS r2__country_id, r2.district_id AS r2__district_id FROM record__country r INNER JOIN record__city r2 ON r.id = r2.country_id AND r2.id IN (?,?) WHERE r.id = ?'); 
     127        $this->assertEqual($q->getSql(), 'SELECT r.id AS r__id, r.name AS r__name, r2.id AS r2__id, r2.name AS r2__name, r2.country_id AS r2__country_id, r2.district_id AS r2__district_id FROM record__country r INNER JOIN record__city r2 ON r.id = r2.country_id AND r2.id IN (?, ?) WHERE r.id = ?'); 
    127128    } 
    128129