const ATTR_MODEL_LOADING = 161;
const ATTR_RECURSIVE_MERGE_FIXTURES = 162;
const ATTR_SINGULARIZE_IMPORT = 163;
- const ATTR_USE_DQL_CALLBACKS = 164;
const FETCH_IMMEDIATE = 0;
const FETCH_BATCH = 1;
case IPF_ORM::ATTR_QUERY_CACHE_LIFESPAN:
case IPF_ORM::ATTR_RECURSIVE_MERGE_FIXTURES;
case IPF_ORM::ATTR_SINGULARIZE_IMPORT;
- case IPF_ORM::ATTR_USE_DQL_CALLBACKS;
break;
case IPF_ORM::ATTR_SEQCOL_NAME:
IPF_ORM::ATTR_DECIMAL_PLACES => 2,
IPF_ORM::ATTR_DEFAULT_PARAM_NAMESPACE => 'ipf',
IPF_ORM::ATTR_AUTOLOAD_TABLE_CLASSES => false,
- IPF_ORM::ATTR_USE_DQL_CALLBACKS => false,
);
}
return $result;
}
- protected function _getDqlCallback()
- {
- $callback = false;
- if ( ! empty($this->_dqlParts['from'])) {
- switch ($this->_type) {
- case self::DELETE:
- $callback = array(
- 'callback' => 'preDqlDelete',
- 'const' => IPF_ORM_Event::RECORD_DQL_DELETE
- );
- break;
- case self::UPDATE:
- $callback = array(
- 'callback' => 'preDqlUpdate',
- 'const' => IPF_ORM_Event::RECORD_DQL_UPDATE
- );
- break;
- case self::SELECT:
- $callback = array(
- 'callback' => 'preDqlSelect',
- 'const' => IPF_ORM_Event::RECORD_DQL_SELECT
- );
- break;
- }
- }
-
- return $callback;
- }
-
protected function _preQuery()
{
- if ( ! $this->_preQueried && IPF_ORM_Manager::getInstance()->getAttribute('use_dql_callbacks')) {
- $this->_preQueried = true;
-
- $callback = $this->_getDqlCallback();
-
- // if there is no callback for the query type, then we can return early
- if ( ! $callback) {
- return;
- }
-
- $copy = $this->copy();
- $copy->getSqlQuery();
-
- foreach ($copy->getQueryComponents() as $alias => $component) {
- $table = $component['table'];
- $record = $table->getRecordInstance();
-
- // Trigger preDql*() callback event
- $params = array('component' => $component, 'alias' => $alias);
- $event = new IPF_ORM_Event($record, $callback['const'], $this, $params);
-
- $record->$callback['callback']($event);
- $table->notifyRecordListeners($callback['callback'], $event);
- }
- }
-
// Invoke preQuery() hook on IPF_ORM_Query for child classes which implement this hook
$this->preQuery();
}
public function postInsert($event){}
- public function preDqlSelect($event){}
-
- public function preDqlUpdate($event){}
-
- public function preDqlDelete($event){}
-
public function getErrorStack(){
if ( ! $this->_errorStack) {
$this->_errorStack = new IPF_ORM_Validator_ErrorStack(get_class($this));