';
Chris@76:
Chris@76: foreach ($_SESSION['debug'] as $q => $query_data)
Chris@76: {
Chris@76: // Fix the indentation....
Chris@76: $query_data['q'] = ltrim(str_replace("\r", '', $query_data['q']), "\n");
Chris@76: $query = explode("\n", $query_data['q']);
Chris@76: $min_indent = 0;
Chris@76: foreach ($query as $line)
Chris@76: {
Chris@76: preg_match('/^(\t*)/', $line, $temp);
Chris@76: if (strlen($temp[0]) < $min_indent || $min_indent == 0)
Chris@76: $min_indent = strlen($temp[0]);
Chris@76: }
Chris@76: foreach ($query as $l => $dummy)
Chris@76: $query[$l] = substr($dummy, $min_indent);
Chris@76: $query_data['q'] = implode("\n", $query);
Chris@76:
Chris@76: // Make the filenames look a bit better.
Chris@76: if (isset($query_data['f']))
Chris@76: $query_data['f'] = preg_replace('~^' . preg_quote($boarddir, '~') . '~', '...', $query_data['f']);
Chris@76:
Chris@76: $is_select_query = substr(trim($query_data['q']), 0, 6) == 'SELECT';
Chris@76: if ($is_select_query)
Chris@76: $select = $query_data['q'];
Chris@76: elseif (preg_match('~^INSERT(?: IGNORE)? INTO \w+(?:\s+\([^)]+\))?\s+(SELECT .+)$~s', trim($query_data['q']), $matches) != 0)
Chris@76: {
Chris@76: $is_select_query = true;
Chris@76: $select = $matches[1];
Chris@76: }
Chris@76: elseif (preg_match('~^CREATE TEMPORARY TABLE .+?(SELECT .+)$~s', trim($query_data['q']), $matches) != 0)
Chris@76: {
Chris@76: $is_select_query = true;
Chris@76: $select = $matches[1];
Chris@76: }
Chris@76: // Temporary tables created in earlier queries are not explainable.
Chris@76: if ($is_select_query)
Chris@76: {
Chris@76: foreach (array('log_topics_unread', 'topics_posted_in', 'tmp_log_search_topics', 'tmp_log_search_messages') as $tmp)
Chris@76: if (strpos($select, $tmp) !== false)
Chris@76: {
Chris@76: $is_select_query = false;
Chris@76: break;
Chris@76: }
Chris@76: }
Chris@76:
Chris@76: echo '
Chris@76:
Chris@76:
Chris@76: ', nl2br(str_replace("\t", ' ', htmlspecialchars($query_data['q']))), '
Chris@76: ';
Chris@76:
Chris@76: if (!empty($query_data['f']) && !empty($query_data['l']))
Chris@76: echo sprintf($txt['debug_query_in_line'], $query_data['f'], $query_data['l']);
Chris@76:
Chris@76: if (isset($query_data['s'], $query_data['t']) && isset($txt['debug_query_which_took_at']))
Chris@76: echo sprintf($txt['debug_query_which_took_at'], round($query_data['t'], 8), round($query_data['s'], 8));
Chris@76: else
Chris@76: echo sprintf($txt['debug_query_which_took'], round($query_data['t'], 8));
Chris@76:
Chris@76: echo '
Chris@76:
';
Chris@76:
Chris@76: // Explain the query.
Chris@76: if ($query_id == $q && $is_select_query)
Chris@76: {
Chris@76: $result = $smcFunc['db_query']('', '
Chris@76: EXPLAIN ' . $select,
Chris@76: array(
Chris@76: )
Chris@76: );
Chris@76: if ($result === false)
Chris@76: {
Chris@76: echo '
Chris@76:
Chris@76: ', $smcFunc['db_error']($db_connection), ' |
Chris@76:
';
Chris@76: continue;
Chris@76: }
Chris@76:
Chris@76: echo '
Chris@76:
';
Chris@76:
Chris@76: $row = $smcFunc['db_fetch_assoc']($result);
Chris@76:
Chris@76: echo '
Chris@76:
Chris@76: ' . implode(' |
Chris@76: ', array_keys($row)) . ' |
Chris@76:
';
Chris@76:
Chris@76: $smcFunc['db_data_seek']($result, 0);
Chris@76: while ($row = $smcFunc['db_fetch_assoc']($result))
Chris@76: {
Chris@76: echo '
Chris@76:
Chris@76: ' . implode(' |
Chris@76: ', $row) . ' |
Chris@76:
';
Chris@76: }
Chris@76: $smcFunc['db_free_result']($result);
Chris@76:
Chris@76: echo '
Chris@76:
';
Chris@76: }
Chris@76: }
Chris@76:
Chris@76: echo '
Chris@76:
Chris@76:
Chris@76: ';
Chris@76:
Chris@76: obExit(false);
Chris@76: }
Chris@76:
Chris@76: ?>