示例#1
0
 /**
  * @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) {