/** * Returns current PDOStatement * * @return PDOStatement */ private function execute($sql, array $params = null) { if ($this->isProfilerEnabled) { $this->profiler->reset(); } /* @var $stmt PDOStatement */ $stmt = $this->connection->prepare($sql); if ($params !== null) { foreach ($params as $key => $value) { $paramType = PDO::PARAM_STR; if (is_int($value)) { $paramType = PDO::PARAM_INT; } elseif (is_bool($value)) { $paramType = PDO::PARAM_BOOL; } $stmt->bindValue(is_int($key) ? $key + 1 : $key, $value, $paramType); } } OW::getEventManager()->trigger(new OW_Event("core.sql.exec_query", array("sql" => $sql, "params" => $params))); $stmt->execute(); //TODO setup profiler $this->affectedRows = $stmt->rowCount(); if ($this->isProfilerEnabled) { $this->queryExecTime = $this->profiler->getTotalTime(); $this->totalQueryExecTime += $this->queryExecTime; $this->queryCount++; $this->queryLog[] = array('query' => $sql, 'execTime' => $this->queryExecTime, 'params' => $params); } return $stmt; }
/** * Calls last event listener and returns it's result value. * * @param string $eventName * @param array $eventParams * @return mixed */ public function call($eventName, $eventParams = array()) { $event = new OW_Event($eventName, $eventParams); if (!empty($this->listeners[$eventName])) { ksort($this->listeners[$event->getName()]); // log triggered events for developer mode if ($this->devMode) { $startTime = UTIL_Profiler::getInstance()->getTotalTime(); $this->profiler->reset(); $handlers = reset($this->listeners[$eventName]); $result = call_user_func(end($handlers), $event); if (!in_array($event->getName(), $this->eventsToSkip) && count($this->eventsLog) < $this->maxItemsInLog) { $this->eventsLog[] = array('type' => 'call', 'start' => $startTime, 'exec' => $this->profiler->getTotalTime(), 'event' => $event, 'listeners' => $this->listeners[$event->getName()]); } } else { $handlers = reset($this->listeners[$eventName]); $result = call_user_func(end($handlers), $event); } return $result; } else { // log events with no listeners $startTime = UTIL_Profiler::getInstance()->getTotalTime(); if ($this->devMode && !in_array($event->getName(), $this->eventsToSkip) && count($this->eventsLog) < $this->maxItemsInLog) { $this->eventsLog[] = array('type' => 'call', 'start' => $startTime, 'event' => $event, 'listeners' => array(), 'exec' => 0); } } }