public function preDqlDelete(Doctrine_Event $event)
 {
     $params = $event->getParams();
     $query = $event->getQuery();
     $table = $params['component']['table'];
     $identifier = $table->getIdentifier();
     $tmpQuery = clone $event->getQuery();
     $subQuery = $tmpQuery->select($params['alias'] . '.' . $identifier);
     $records = $subQuery->execute();
     if ($records instanceof Doctrine_Collection && $records->count()) {
         $q = Doctrine::getTable('ActivityData')->createQuery()->where('foreign_table = ?', $table->getTableName())->andWhereIn('foreign_id', array_values($records->toKeyValueArray($identifier, $identifier)))->delete()->execute();
     }
 }
 public function preDqlDelete(Doctrine_Event $event)
 {
     $params = $event->getParams();
     $tmpQuery = clone $event->getQuery();
     $subQuery = $tmpQuery->select($params['alias'] . '.' . $params['component']['table']->getIdentifier())->getDql();
     if (!in_array($params['alias'], $tmpQuery->getDqlPart('from'))) {
         return false;
     }
     $targets = $this->detectCascadingTargets($params['component']['table']);
     foreach ($targets as $target) {
         $table = Doctrine::getTable($target['table']);
         $relation = $table->getRelation($target['aliasFrom']);
         $localField = $relation->getLocalFieldName();
         $q = $table->createQuery();
         $q = $q->where($q->getRootAlias() . '.' . $localField . ' IN (' . $subQuery . ')');
         switch (strtolower($target['delete'])) {
             case 'cascade':
                 $q->delete()->execute();
                 break;
             case 'set null':
                 $q->update()->set($localField, '?', array(null))->execute();
                 break;
             default:
                 // do nothing
         }
     }
 }
Esempio n. 3
0
 public function preStmtExecute(Doctrine_Event $event)
 {
     // Check if the administrator has enabled the query logging feature
     if (Settings::findbyParam('debug_queries')) {
         $breadcrumps = array();
         $query = $event->getQuery();
         $params = $event->getParams();
         $callers = array_reverse(debug_backtrace(), true);
         $callers = array_slice($callers, 4, count($callers) - 10);
         foreach ($callers as $caller) {
             $class = !empty($caller['class']) ? $caller['class'] : null;
             $breadcrumps[] = $class . "->" . $caller['function'];
         }
         $strBreadcrump = "System: " . implode(" / ", $breadcrumps);
         //the below makes some naive assumptions about the queries being logged
         while (sizeof($params) > 0) {
             $param = array_shift($params);
             if (!is_numeric($param)) {
                 $param = sprintf("'%s'", $param);
             }
             $query = substr_replace($query, $param, strpos($query, '?'), 1);
         }
         Shineisp_Commons_Utilities::log($query, "queries.log");
         Shineisp_Commons_Utilities::log($strBreadcrump, "debug.log", Zend_Log::DEBUG);
         // Increase query counter
         $queryCount = Shineisp_Registry::isRegistered('querycount') ? Shineisp_Registry::get('querycount') : 0;
         $queryCount = $queryCount + 1;
         Shineisp_Registry::set('querycount', $queryCount);
     }
 }
Esempio n. 4
0
 /**
  * Adds categories relation specific joins.
  *
  * @param Doctrine_Event $event Event.
  *
  * @return void
  */
 public function preDqlSelect(Doctrine_Event $event)
 {
     $query = $event->getQuery();
     $params = $event->getParams();
     // aliases must be specific to entities
     $aliasCategories = $params['alias'] . 'Catmapobj';
     $dql = $params['alias'] . '.Categories ' . $aliasCategories . ' INDEXBY ' . $aliasCategories . '.reg_property';
     if (!$query->contains($dql)) {
         $query->leftJoin($dql)->leftJoin($aliasCategories . '.Category ' . $params['alias'] . 'Cat');
     }
 }
 public function preDqlSelect(Doctrine_Event $event)
 {
     if (!opActivateBehavior::getEnabled()) {
         return null;
     }
     $params = $event->getParams();
     $field = $params['alias'] . '.is_active';
     $query = $event->getQuery();
     if (!$query->contains($field)) {
         $query->addWhere($field . ' = ? OR ' . $field . ' IS NULL', array(true));
     }
 }
 public function preStmtExecute(Doctrine_Event $event)
 {
     $query = $event->getQuery();
     $params = $event->getParams();
     //the below makes some naive assumptions about the queries being logged
     while (sizeof($params) > 0) {
         $param = array_shift($params);
         if (!is_numeric($param)) {
             $param = sprintf("'%s'", $param);
         }
         $query = substr_replace($query, $param, strpos($query, '?'), 1);
         debug($query);
     }
 }
 /**
  * preStmtExecute
  *
  * @param string $Doctrine_Event
  * @return void
  */
 public function preStmtExecute(Doctrine_Event $event)
 {
     $query = $event->getQuery();
     $params = $event->getParams();
     foreach ($params as $key => $value) {
         if (is_numeric($key)) {
             // it's a '?'
             $query = preg_replace('/\\?/', "'" . $value . "'", $query, 1);
         } else {
             $params[$key] = "'" . $value . "'";
         }
     }
     $this->queries[] = strtr($query, $params);
 }
 /**
  * (non-PHPdoc)
  * @see branch/vendors/doctrine/Doctrine/Record/Doctrine_Record_Listener#preDqlSelect()
  * add a date constraint to every query before it's executed
  * @param Doctrine_Event $event
  * @return void
  */
 public function preDqlSelect(Doctrine_Event $event)
 {
     $query = $event->getQuery();
     if (get_class($query) == Doctrine_Template_Temporal::QUERY_CLASS_NAME) {
         // is this a Temporal query?
         $query_date = $query->getQueryDate($this->date_format);
         if ($query_date !== false) {
             // false means 'ignore query date'
             $params = $event->getParams();
             $eff_date_field = $params['alias'] . '.' . $this->_options['eff_date'];
             $exp_date_field = $params['alias'] . '.' . $this->_options['exp_date'];
             $query->addWhere($eff_date_field . ' <= ?', $query_date);
             $query->addWhere("({$exp_date_field} IS NULL OR {$exp_date_field} > ?)", $query_date);
         }
     }
 }
 /**
  * Set the updated field for dql update queries
  *
  * @param Doctrine_Event $evet
  * @return void
  */
 public function preDqlUpdate(Doctrine_Event $event)
 {
     try {
         $guard_user = sfContext::getInstance()->getUser()->getGuardUser();
     } catch (Exception $e) {
         return;
     }
     if (!$this->_options['updated']['disabled']) {
         $params = $event->getParams();
         $updatedName = $event->getInvoker()->getTable()->getFieldName($this->_options['updated']['name']);
         $field = $params['alias'] . '.' . $updatedName;
         $query = $event->getQuery();
         if (!$query->contains($field)) {
             $query->set($field, '?', $guard_user);
         }
     }
 }
 /**
  * Pre SELECT
  */
 public function preDqlSelect(Doctrine_Event $event)
 {
     $query = $event->getQuery();
     $params = $event->getParams();
     $alias = $params['alias'];
     $limit = $query->getDqlPart('limit');
     $limit = count($limit) ? (int) $limit[0] : 0;
     // Если не указан LIMIT 1
     // Если не указан SELECT
     // Если это не подзапрос
     if (1 != $limit && !$query->getDqlPart('select') && !$query->isSubquery()) {
         $skip = $this->getOption('skip');
         $columns = $event->getInvoker()->getTable()->getColumnNames();
         $columns = array_diff($columns, $skip);
         $select = $alias . '.' . join(', ' . $alias . '.', $columns);
         $query->select($select);
     }
 }
 /**
  * Logs a statement execute on behalf of the statement.
  * 
  * @param Doctrine_Event $event
  */
 public function preStmtExecute(Doctrine_Event $event)
 {
     if ($this->options['logging']) {
         $this->dispatcher->notify(new sfEvent($event->getInvoker(), 'application.log', array(sprintf('execute : %s - (%s)', $event->getQuery(), join(', ', self::fixParams($event->getParams()))))));
     }
     sfTimerManager::getTimer('Database (Doctrine)');
     $args = func_get_args();
     $this->__call(__FUNCTION__, $args);
 }
Esempio n. 12
0
 /**
  * Implement preDqlSelect() hook and add the deleted flag to all queries for which this model 
  * is being used in.
  *
  * @param Doctrine_Event $event 
  * @return void
  */
 public function preDqlSelect(Doctrine_Event $event)
 {
     $params = $event->getParams();
     $field = $params['alias'] . '.' . $this->_options['name'];
     $query = $event->getQuery();
     // We only need to add the restriction if:
     // 1 - We are in the root query
     // 2 - We are in the subquery and it defines the component with that alias
     if ((!$query->isSubquery() || $query->isSubquery() && $query->contains(' ' . $params['alias'] . ' ')) && !$query->contains($field)) {
         if ($this->_options['type'] == 'timestamp') {
             $query->addPendingJoinCondition($params['alias'], $field . ' IS NULL');
         } else {
             if ($this->_options['type'] == 'boolean') {
                 $query->addPendingJoinCondition($params['alias'], $field . ' = ' . $query->getConnection()->convertBooleans(false));
             }
         }
     }
 }
Esempio n. 13
0
 /**
  * Set the updated field for dql update queries
  *
  * @param Doctrine_Event $evet
  * @return void
  */
 public function preDqlUpdate(Doctrine_Event $event)
 {
     if (!$this->_options['updated']['disabled']) {
         $params = $event->getParams();
         $updatedName = $event->getInvoker()->getTable()->getFieldName($this->_options['updated']['name']);
         $field = $params['alias'] . '.' . $updatedName;
         $query = $event->getQuery();
         if (!$query->contains($field)) {
             $query->set($field, '?', $this->getTimestamp('updated', $event->getInvoker()->getTable()->getConnection()));
         }
     }
 }
Esempio n. 14
0
 /**
  * Implement preDqlSelect() hook and add the deleted flag to all queries for which this model 
  * is being used in.
  *
  * @param Doctrine_Event $event 
  * @return void
  */
 public function preDqlSelect(Doctrine_Event $event)
 {
     $params = $event->getParams();
     $field = $params['alias'] . '.' . $this->_options['name'];
     $query = $event->getQuery();
     if (!$query->contains($field)) {
         $query->addWhere($field . ' = 0 OR ' . $field . ' IS NULL');
     }
 }
Esempio n. 15
0
 /**
  * Listens the preExecute event of Doctrine_Connection_Statement
  *
  * adds the issued query to internal query stack
  * and checks if cached element exists
  *
  * @return boolean
  */
 public function preExecute(Doctrine_Event $event)
 {
     $query = $event->getQuery();
     $data = false;
     // only process SELECT statements
     if (strtoupper(substr(ltrim($query), 0, 6)) != 'SELECT') {
         return false;
     }
     $this->add($query, $event->getInvoker()->getDbh()->getName());
     $data = $this->_driver->fetch(md5(serialize(array($query, $event->getParams()))));
     $this->success = $data ? true : false;
     if (!$data) {
         $rand = mt_rand() / mt_getrandmax();
         if ($rand <= $this->_options['savePropability']) {
             $stmt = $event->getInvoker()->getStatement();
             $stmt->execute($event->getParams());
             $data = $stmt->fetchAll(Doctrine::FETCH_ASSOC);
             $this->success = true;
             $this->_driver->save(md5(serialize(array($query, $event->getParams()))), $data);
         }
     }
     if ($this->success) {
         $this->_data = $data;
         return true;
     }
     return false;
 }
Esempio n. 16
0
 /**
  * Executed following a Doctrine statement exec query.
  *
  * @param Doctrine_Event $event The Doctrine event instance.
  *
  * @return void
  */
 public function postStmtExecute(Doctrine_Event $event)
 {
     $event->end();
     $zevent = new Zikula_Event('log.sql', null, array('time' => $event->getElapsedSecs(), 'query' => $event->getQuery()));
     EventUtil::notify($zevent);
 }
Esempio n. 17
0
 /**
  * Executed following a Doctrine statement exec query.
  *
  * @param Doctrine_Event $event The Doctrine event instance.
  *
  * @return void
  */
 public function postStmtExecute(Doctrine_Event $event)
 {
     $event->end();
     $zevent = new GenericEvent(null, array('time' => $event->getElapsedSecs(), 'query' => $event->getQuery()));
     EventUtil::dispatch('log.sql', $zevent);
 }
Esempio n. 18
0
 /**
  * pre dql delete hook - remove object tags from tagger
  *
  * @param Doctrine_Event $event
  * @return null
  */
 public function preDqlDelete(Doctrine_Event $event)
 {
     $taggingCache = null;
     try {
         $taggingCache = $this->getTaggingCache();
     } catch (sfCacheException $e) {
         return;
     }
     $table = $event->getInvoker()->getTable();
     /* @var $q Doctrine_Query */
     $q = clone $event->getQuery();
     /**
      * This happens, when SoftDelete is declared before Cachetaggable
      */
     if (Doctrine_Query::UPDATE === $q->getType()) {
         $event->getQuery()->set($this->getOption('versionColumn'), sfCacheTaggingToolkit::generateVersion());
         $q->removeDqlQueryPart('set');
     }
     $params = $q->getParams();
     $params['set'] = array();
     $q->setParams($params);
     $objects = $q->select()->execute();
     $unitOfWork = new Doctrine_Connection_CachetaggableUnitOfWork($q->getConnection());
     foreach ($objects as $object) {
         $unitOfWork->collectDeletionsAndInvalidations($object);
         $taggingCache->deleteTags($unitOfWork->getDeletions());
         $taggingCache->invalidateTags($unitOfWork->getInvalidations());
     }
     unset($unitOfWork);
     $taggingCache->setTag(sfCacheTaggingToolkit::getBaseClassName($table->getClassnameToReturn()), sfCacheTaggingToolkit::generateVersion());
 }
Esempio n. 19
0
 /**
  * Decrypt values on dql updates
  * 
  * @param Doctrine_Event $event Doctrine Event object
  */
 public function preDqlUpdate(Doctrine_Event $event)
 {
     $this->logger->debug($this->fieldName . 'preDqlUpdate');
     //$params = $event->getParams();
     //$alias = $params['alias'];
     $query = $event->getQuery();
     if ($query->contains($this->fieldName)) {
         // Find field in "set" query part
         $dqlSet = $query->getDqlPart("set");
         $paramNdx = null;
         $ndx = 0;
         $this->logger->debug("Contains " . $this->fieldName);
         foreach ($dqlSet as $set) {
             if (stripos($set, "?") !== FALSE) {
                 if (stripos($set, $this->fieldName) !== FALSE) {
                     $this->logger->debug("Field found. paramNdx = " . $ndx);
                     $paramNdx = $ndx;
                 }
                 $ndx++;
             }
         }
         // Find corresponding query parameter and encrypt it.
         if (!is_null($ndx)) {
             $params = $query->getParams();
             if (isset($params['set'])) {
                 $this->logger->debug("Set parameters found.");
                 $setParams = $params['set'];
                 if (isset($setParams[$paramNdx])) {
                     $setParams[$paramNdx] = $this->encrypt($setParams[$paramNdx], $this->key);
                     $params['set'] = $setParams;
                     $query->setParams($params);
                 }
             }
         }
     }
 }
 /**
  * Limits the delete of a model by adding additional criteria.
  *
  * The criteria are determined by the options provided by the behaviour.
  *
  * @param Doctrine_Event $event
  *
  * @return void
  */
 public function preDqlDelete(Doctrine_Event $event)
 {
     $this->appendQuery($event->getQuery());
 }
 public function preQuery(Doctrine_Event $event)
 {
     sfContext::getInstance()->getLogger()->log('{sfDoctrine Query} executeQuery : ' . $event->getQuery());
     $sqlTimer = sfTimerManager::getTimer('Database (Doctrine)');
 }
 /**
  * Insert a record in the queries table
  *
  * @param Doctrine_Event $event the event to log
  *
  * @throws Zend_Db_Profiler_Exception
  *
  * @return void
  */
 public function recordEvent($event)
 {
     $this->message->setDestroy(false);
     // update time counter
     $this->totalElapsedTime += $event->getElapsedSecs();
     // add a row to the table
     $this->message->addRow(array((string) round($event->getElapsedSecs(), 5), $event->getQuery() ? $event->getQuery() : $event->getName(), ($params = $event->getParams()) ? $params : null));
     // increment number of queries
     $this->totalNumQueries++;
 }
Esempio n. 23
0
 public function preDqlSelect(Doctrine_Event $event)
 {
     $params = $event->getParams();
     $alias = $params['alias'];
     $event->getQuery()->leftJoin($alias . '.RecordTest1');
 }