queryString = $this->queryString; $query->error = $e; $this->_log($query, $params, $t); throw $e; } $query->numRows = $this->rowCount(); $this->_log($query, $params, $t); return $result; } /** * Copies the logging data to the passed LoggedQuery and sends it * to the logging system. * * @param \Cake\Database\Log\LoggedQuery $query The query to log. * @param array $params List of values to be bound to query. * @param float $startTime The microtime when the query was executed. * @return void */ protected function _log($query, $params, $startTime) { $query->took = (int)round((microtime(true) - $startTime) * 1000, 0); $query->params = $params ?: $this->_compiledParams; $query->query = $this->queryString; $this->getLogger()->log($query); } /** * Wrapper for bindValue function to gather each parameter to be later used * in the logger function. * * @param string|int $column Name or param position to be bound * @param mixed $value The value to bind to variable in query * @param string|int|null $type PDO type or name of configured Type class * @return void */ public function bindValue($column, $value, $type = 'string') { parent::bindValue($column, $value, $type); if ($type === null) { $type = 'string'; } if (!ctype_digit($type)) { $value = $this->cast($value, $type)[0]; } $this->_compiledParams[$column] = $value; } /** * Sets the logger object instance. When called with no arguments * it returns the currently setup logger instance * * @deprecated 3.5.0 Use getLogger() and setLogger() instead. * @param \Cake\Database\Log\QueryLogger|null $instance Logger object instance. * @return \Cake\Database\Log\QueryLogger|null Logger instance */ public function logger($instance = null) { deprecationWarning( 'LoggingStatement::logger() is deprecated. ' . 'Use LoggingStatement::setLogger()/getLogger() instead.' ); if ($instance === null) { return $this->getLogger(); } return $this->_logger = $instance; } /** * Sets a logger * * @param \Cake\Database\Log\QueryLogger $logger Logger object * @return void */ public function setLogger($logger) { $this->_logger = $logger; } /** * Gets the logger object * * @return \Cake\Database\Log\QueryLogger logger instance */ public function getLogger() { return $this->_logger; } }