/** * @param string $table * @param array $columns * @param CPerfQuery $q * @return boolean */ public static function GatherExpressStat($table, $columns, $q) { $arColumns = explode(",", $columns); if (count($arColumns) != 1) { return false; } $column = trim($arColumns[0], "`"); $value = trim($q->find_value($table, $arColumns[0]), "'"); if ($value == "") { return false; } $tab = new CPerfomanceTable(); $tab->Init($table); if ($tab->IsExists()) { $arTableColumns = CPerfQueryStat::GetTableColumns($table); if (!array_key_exists($column, $arTableColumns)) { return false; } //May be it is worth to ban if ($arTableColumns[$column]["Type"] === "char(1)") { if (is_array(CPerfQueryStat::_get_stat($table, $arColumns[0]))) { return true; } if (CPerfQueryStat::_gather_stat($table, $arColumns[0], $value, 10 * 1024 * 1024)) { return true; } } return false; } else { return false; } }
$sql = str_replace($arSuggest["TABLE_ALIAS"] . "." . $column_name, "<b>" . $arSuggest["TABLE_ALIAS"] . "." . $column_name . "</b>", $sql); } $arSuggest["FORMATTED_SQL_TEXT"] = $sql; $arColumns = explode(",", $arSuggest["COLUMN_NAMES"]); $arTableStat = CPerfQueryStat::GatherTableStat($arSuggest["TABLE_NAME"]); $arIndexes = CPerfomanceTable::GetIndexes($arSuggest["TABLE_NAME"]); $arQueries = array(); $rsQueries = CPerfomanceSQL::GetList(array("ID", "SQL_TEXT"), array("=SUGGEST_ID" => $ID), array("ID" => "ASC"), false, array("nTopCount" => 10)); while ($arQuery = $rsQueries->Fetch()) { $arQuery["STAT"] = array(); $arQuery["WHERE"] = array(); $arQuery["JOIN"] = array(); $q = new CPerfQuery(); if ($q->parse($q->transform2select($arQuery["SQL_TEXT"]))) { foreach ($arColumns as $column_name) { $arQuery["WHERE"][$column_name] = $q->find_value($arSuggest["TABLE_NAME"], $column_name); if ($arQuery["WHERE"][$column_name] == "") { $arQuery["JOIN"][$column_name] = $q->find_join($arSuggest["TABLE_NAME"], $column_name); } else { $arQuery["JOIN"][$column_name] = ""; } } } $sql = CPerfomanceSQL::Format($arQuery["SQL_TEXT"]); $sql = htmlspecialcharsEx($sql); $sql = preg_replace("/(" . preg_quote($arSuggest["TABLE_NAME"]) . "\\s+(?i:as\\s+)*" . $arSuggest["TABLE_ALIAS"] . ")\\s+/", "<b>\\1</b> ", $sql); foreach (explode(",", $arSuggest["COLUMN_NAMES"]) as $column_name) { $sql = str_replace($arSuggest["TABLE_ALIAS"] . "." . $column_name, "<b>" . $arSuggest["TABLE_ALIAS"] . "." . $column_name . "</b>", $sql); } $arQuery["FORMATTED_SQL_TEXT"] = $sql; foreach ($arColumns as $column_name) {