Skip to content

Commit

Permalink
Merge #18280 - Ref #18249 - Don't parse SQL if no tracking is in prog…
Browse files Browse the repository at this point in the history
…ress

Pull-request: #18280
Ref: #18249

Signed-off-by: William Desportes <williamdes@wdes.fr>
  • Loading branch information
williamdes committed Mar 21, 2023
2 parents 9086e1f + 8550db2 commit ac52485
Showing 1 changed file with 26 additions and 7 deletions.
33 changes: 26 additions & 7 deletions libraries/classes/Tracker.php
Expand Up @@ -7,6 +7,7 @@

namespace PhpMyAdmin;

use PhpMyAdmin\ConfigStorage\Features\TrackingFeature;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Plugins\Export\ExportSql;
use PhpMyAdmin\SqlParser\Parser;
Expand Down Expand Up @@ -836,8 +837,6 @@ public static function handleQuery($query): void
{
global $dbi;

$relation = new Relation($dbi);

// If query is marked as untouchable, leave
if (mb_strstr($query, '/*NOTRACK*/')) {
return;
Expand All @@ -855,6 +854,16 @@ public static function handleQuery($query): void
return;
}

$relation = new Relation($GLOBALS['dbi']);
$trackingFeature = $relation->getRelationParameters()->trackingFeature;
if ($trackingFeature === null) {
return;
}

if (! self::isAnyTrackingInProgress($GLOBALS['dbi'], $trackingFeature, $dbname)) {
return;
}

// Get some information about query
$result = self::parseQuery($query);

Expand Down Expand Up @@ -917,11 +926,6 @@ public static function handleQuery($query): void
// Add log information
$query = self::getLogComment() . $query;

$trackingFeature = $relation->getRelationParameters()->trackingFeature;
if ($trackingFeature === null) {
return;
}

// Mark it as untouchable
$sqlQuery = sprintf(
'/*NOTRACK*/' . "\n" . 'UPDATE %s.%s SET %s = CONCAT(%s, \'' . "\n" . '%s\'), `date_updated` = \'%s\'',
Expand Down Expand Up @@ -954,4 +958,19 @@ public static function handleQuery($query): void

$dbi->queryAsControlUser($sqlQuery);
}

private static function isAnyTrackingInProgress(
DatabaseInterface $dbi,
TrackingFeature $trackingFeature,
string $dbname
): bool {
$sqlQuery = sprintf(
'/*NOTRACK*/ SELECT 1 FROM %s.%s WHERE tracking_active = 1 AND db_name = %s LIMIT 1',
Util::backquote($trackingFeature->database),
Util::backquote($trackingFeature->tracking),
"'" . $dbi->escapeString($dbname, DatabaseInterface::CONNECT_CONTROL) . "'"
);

return $dbi->queryAsControlUser($sqlQuery)->fetchValue() !== false;
}
}

0 comments on commit ac52485

Please sign in to comment.