Changeset 5089

Show
Ignore:
Timestamp:
10/15/08 20:31:41 (9 months ago)
Author:
jwage
Message:

[1.0] fixes #1529 - issue with SoftDelete? where conditions. Added OR IS NULL to solve problem.

Location:
branches/1.0
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • branches/1.0/lib/Doctrine/Template/Listener/SoftDelete.php

    r4969 r5089  
    9393            $query->from('')->update($params['component']['table']->getOption('name') . ' ' . $params['alias']); 
    9494            $query->set($field, '?', array(true)); 
    95             $query->addWhere($field . ' = ?', array(false)); 
     95            $query->addWhere($field . ' = ? OR ' . $field . ' IS NULL', array(false)); 
    9696        } 
    9797    } 
     
    110110        $query = $event->getQuery(); 
    111111        if ( ! $query->contains($field)) { 
    112             $query->addWhere($field . ' = ?', array(false)); 
     112            $query->addWhere($field . ' = ? OR ' . $field . ' IS NULL', array(false)); 
    113113        } 
    114114    } 
  • branches/1.0/tests/SoftDeleteTestCase.php

    r4716 r5089  
    5959                    ->where('s.name = ?', array('test')); 
    6060 
    61         $this->assertEqual($q->getSql(), 'SELECT s.name AS s__name, s.something AS s__something, s.deleted AS s__deleted FROM soft_delete_test s WHERE s.name = ? AND s.deleted = ?'); 
     61        $this->assertEqual($q->getSql(), 'SELECT s.name AS s__name, s.something AS s__something, s.deleted AS s__deleted FROM soft_delete_test s WHERE s.name = ? AND (s.deleted = ? OR s.deleted IS NULL)'); 
    6262        $params = $q->getParams(); 
    6363        $this->assertEqual(count($params), 2); 
     
    8484 
    8585        $results = $q->execute(array('test1', 'test2')); 
    86         $this->assertEqual($q->getSql(), 'SELECT s.name AS s__name, s.something AS s__something, s.deleted AS s__deleted FROM soft_delete_test s WHERE s.name = ? AND s.something = ? AND s.deleted = ?'); 
     86        $this->assertEqual($q->getSql(), 'SELECT s.name AS s__name, s.something AS s__something, s.deleted AS s__deleted FROM soft_delete_test s WHERE s.name = ? AND s.something = ? AND (s.deleted = ? OR s.deleted IS NULL)'); 
    8787        $this->assertEqual($q->getParams(array('test1', 'test2')), array('test1', 'test2', false)); 
    8888        $this->assertEqual($results->count(), 1); 
     
    100100                ->addWhere('s.something = ?', 'test2'); 
    101101 
    102         $this->assertEqual($q->getCountQuery(), 'SELECT COUNT(DISTINCT s.name) AS num_results FROM soft_delete_test s WHERE s.name = ? AND s.something = ? AND s.deleted = ? GROUP BY s.name'); 
     102        $this->assertEqual($q->getCountQuery(), 'SELECT COUNT(DISTINCT s.name) AS num_results FROM soft_delete_test s WHERE s.name = ? AND s.something = ? AND (s.deleted = ? OR s.deleted IS NULL) GROUP BY s.name'); 
    103103        $this->assertEqual($q->count(), 0); 
    104104 
  • branches/1.0/tests/Ticket/1116TestCase.php

    r4796 r5089  
    6161                $this->assertEqual(count($params), 2); // now we have array('test',null) very strange .....  
    6262 
    63                 $this->assertEqual($sql, "SELECT u.id AS u__id, u.username AS u__username, u.deleted AS u__deleted FROM user u WHERE u.username = ? AND u.deleted = ?"); 
     63                $this->assertEqual($sql, "SELECT u.id AS u__id, u.username AS u__username, u.deleted AS u__deleted FROM user u WHERE u.username = ? AND (u.deleted = ? OR u.deleted IS NULL)"); 
    6464                $this->assertEqual($params, array('test', false)); 
    6565 
  • branches/1.0/tests/Ticket/1121TestCase.php

    r4716 r5089  
    5151 
    5252        // The condition and params for UserProfile SoftDelete and are not added properly 
    53         $this->assertEqual($q->getSql(), 'SELECT t.id AS t__id, t.username AS t__username, t.password AS t__password, t.profile_id AS t__profile_id, t.deleted AS t__deleted, t2.id AS t2__id, t2.name AS t2__name, t2.about AS t2__about, t2.deleted AS t2__deleted FROM ticket_1121__user t LEFT JOIN ticket_1121__profile t2 ON t.profile_id = t2.id WHERE t.deleted = ? AND t2.deleted = ?'); 
     53        $this->assertEqual($q->getSql(), 'SELECT t.id AS t__id, t.username AS t__username, t.password AS t__password, t.profile_id AS t__profile_id, t.deleted AS t__deleted, t2.id AS t2__id, t2.name AS t2__name, t2.about AS t2__about, t2.deleted AS t2__deleted FROM ticket_1121__user t LEFT JOIN ticket_1121__profile t2 ON t.profile_id = t2.id WHERE (t.deleted = ? OR t.deleted IS NULL) AND (t2.deleted = ? OR t2.deleted IS NULL)'); 
    5454        $this->assertEqual(count($q->getParams()), 2); 
    5555        Doctrine_Manager::getInstance()->setAttribute('use_dql_callbacks', false); 
  • branches/1.0/tests/Ticket/1480TestCase.php

    r4976 r5089  
    4646            ->from('Foo f') 
    4747            ->addWhere('f.id IN (SELECT user_id FROM Bar b)'); 
    48         $this->assertEqual($q->getSql(), 'SELECT f.id AS f__id, f.name AS f__name, f.password AS f__password, f.deleted AS f__deleted FROM foo f WHERE f.id IN (SELECT f.user_id AS f__user_id FROM bar b WHERE f.deleted = ?) AND f.deleted = ?'); 
     48        $this->assertEqual($q->getSql(), 'SELECT f.id AS f__id, f.name AS f__name, f.password AS f__password, f.deleted AS f__deleted FROM foo f WHERE f.id IN (SELECT f.user_id AS f__user_id FROM bar b) AND (f.deleted = ? OR f.deleted IS NULL)'); 
    4949        $this->assertEqual(count($q->getParams()), 2); 
    5050        Doctrine_Manager::getInstance()->setAttribute('use_dql_callbacks', false);