Your IP : 172.28.240.42


Current Path : /var/www/html/clients/amz.e-nk.ru/bitrix/modules/perfmon/admin/
Upload File :
Current File : /var/www/html/clients/amz.e-nk.ru/bitrix/modules/perfmon/admin/perfmon_explain.php

<?
define("ADMIN_MODULE_NAME", "perfmon");
define("PERFMON_STOP", true);
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/perfmon/include.php");
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/perfmon/prolog.php");

IncludeModuleLangFile(__FILE__);

$RIGHT = $APPLICATION->GetGroupRight("perfmon");
if($RIGHT=="D")
	$APPLICATION->AuthForm(GetMessage("ACCESS_DENIED"));

$APPLICATION->SetTitle(GetMessage("PERFMON_EXPLAIN_TITLE"));

$ID = IntVal($ID);

$sTableID = "tbl_perfmon_explain";

$lAdmin = new CAdminList($sTableID);

if($DBType == "mysql")
{
	$arHeader = array(
		array(
			"id" => "select_type",
			"content" => GetMessage("PERFMON_EXPLAIN_F_SELECT_TYPE"),
			"align" => "left",
			"default" => true,
		),
		array(
			"id" => "table",
			"content" => GetMessage("PERFMON_EXPLAIN_F_TABLE"),
			"align" => "left",
			"default" => true,
		),
		array(
			"id" => "type",
			"content" => GetMessage("PERFMON_EXPLAIN_F_TYPE"),
			"align" => "left",
			"default" => true,
		),
		array(
			"id" => "possible_keys",
			"content" => GetMessage("PERFMON_EXPLAIN_F_POSSIBLE_KEYS"),
			"align" => "left",
			"default" => true,
		),
		array(
			"id" => "key",
			"content" => GetMessage("PERFMON_EXPLAIN_F_KEY"),
			"align" => "left",
			"default" => true,
		),
		array(
			"id" => "key_len",
			"content" => GetMessage("PERFMON_EXPLAIN_F_KEY_LEN"),
			"align" => "right",
			"default" => true,
		),
		array(
			"id" => "ref",
			"content" => GetMessage("PERFMON_EXPLAIN_F_REF"),
			"align" => "left",
			"default" => true,
		),
		array(
			"id" => "rows",
			"content" => GetMessage("PERFMON_EXPLAIN_F_ROWS"),
			"align" => "right",
			"default" => true,
		),
		array(
			"id" => "Extra",
			"content" => GetMessage("PERFMON_EXPLAIN_F_EXTRA"),
			"align" => "left",
			"default" => true,
		),
	);
}
elseif($DBType == "oracle")
{
	$arHeader = array(
		array(
			"id" => "OPERATION",
			"content" => GetMessage("PERFMON_EXPLAIN_F_OPERATION"),
			"align" => "left",
			"default" => true,
		),
		array(
			"id" => "OBJECT_NAME",
			"content" => GetMessage("PERFMON_EXPLAIN_F_OBJECT_NAME"),
			"align" => "left",
			"default" => true,
		),
		array(
			"id" => "OBJECT_TYPE",
			"content" => GetMessage("PERFMON_EXPLAIN_F_OBJECT_TYPE"),
			"align" => "left",
			"default" => true,
		),
		array(
			"id" => "OPTIONS",
			"content" => GetMessage("PERFMON_EXPLAIN_F_EXTRA"),
			"align" => "left",
			"default" => true,
		),
/*		array(
			"id" => "ACCESS_PREDICATES",
			"content" => GetMessage("PERFMON_EXPLAIN_F_EXTRA"),
			"align" => "left",
			"default" => true,
		),*/
/*		array(
			"id" => "FILTER_PREDICATES",
			"content" => GetMessage("PERFMON_EXPLAIN_F_EXTRA"),
			"align" => "left",
			"default" => true,
		),*/
		array(
			"id" => "CARDINALITY",
			"content" => GetMessage("PERFMON_EXPLAIN_F_ROWS"),
			"align" => "right",
			"default" => true,
		),
		array(
			"id" => "COST",
			"content" => GetMessage("PERFMON_EXPLAIN_F_COST"),
			"align" => "right",
			"default" => true,
		),
	);
}
else
{
	$arHeader = array(
	);
}

$lAdmin->AddHeaders($arHeader);

$arPlan = false;
$cData = new CPerfomanceSQL;
$rsSQL = $cData->GetList(array("ID", "SQL_TEXT"), array("=ID" => $ID), array(), false);
$arSQL = $rsSQL->Fetch();
if($arSQL && preg_match("#^\s*SELECT\s+#i", $arSQL["SQL_TEXT"]))
{
	if($DBType == "mysql")
	{
		$rsData = $DB->Query("explain ".$arSQL["SQL_TEXT"]);
	}
	elseif($DBType == "oracle")
	{
		$rsData = $DB->Query("explain plan for ".$arSQL["SQL_TEXT"]);
		if($rsData)
		{
			$rsData = $DB->Query("select * from plan_table order by ID");
			$arPlan = $rsData->Fetch();
		}
	}
	elseif($DBType == "mssql")
	{
		$rsData = $DB->Query("SET SHOWPLAN_ALL ON;");
		$rsData = $DB->Query($arSQL["SQL_TEXT"]);
		$rsData = $DB->Query("SET SHOWPLAN_ALL OFF;");
	}
	else
	{
		$rsData = false;
	}
}
else
{
	$rsData = false;
}

if($rsData)
{
	$SQL_TEXT = CPerfomanceSQL::Format($arSQL["SQL_TEXT"]);
	$lAdmin->BeginPrologContent();
	if(class_exists("geshi"))
	{
		$obGeSHi = new GeSHi($SQL_TEXT, 'sql');
		echo $obGeSHi->parse_code();
	}
	else
	{
		echo str_replace(
			array(" ", "\n"),
			array(" &nbsp;", "<br>"),
			htmlspecialchars($SQL_TEXT)
		);
	}
	if($arPlan["OPTIMIZER"])
	{
		echo "<p>".GetMessage("PERFMON_EXPLAIN_F_OPTIMIZER").": ".$arPlan["OPTIMIZER"]."</p>";
		echo "<p>".GetMessage("PERFMON_EXPLAIN_F_COST").": ".$arPlan["POSITION"]."</p>";
	}
	$lAdmin->EndPrologContent();
}
else
{
	$rsData = new CDBResult;
	$rsData->InitFromArray(array());

	$lAdmin->BeginPrologContent();
	$message = new CAdminMessage(array("MESSAGE"=>GetMessage("PERFMON_EXPLAIN_SQL_ERROR"), "TYPE"=>"ERROR"));
	echo $message->Show();
	$lAdmin->EndPrologContent();

}

$Comment = "";

$rsData = new CAdminResult($rsData, $sTableID);
$rsData->NavStart();

while($arRes = $rsData->NavNext(true, "f_"))
{
	if(array_key_exists("DEPTH", $arRes))
		$arRes["OPERATION"] = str_repeat("&nbsp;&nbsp;", $arRes["DEPTH"]).$arRes["OPERATION"];
	if(array_key_exists("select_type", $arRes))
		$arRes["select_type"] = $arRes["id"]." ".$arRes["select_type"];
	$row =& $lAdmin->AddRow($f_ID, $arRes);
	if(array_key_exists("Comment", $arRes))
		$Comment .= $arRes["Comment"]."\n";
}

if($Comment)
{
	$lAdmin->BeginEpilogContent();
	$message = new CAdminMessage(array("MESSAGE"=>$Comment, "TYPE"=>"OK"));
	echo $message->Show();
	$lAdmin->EndEpilogContent();
}

$lAdmin->AddFooter(array());

$lAdmin->CheckListMode();

/***************************************************************************
				HTML form
****************************************************************************/
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_popup_admin.php");

$lAdmin->DisplayList();

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_popup_admin.php");
?>