query($args); } /** * Executes the SQL query - Monostate for DibiDriver::nativeQuery() * * @param string SQL statement. * @return DibiResult|TRUE */ public static function nativeQuery($sql) { return self::getConnection()->nativeQuery($sql); } /** * Generates and prints SQL query - Monostate for DibiDriver::test() * * @param array|mixed one or more arguments * @return bool */ public static function test($args) { if (!is_array($args)) $args = func_get_args(); return self::getConnection()->test($args); } /** * Retrieves the ID generated for an AUTO_INCREMENT column by the previous INSERT query * Monostate for DibiDriver::insertId() * * @param string optional sequence name for DibiPostgreDriver * @return int|FALSE int on success or FALSE on failure */ public static function insertId($sequence=NULL) { return self::getConnection()->insertId($sequence); } /** * Gets the number of affected rows * Monostate for DibiDriver::affectedRows() * * @return int number of rows or FALSE on error */ public static function affectedRows() { return self::getConnection()->affectedRows(); } /** * Begins a transaction - Monostate for DibiDriver::begin() */ public static function begin() { self::getConnection()->begin(); } /** * Commits statements in a transaction - Monostate for DibiDriver::commit() */ public static function commit() { self::getConnection()->commit(); } /** * Rollback changes in a transaction - Monostate for DibiDriver::rollback() */ public static function rollback() { self::getConnection()->rollback(); } /** * Create a new substitution pair for indentifiers * * @param string from * @param string to * @return void */ public static function addSubst($expr, $subst) { self::$substs[':'.$expr.':'] = $subst; } /** * Remove substitution pair * * @param mixed from or TRUE * @return void */ public static function removeSubst($expr) { if ($expr === TRUE) { self::$substs = array(); } else { unset(self::$substs[':'.$expr.':']); } } /** * Returns substitution pairs * * @return array */ public static function getSubst() { return self::$substs; } /** * Add new event handler * * @param callback * @return void */ public static function addHandler($callback) { if (!is_callable($callback)) { throw new DibiException("Invalid callback"); } self::$handlers[] = $callback; } /** * Event notification (events: exception, connected, beforeQuery, afterQuery, begin, commit, rollback) * * @param string event name * @param DibiDriver * @param mixed * @return void */ public static function notify($event, DibiDriver $driver = NULL, $arg = NULL) { if ($event === 'beforeQuery') { self::$numOfQueries++; self::$elapsedTime = FALSE; self::$time = -microtime(TRUE); self::$sql = $arg; } elseif ($event === 'afterQuery') { self::$elapsedTime = self::$time + microtime(TRUE); self::$totalTime += self::$elapsedTime; } foreach (self::$handlers as $handler) { call_user_func($handler, $event, $driver, $arg); } } /** * Enable profiler & logger * * @param string filename * @param bool log all queries? * @return DibiProfiler */ public static function startLogger($file, $logQueries = FALSE) { $logger = new DibiLogger($file); $logger->logQueries = $logQueries; self::addHandler(array($logger, 'handler')); return $logger; } /** * Prints out a syntax highlighted version of the SQL command or DibiResult * * @param string|DibiResult * @param bool return or print? * @return string */ public static function dump($sql = NULL, $return = FALSE) { ob_start(); if ($sql instanceof DibiResult) { $sql->dump(); } else { if ($sql === NULL) $sql = self::$sql; static $keywords2 = 'ALL|DISTINCT|AS|ON|INTO|AND|OR|AS'; static $keywords1 = 'SELECT|UPDATE|INSERT|DELETE|FROM|WHERE|HAVING|GROUP\s+BY|ORDER\s+BY|LIMIT|SET|VALUES|LEFT\s+JOIN|INNER\s+JOIN'; // insert new lines $sql = preg_replace("#\\b(?:$keywords1)\\b#", "\n\$0", $sql); $sql = trim($sql); // reduce spaces $sql = preg_replace('# {2,}#', ' ', $sql); $sql = wordwrap($sql, 100); $sql = htmlSpecialChars($sql); $sql = preg_replace("#\n{2,}#", "\n", $sql); // syntax highlight $sql = preg_replace_callback("#(/\\*.+?\\*/)|(\\*\\*.+?\\*\\*)|\\b($keywords1)\\b|\\b($keywords2)\\b#", array('dibi', 'highlightCallback'), $sql); echo '
', $sql, "\n"; } if ($return) { return ob_get_clean(); } else { ob_end_flush(); } } private static function highlightCallback($matches) { if (!empty($matches[1])) // comment return ''.$matches[1].''; if (!empty($matches[2])) // error return ''.$matches[2].''; if (!empty($matches[3])) // most important keywords return ''.$matches[3].''; if (!empty($matches[4])) // other keywords return ''.$matches[4].''; } } // class dibi