/** * Runs a single statement and times it, removes any old unbuffered queries before starting * * @param string|fStatement $statement The SQL statement or prepared statement to execute * @param string $result_type The type of result object to return, fResult or fUnbufferedResult * @return fResult|fUnbufferedResult The result for the query */ private function run($statement, $result_type = NULL, $params = array()) { if ($this->unbuffered_result) { $this->unbuffered_result->__destruct(); $this->unbuffered_result = NULL; } $start_time = microtime(TRUE); if (is_object($statement)) { $sql = $statement->getSQL(); } else { $sql = $statement; } if (!($result = $this->handleTransactionQueries($sql, $result_type))) { if ($result_type) { $result = new $result_type($this, $this->type == 'mssql' ? $this->schema_info['character_set'] : NULL); $result->setSQL($sql); if ($result_type == 'fResult') { $this->performQuery($statement, $result, $params); } else { $this->performUnbufferedQuery($statement, $result, $params); } } else { $this->perform($statement, $params); } } // Write some debugging info $query_time = microtime(TRUE) - $start_time; $this->query_time += $query_time; if (fCore::getDebug($this->debug)) { fCore::debug(self::compose('Query time was %1$s seconds for:%2$s', $query_time, "\n" . $sql), $this->debug); } if ($this->hook_callbacks['run']) { foreach ($this->hook_callbacks['run'] as $callback) { $callback_params = array($this, is_object($statement) ? array($statement, $params) : $sql, $query_time, $result); call_user_func_array($callback, $callback_params); } } if ($result_type) { return $result; } }
/** * Runs a single query and times it, removes any old unbuffered queries before starting * * @param string $sql The SQL statement to execute * @param string $result_type The type of result object to return, fResult or fUnbufferedResult * @return fResult|fUnbufferedResult The result for the query */ private function runQuery($sql, $result_type) { if ($this->unbuffered_result) { $this->unbuffered_result->__destruct(); $this->unbuffered_result = NULL; } $start_time = microtime(TRUE); if (!($result = $this->handleTransactionQueries($sql, $result_type))) { $result = new $result_type($this, $this->type == 'mssql' ? $this->schema_info['character_set'] : NULL); $result->setSQL($sql); if ($result_type == 'fResult') { $this->executeQuery($result); } else { $this->executeUnbufferedQuery($result); } } // Write some debugging info $query_time = microtime(TRUE) - $start_time; $this->query_time += $query_time; fCore::debug(self::compose('Query time was %1$s seconds for:%2$s', $query_time, "\n" . $result->getSQL()), $this->debug); if ($this->slow_query_threshold && $query_time > $this->slow_query_threshold) { trigger_error(self::compose('The following query took %1$s milliseconds, which is above the slow query threshold of %2$s:%3$s', $query_time, $this->slow_query_threshold, "\n" . $result->getSQL()), E_USER_WARNING); } return $result; }