Changeset 4478

Show
Ignore:
Timestamp:
06/06/08 20:48:05 (13 months ago)
Author:
jwage
Message:

Removing postDql*() hooks as their are no use cases for them. Fixing issue with dql query hooks where they were being triggered multiple times.

Location:
branches/0.11
Files:
5 modified

Legend:

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

    r4433 r4478  
    11081108 
    11091109        // invoke the preQuery hook 
    1110         $this->preQuery(); 
     1110        $this->_preQuery(); 
    11111111 
    11121112        // process the DQL parts => generate the SQL parts. 
     
    11591159            $q .= ' SET ' . implode(', ', $this->_sqlParts['set']); 
    11601160        } 
    1161  
    11621161 
    11631162        $string = $this->applyInheritance(); 
     
    12201219 
    12211220        return $q; 
     1221    } 
     1222 
     1223    /** 
     1224     * Get the dql call back for this query 
     1225     * 
     1226     * @return array $callback 
     1227     */ 
     1228    protected function _getDqlCallback() 
     1229    { 
     1230        $callback = false; 
     1231        if ( ! empty($this->_dqlParts['from'])) { 
     1232            switch ($this->_type) { 
     1233                case self::DELETE: 
     1234                    $callback = array( 
     1235                        'callback' => 'preDqlDelete', 
     1236                        'const' => Doctrine_Event::RECORD_DQL_DELETE 
     1237                    ); 
     1238                break; 
     1239                case self::UPDATE: 
     1240                    $callback = array( 
     1241                        'callback' => 'preDqlUpdate', 
     1242                        'const' => Doctrine_Event::RECORD_DQL_UPDATE 
     1243                    ); 
     1244                break; 
     1245                case self::SELECT: 
     1246                    $callback = array( 
     1247                        'callback' => 'preDqlSelect', 
     1248                        'const' => Doctrine_Event::RECORD_DQL_SELECT 
     1249                    ); 
     1250                break; 
     1251            } 
     1252        } 
     1253 
     1254        return $callback; 
     1255    } 
     1256 
     1257    /** 
     1258     * Pre query method which invokes the pre*Query() methods on the model instance or any attached 
     1259     * record listeners 
     1260     * 
     1261     * @return void 
     1262     */ 
     1263    protected function _preQuery() 
     1264    { 
     1265        $callback = $this->_getDqlCallback(); 
     1266 
     1267        // if there is no callback for the query type, then we can return early 
     1268        if ( ! $callback) { 
     1269            return; 
     1270        } 
     1271 
     1272        // parse the FROM clause to find all models used in the DQL 
     1273        $from = new Doctrine_Query_From($this); 
     1274        $this->_components = array(); 
     1275        foreach ($this->_dqlParts['from'] as $key => $table) { 
     1276            $componentClause = $from->parse($table, true); 
     1277            foreach ($componentClause as $c) { 
     1278                // remove the prefix if there is one (aka "f.Bar" => "Bar") 
     1279                $component = explode('.', $c[0]); 
     1280                $component = array_pop($component); 
     1281                $alias = isset($c[1]) ? $c[1] : $component; 
     1282                $this->_components[$component] = $alias; 
     1283            } 
     1284        } 
     1285 
     1286        foreach ($this->_components as $component => $alias) { 
     1287            if (class_exists($component)) { 
     1288                $componentObj = Doctrine::getTable($component); 
     1289                $record = $componentObj->getRecordInstance(); 
     1290 
     1291                // check (and call) preDql*() callback on the model class 
     1292                if (method_exists($record, $callback['callback'])) { 
     1293                    $record->$callback['callback']($this, $component, $alias); 
     1294                } 
     1295 
     1296                // trigger preDql*() callback event 
     1297                $params = array('component`' => $component, 'alias' => $alias); 
     1298                $event = new Doctrine_Event($record, $callback['const'], $this, $params); 
     1299                $componentObj->getRecordListener()->$callback['callback']($event); 
     1300            } 
     1301        } 
     1302 
     1303        // Invoke preQuery() hook on Doctrine_Query for child classes which implement this hook 
     1304        $this->preQuery(); 
     1305    } 
     1306 
     1307    /** 
     1308     * Blank hook methods which can be implemented in Doctrine_Query child classes 
     1309     * 
     1310     * @return void 
     1311     */ 
     1312    public function preQuery() 
     1313    { 
    12221314    } 
    12231315 
  • branches/0.11/lib/Doctrine/Query/Abstract.php

    r4467 r4478  
    911911 
    912912    /** 
    913      * Get dql call back for the pre/postQuery() methods 
    914      * 
    915      * @param string $prePost  
    916      * @return array $callback 
    917      */ 
    918     private function getDqlCallback($prePost) 
    919     { 
    920         $callback = false; 
    921         if ( ! empty($this->_dqlParts['from'])) { 
    922             switch ($this->_type) { 
    923                 case self::DELETE: 
    924                     $callback = array( 
    925                         'callback' => $prePost.'DqlDelete', 
    926                         'const' => Doctrine_Event::RECORD_DQL_DELETE 
    927                     ); 
    928                 break; 
    929                 case self::UPDATE: 
    930                     $callback = array( 
    931                         'callback' => $prePost.'DqlUpdate', 
    932                         'const' => Doctrine_Event::RECORD_DQL_UPDATE 
    933                     ); 
    934                 break; 
    935                 case self::SELECT: 
    936                     $callback = array( 
    937                         'callback' => $prePost.'DqlSelect', 
    938                         'const' => Doctrine_Event::RECORD_DQL_SELECT 
    939                     ); 
    940                 break; 
    941             } 
    942         } 
    943  
    944         return $callback; 
    945     } 
    946  
    947     /** 
    948      * Trigger the DQL listeners if they exist 
    949      * 
    950      * @param array $callback  
    951      * @return void 
    952      */ 
    953     private function triggerDqlListener($callback) 
    954     { 
    955         // if there is no callback for the query type, then we can return early 
    956         if ( ! $callback) { 
    957             return; 
    958         } 
    959  
    960         foreach ($this->_components as $component => $alias) { 
    961             if (class_exists($component)) { 
    962                 $componentObj = Doctrine::getTable($component); 
    963                 $record = $componentObj->getRecordInstance(); 
    964  
    965                 // check (and call) preDql*() callback on the model class 
    966                 if (method_exists($record, $callback['callback'])) { 
    967                     $record->$callback['callback']($this, $component, $alias); 
    968                 } 
    969  
    970                 // trigger preDql*() callback event 
    971                 $params = array('component`' => $component, 'alias' => $alias); 
    972                 $event = new Doctrine_Event($record, $callback['const'], $this, $params); 
    973                 $componentObj->getRecordListener()->$callback['callback']($event); 
    974             } 
    975         } 
    976     } 
    977  
    978     /** 
    979      * Pre query method which invokes the pre*Query() methods on the model instance or any attached 
    980      * record listeners 
    981      * 
    982      * @return void 
    983      */ 
    984     public function preQuery() 
    985     { 
    986         $callback = $this->getDqlCallback('pre'); 
    987         // if there is no callback for the query type, then we can return early 
    988         if ( ! $callback) { 
    989             return; 
    990         } 
    991  
    992         // parse the FROM clause to find all models used in the DQL 
    993         $from = new Doctrine_Query_From($this); 
    994         $this->_components = array(); 
    995         foreach ($this->_dqlParts['from'] as $key => $table) { 
    996             $componentClause = $from->parse($table, true); 
    997             foreach ($componentClause as $c) { 
    998                 // remove the prefix if there is one (aka "f.Bar" => "Bar") 
    999                 $component = explode('.', $c[0]); 
    1000                 $component = array_pop($component); 
    1001                 $alias = isset($c[1]) ? $c[1] : $component; 
    1002                 $this->_components[$component] = $alias; 
    1003             } 
    1004         } 
    1005  
    1006         $this->triggerDqlListener($callback); 
    1007     } 
    1008  
    1009     /** 
    1010      * Same as preQuery() exist for post 
    1011      * 
    1012      * @return void 
    1013      */ 
    1014     public function postQuery() 
    1015     { 
    1016         $callback = $this->getDqlCallback('post'); 
    1017         $this->triggerDqlListener($callback); 
    1018     } 
    1019  
    1020     /** 
    1021913     * _execute 
    1022914     * 
     
    1072964    public function execute($params = array(), $hydrationMode = null) 
    1073965    { 
    1074         // invoke the preQuery hook 
    1075         $this->preQuery(); 
    1076  
    1077966        if ($hydrationMode !== null) { 
    1078967            $this->_hydrator->setHydrationMode($hydrationMode); 
     
    11151004            } 
    11161005        } 
    1117  
    1118         // invoke the postQuery hook 
    1119         $this->postQuery(); 
    11201006 
    11211007        return $result; 
  • branches/0.11/lib/Doctrine/Record/Listener.php

    r4433 r4478  
    4848    { } 
    4949 
    50     public function postDqlSelect(Doctrine_Event $event) 
    51     { } 
    52  
    5350    public function preSave(Doctrine_Event $event) 
    5451    { } 
     
    6057    { } 
    6158 
    62     public function postDqlDelete(Doctrine_Event $event) 
    63     { } 
    64  
    6559    public function preDelete(Doctrine_Event $event) 
    6660    { } 
     
    7064 
    7165    public function preDqlUpdate(Doctrine_Event $event) 
    72     { } 
    73  
    74     public function postDqlUpdate(Doctrine_Event $event) 
    7566    { } 
    7667 
  • branches/0.11/lib/Doctrine/Record/Listener/Chain.php

    r4433 r4478  
    124124    } 
    125125 
    126     public function postDqlSelect(Doctrine_Event $event) 
    127     { 
    128         foreach ($this->_listeners as $listener) { 
    129             $listener->preDqlSelect($event); 
    130         } 
    131     } 
    132  
    133126    public function preSave(Doctrine_Event $event) 
    134127    { 
     
    152145    } 
    153146 
    154     public function postDqlDelete(Doctrine_Event $event) 
    155     { 
    156         foreach ($this->_listeners as $listener) { 
    157             $listener->preDqlDelete($event); 
    158         } 
    159     } 
    160  
    161147    public function preDelete(Doctrine_Event $event) 
    162148    { 
     
    180166    } 
    181167 
    182     public function postDqlUpdate(Doctrine_Event $event) 
    183     { 
    184         foreach ($this->_listeners as $listener) { 
    185             $listener->preDqlUpdate($event); 
    186         } 
    187     } 
    188  
    189168    public function preUpdate(Doctrine_Event $event) 
    190169    { 
  • branches/0.11/manual/docs/en/event-listeners.txt

    r4440 r4478  
    218218|| preDqlUpdate(Doctrine_Event $event) || Doctrine_Query::create()->update('User')->set('name', '?', 'jwage')->execute() || 
    219219|| postUpdate(Doctrine_Event $event) || Doctrine_Record::save() when the record state is DIRTY || 
    220 || postDqlUpdate(Doctrine_Event $event) || Doctrine_Query::create()->update('User')->set('name', '?', 'jwage')->execute() || 
    221220|| preInsert(Doctrine_Event $event) || Doctrine_Record::save() when the record state is TDIRTY || 
    222221|| postInsert(Doctrine_Event $event) || Doctrine_Record::save() when the record state is TDIRTY || 
     
    224223|| preDqlDelete(Doctrine_Event $event) || Doctrine_Query::create()->delete()->from('User')->execute() || 
    225224|| postDelete(Doctrine_Event $event) || Doctrine_Record::delete() || 
    226 || postDqlDelete(Doctrine_Event $event) || Doctrine_Query::create()->delete()->from('User')->execute() || 
    227225|| preValidate(Doctrine_Event $event) || Doctrine_Validator::validate() || 
    228226|| postValidate(Doctrine_Event $event) || Doctrine_Validator::validate() || 
    229227|| preDqlSelect(Doctrine_Event $event) || Doctrine_Query::create()->from('User u')->execute() || 
    230 || postDqlSelect(Doctrine_Event $event) || Doctrine_Query::create()->from('User u')->execute() || 
    231228 
    232229Just like with connection listeners there are three ways of defining a record listener: by extending  
     
    313310|| preDqlUpdate(Doctrine_Event $event) || Doctrine_Query::create()->update('User')->set('name', '?', 'jwage')->execute() || 
    314311|| postUpdate(Doctrine_Event $event) || Doctrine_Record::save() when the record state is DIRTY || 
    315 || postDqlUpdate(Doctrine_Event $event) || Doctrine_Query::create()->update('User')->set('name', '?', 'jwage')->execute() || 
    316312|| preInsert(Doctrine_Event $event) || Doctrine_Record::save() when the record state is TDIRTY || 
    317313|| postInsert(Doctrine_Event $event) || Doctrine_Record::save() when the record state is TDIRTY || 
     
    319315|| preDqlDelete(Doctrine_Event $event) || Doctrine_Query::create()->delete()->from('User')->execute() || 
    320316|| postDelete(Doctrine_Event $event) || Doctrine_Record::delete() || 
    321 || postDqlDelete(Doctrine_Event $event) || Doctrine_Query::create()->delete()->from('User')->execute() || 
    322317|| preValidate(Doctrine_Event $event) || Doctrine_Validator::validate() || 
    323318|| postValidate(Doctrine_Event $event) || Doctrine_Validator::validate() || 
    324319|| preDqlSelect(Doctrine_Event $event) || Doctrine_Query::create()->from('User u')->execute() || 
    325 || postDqlSelect(Doctrine_Event $event) || Doctrine_Query::create()->from('User u')->execute() || 
    326320 
    327321Example 1. Using insert and update hooks