Example #1
0
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);
}
Example #2
0
File: tracer.php Project: JLuc/SPIP
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);
}
Example #3
0
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;
}