function PerformanceTestTrait::logQuery

Same name and namespace in other branches
  1. 11.x core/tests/Drupal/Tests/PerformanceTestTrait.php \Drupal\Tests\PerformanceTestTrait::logQuery()

Logs a query in the performance data.

Parameters

\Drupal\Tests\PerformanceData $performance_data: The performance data object to log the query on.

string $query: The raw query.

array $args: The query arguments.

1 call to PerformanceTestTrait::logQuery()
PerformanceTestTrait::collectPerformanceData in core/tests/Drupal/Tests/PerformanceTestTrait.php
Executes a callable and collects performance data.

File

core/tests/Drupal/Tests/PerformanceTestTrait.php, line 187

Class

PerformanceTestTrait
Provides various methods to aid in collecting performance data during tests.

Namespace

Drupal\Tests

Code

protected static function logQuery(PerformanceData $performance_data, string $query, array $args) : void {
  // Make queries with random variables invariable.
  if (str_starts_with($query, 'INSERT INTO "semaphore"')) {
    $args[':db_insert_placeholder_1'] = 'LOCK_ID';
    $args[':db_insert_placeholder_2'] = 'EXPIRE';
  }
  elseif (str_starts_with($query, 'DELETE FROM "semaphore"')) {
    $args[':db_condition_placeholder_1'] = 'LOCK_ID';
  }
  elseif (str_starts_with($query, 'SELECT "base_table"."uid" AS "uid", "base_table"."uid" AS "base_table_uid" FROM "users"')) {
    $args[':db_condition_placeholder_0'] = 'ACCOUNT_NAME';
  }
  elseif (str_starts_with($query, 'SELECT COUNT(*) AS "expression" FROM (SELECT 1 AS "expression" FROM "flood" "f"')) {
    $args[':db_condition_placeholder_1'] = 'CLIENT_IP';
    $args[':db_condition_placeholder_2'] = 'TIMESTAMP';
  }
  elseif (str_starts_with($query, 'UPDATE "users_field_data" SET "login"')) {
    $args[':db_update_placeholder_0'] = 'TIMESTAMP';
  }
  elseif (str_starts_with($query, 'INSERT INTO "sessions"')) {
    $args[':db_insert_placeholder_0'] = 'SESSION_ID';
    $args[':db_insert_placeholder_2'] = 'CLIENT_IP';
    $args[':db_insert_placeholder_3'] = 'SESSION_DATA';
    $args[':db_insert_placeholder_4'] = 'TIMESTAMP';
  }
  elseif (str_starts_with($query, 'SELECT "session" FROM "sessions"')) {
    $args[':sid'] = 'SESSION_ID';
  }
  elseif (str_starts_with($query, 'SELECT 1 AS "expression" FROM "sessions"')) {
    $args[':db_condition_placeholder_0'] = 'SESSION_ID';
  }
  elseif (str_starts_with($query, 'DELETE FROM "sessions"')) {
    $args[':db_condition_placeholder_0'] = 'TIMESTAMP';
  }
  elseif (str_starts_with($query, 'INSERT INTO "watchdog"')) {
    $args[':db_insert_placeholder_3'] = 'WATCHDOG_DATA';
    $args[':db_insert_placeholder_6'] = 'LOCATION';
    $args[':db_insert_placeholder_7'] = 'REFERER';
    $args[':db_insert_placeholder_8'] = 'CLIENT_IP';
    $args[':db_insert_placeholder_9'] = 'TIMESTAMP';
  }
  elseif (str_starts_with($query, 'SELECT "name", "route", "fit" FROM "router"')) {
    if (preg_match('@/sites/simpletest/(\\d{8})/files/css/(.*)@', $args[':patterns__0'], $matches)) {
      $search = [
        $matches[1],
        $matches[2],
      ];
      $replace = [
        'TEST_ID',
        'CSS_FILE',
      ];
      foreach ($args as $name => $arg) {
        if (!is_string($arg)) {
          continue;
        }
        $args[$name] = str_replace($search, $replace, $arg);
      }
    }
  }
  elseif (str_starts_with($query, 'SELECT "base_table"."id" AS "id", "base_table"."path" AS "path", "base_table"."alias" AS "alias", "base_table"."langcode" AS "langcode" FROM "path_alias" "base_table"')) {
    if (str_contains($args[':db_condition_placeholder_1'], 'files/css')) {
      $args[':db_condition_placeholder_1'] = 'CSS_FILE';
    }
  }
  elseif (str_starts_with($query, 'SELECT "name", "value" FROM "key_value_expire" WHERE "expire" >')) {
    $args[':now'] = 'NOW';
    $args[':keys__0'] = 'KEY';
  }
  // Inline query arguments and log the query.
  $query = str_replace(array_keys($args), array_values(static::quoteQueryArgs($args)), $query);
  $performance_data->logQuery($query);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.