function trace_query_chrono($m1, $m2, $query, $result, $serveur='') { static $tt = 0, $nb=0; global $tableau_des_temps; $x = _request('var_mode_objet'); if (isset($GLOBALS['debug']['aucasou'])) { list(, $boucle, $serveur, $contexte) = $GLOBALS['debug']['aucasou']; if ($x AND !preg_match("/$boucle\$/", $x)) return; if ($serveur) $boucle .= " ($serveur)"; $boucle = "<b>$boucle</b>"; } else { if ($x) return; $boucle = $contexte = ''; } list($usec, $sec) = explode(" ", $m1); list($usec2, $sec2) = explode(" ", $m2); $dt = $sec2 + $usec2 - $sec - $usec; $tt += $dt; $nb++; $q = preg_replace('/([a-z)`])\s+([A-Z])/', "$1\n<br />$2",htmlentities($query)); $e = sql_explain($query, $serveur); $r = str_replace('Resource id ','',(is_object($result)?get_class($result):$result)); $tableau_des_temps[] = array($dt, $nb, $boucle, $q, $e, $r, $contexte); }
function trace_query_chrono($m1, $m2, $query, $result, $serveur = '') { include_spip('inc/filtres_mini'); static $tt = 0, $nb = 0; global $tableau_des_temps; $x = _request('var_mode_objet'); if (isset($GLOBALS['debug']['aucasou'])) { list(, $boucle, $serveur, $contexte) = $GLOBALS['debug']['aucasou']; if ($x and !preg_match("/{$boucle}\$/", $x)) { return; } if ($serveur) { $boucle .= " ({$serveur})"; } $boucle = "<b>{$boucle}</b>"; } else { if ($x) { return; } $boucle = $contexte = ''; } list($usec, $sec) = explode(" ", $m1); list($usec2, $sec2) = explode(" ", $m2); $dt = $sec2 + $usec2 - $sec - $usec; $tt += $dt; $nb++; $q = preg_replace('/([a-z)`])\\s+([A-Z])/', "\$1\n<br />\$2", spip_htmlentities($query)); $e = sql_explain($query, $serveur); $r = str_replace('Resource id ', '', is_object($result) ? get_class($result) : $result); $tableau_des_temps[] = array($dt, $nb, $boucle, $q, $e, $r, $contexte); }
function db_select($table, $fields, $sql_where, $order, $limit, $vars = array(), $optional = array()) { $fields = (array) $fields; $sql_where = (array) $sql_where; if (!is_array($limit)) { if ($limit != "") { $limit = array($limit); } else { $limit = array(); } } $rows = array(); if (!empty($optional["handler"])) { $handler = "lib_" . $optional["handler"]; $folder = $vars["folder"]; $vars = sys_remove_handler($vars); $rows = call_user_func(array($handler, "select"), $vars["folder"], $fields, $sql_where, $order, $limit, $vars, $vars["mfolder"]); if (count($rows) > 0 and in_array("id", $fields)) { foreach (array_keys($rows) as $key) { $rows[$key]["folder"] = $folder; $rows[$key]["id"] = $handler . ":" . $vars["mfolder"] . "/" . $rows[$key]["id"]; } } return $rows; } $groupby = ""; $where = ""; if (count($sql_where) > 0) { $where = str_replace("and 1=1", "", " where " . implode(" and ", $sql_where)); } if ($order != "") { $order = " order by " . $order; } if (!empty($optional["groupby"])) { $groupby = " group by " . $optional["groupby"]; } if (!empty($optional["custom_name"])) { $table = sql_translate(sql_concat($optional["custom_name"])); } $sql = "select " . implode(",", $fields) . " from " . $table . $where . sql_fieldname($order . $groupby, true); if (!empty($optional["default_sql"]) and $optional["default_sql"] != "no_select") { $sql = str_replace("@table@", $table, sql_translate($optional["default_sql"])); } if (is_array($vars) and count($vars) > 0) { foreach (array_keys($vars) as $key) { $sql = str_replace("@" . $key . "@", sys_correct_quote($vars[$key]), $sql); } } if (!empty($optional["sqlvarsnoquote"]) and count($optional["sqlvarsnoquote"]) > 0) { foreach ($optional["sqlvarsnoquote"] as $key => $val) { $sql = str_replace("@" . $key . "@", $val, $sql); } } $sql = str_replace("1=1 and ", "", $sql); if (count($limit) > 0) { $sql = sql_limit($sql, isset($limit[1]) ? $limit[0] : 0, isset($limit[1]) ? $limit[1] : $limit[0]); } if ($sql != "none") { $time_start = sys_get_microtime(); if (($rows = sql_fetch($sql)) === false) { $msg = sql_error(); if (DEBUG) { debug_sql("ERROR " . $sql, $msg); } sys_log_message_log("db-fail", $sql . " " . $msg, sys_backtrace()); return "error"; } $time = number_format(sys_get_microtime() - $time_start, 4); if ($time > DB_SLOW) { $slow_log = var_export(sql_explain($sql), true); sys_log_message_log("db-slow", sprintf("{t}%s secs{/t}", $time) . " " . $sql, sys_backtrace() . " " . $slow_log); } sys::$db_queries[] = array($sql, $time); if (in_array("pid", $fields) and count($rows) > 0) { $rows = modify::threadsort($rows); } } if (!empty($optional["default_sql"]) and $optional["default_sql"] != "no_select") { foreach ($rows as $key => $row) { if (!sys_select_where($row, $sql_where, $vars)) { unset($rows[$key]); } } return sys_select($rows, substr($order, 10), $limit, $fields); } if ($limit == array("1") and count($rows) > 1) { $rows = array(array("count" => count($rows))); } if (count($limit) > 0) { if (count($limit) == 2 and count($rows) > $limit[1]) { $rows = array_slice($rows, $limit[0], $limit[1]); } if (count($limit) == 1 and count($rows) > $limit[0]) { $rows = array_slice($rows, 0, $limit[0]); } } return $rows; }