Merge pull request #20088 from liviuconcioiu/skip

Add Skip Explain SQL button for queries with FORMAT
This commit is contained in:
Maurício Meneghini Fauth 2026-02-25 21:41:35 -03:00 committed by GitHub
commit 5df8f55cb4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -485,6 +485,10 @@ class Generator
$isSelect = preg_match('@^SELECT[[:space:]]+@i', $sqlQuery) === 1;
if (! empty($config->settings['SQLQuery']['Explain']) && ! $queryTooBig) {
$explainParams = $urlParams;
$explainRegex = '@^EXPLAIN[[:space:]]+(?:ANALYZE[[:space:]]+)?'
. '(?:FORMAT=(?:JSON|TREE|TRADITIONAL)[[:space:]]+)?';
$analyzeRegex = '@^ANALYZE[[:space:]]+(?:FORMAT=(?:JSON|TRADITIONAL)[[:space:]]+)?';
if ($isSelect) {
$explainParams['sql_query'] = 'EXPLAIN ' . $sqlQuery;
$explainLink = '<div class="col-auto">'
@ -494,8 +498,8 @@ class Generator
__('Explain SQL'),
['class' => 'btn btn-link'],
) . '</div>' . "\n";
} elseif (preg_match('@^EXPLAIN[[:space:]]+SELECT[[:space:]]+@i', $sqlQuery) === 1) {
$explainParams['sql_query'] = mb_substr($sqlQuery, 8);
} elseif (preg_match($explainRegex . 'SELECT[[:space:]]+@i', $sqlQuery) === 1) {
$explainParams['sql_query'] = preg_replace($explainRegex . '@i', '', $sqlQuery, 1);
$explainLink = '<div class="col-auto">'
. self::linkOrButton(
Url::getFromRoute('/import', $explainParams),
@ -503,6 +507,16 @@ class Generator
__('Skip Explain SQL'),
['class' => 'btn btn-link'],
) . '</div>' . "\n";
} elseif (preg_match($analyzeRegex . 'SELECT[[:space:]]+@i', $sqlQuery) === 1) {
$explainParams['sql_query'] = preg_replace($analyzeRegex . '@i', '', $sqlQuery, 1);
$explainLink = '<div class="col-auto">'
. self::linkOrButton(
Url::getFromRoute('/import', $explainParams),
null,
__('Skip Analyze SQL'),
['class' => 'btn btn-link'],
) . '</div>' . "\n";
}
}