class BasicSyntaxTest

Tests how the current database driver interprets the SQL syntax.

In order to ensure consistent SQL handling throughout Drupal across multiple kinds of database systems, we test that the database system interprets SQL syntax in an expected fashion.

Hierarchy

Expanded class hierarchy of BasicSyntaxTest

File

drupal/core/modules/system/lib/Drupal/system/Tests/Database/BasicSyntaxTest.php, line 17
Definition of Drupal\system\Tests\Database\BasicSyntaxTest.

Namespace

Drupal\system\Tests\Database
View source
class BasicSyntaxTest extends DatabaseTestBase {
  public static function getInfo() {
    return array(
      'name' => 'Basic SQL syntax tests',
      'description' => 'Test SQL syntax interpretation.',
      'group' => 'Database',
    );
  }

  /**
   * Tests string concatenation.
   */
  function testBasicConcat() {
    $result = db_query('SELECT CONCAT(:a1, CONCAT(:a2, CONCAT(:a3, CONCAT(:a4, :a5))))', array(
      ':a1' => 'This',
      ':a2' => ' ',
      ':a3' => 'is',
      ':a4' => ' a ',
      ':a5' => 'test.',
    ));
    $this
      ->assertIdentical($result
      ->fetchField(), 'This is a test.', 'Basic CONCAT works.');
  }

  /**
   * Tests string concatenation with field values.
   */
  function testFieldConcat() {
    $result = db_query('SELECT CONCAT(:a1, CONCAT(name, CONCAT(:a2, CONCAT(age, :a3)))) FROM {test} WHERE age = :age', array(
      ':a1' => 'The age of ',
      ':a2' => ' is ',
      ':a3' => '.',
      ':age' => 25,
    ));
    $this
      ->assertIdentical($result
      ->fetchField(), 'The age of John is 25.', 'Field CONCAT works.');
  }

  /**
   * Tests escaping of LIKE wildcards.
   */
  function testLikeEscape() {
    db_insert('test')
      ->fields(array(
      'name' => 'Ring_',
    ))
      ->execute();

    // Match both "Ringo" and "Ring_".
    $num_matches = db_select('test', 't')
      ->condition('name', 'Ring_', 'LIKE')
      ->countQuery()
      ->execute()
      ->fetchField();
    $this
      ->assertIdentical($num_matches, '2', 'Found 2 records.');

    // Match only "Ring_" using a LIKE expression with no wildcards.
    $num_matches = db_select('test', 't')
      ->condition('name', db_like('Ring_'), 'LIKE')
      ->countQuery()
      ->execute()
      ->fetchField();
    $this
      ->assertIdentical($num_matches, '1', 'Found 1 record.');
  }

  /**
   * Tests a LIKE query containing a backslash.
   */
  function testLikeBackslash() {
    db_insert('test')
      ->fields(array(
      'name',
    ))
      ->values(array(
      'name' => 'abcde\\f',
    ))
      ->values(array(
      'name' => 'abc%\\_',
    ))
      ->execute();

    // Match both rows using a LIKE expression with two wildcards and a verbatim
    // backslash.
    $num_matches = db_select('test', 't')
      ->condition('name', 'abc%\\\\_', 'LIKE')
      ->countQuery()
      ->execute()
      ->fetchField();
    $this
      ->assertIdentical($num_matches, '2', 'Found 2 records.');

    // Match only the former using a LIKE expression with no wildcards.
    $num_matches = db_select('test', 't')
      ->condition('name', db_like('abc%\\_'), 'LIKE')
      ->countQuery()
      ->execute()
      ->fetchField();
    $this
      ->assertIdentical($num_matches, '1', 'Found 1 record.');
  }

}

Members

Name Modifiers Type Descriptionsort descending Overrides
BasicSyntaxTest::getInfo public static function
DrupalUnitTestBase::$moduleFiles private property
DrupalUnitTestBase::$themeFiles private property
DrupalUnitTestBase::$themeData private property
UnitTestBase::$configDirectories protected property
TestBase::$setupDatabasePrefix protected property
TestBase::$setupEnvironment protected property
DrupalUnitTestBase::$keyValueFactory protected property A KeyValueMemoryFactory instance to use when building the container.
TestBase::$assertions protected property Assertions thrown in that test case.
TestBase::settingsSet protected function Changes in memory settings.
TestBase::changeDatabasePrefix protected function Changes the database connection to the prefixed one.
TestBase::assertFalse protected function Check to see if a value is false (an empty string, 0, NULL, or FALSE).
TestBase::assertTrue protected function Check to see if a value is not false (not an empty string, 0, NULL, or FALSE).
TestBase::assertNotNull protected function Check to see if a value is not NULL.
TestBase::assertNull protected function Check to see if a value is NULL.
TestBase::assertEqual protected function Check to see if two values are equal.
TestBase::assertIdentical protected function Check to see if two values are identical.
TestBase::assertNotEqual protected function Check to see if two values are not equal.
TestBase::assertNotIdentical protected function Check to see if two values are not identical.
TestBase::checkRequirements protected function Checks the matching requirements for Test. 4
TestBase::assertIdenticalObject protected function Checks to see if two objects are identical.
TestBase::generatePermutations public static function Converts a list of possible parameters into a stack of permutations.
TestBase::copyConfig public function Copies configuration objects from source storage to target storage.
TestBase::prepareConfigDirectories protected function Create and set new configuration directories. 1
TestBase::$results public property Current results of this test case.
TestBase::getAssertionCall protected function Cycles through backtrace until the first non-assertion method is found.
TestBase::deleteAssert public static function Delete an assertion record by message ID.
DrupalUnitTestBase::tearDown protected function Deletes created files, database tables, and reverts all environment changes. Overrides TestBase::tearDown 2
TestBase::$verboseDirectory protected property Directory where verbose output files are put.
DrupalUnitTestBase::disableModules protected function Disables modules for this test.
DrupalUnitTestBase::enableModules protected function Enables modules for this test.
TestBase::filePreDeleteCallback public static function Ensures test files are deletable within file_unmanaged_delete_recursive().
TestBase::fail protected function Fire an assertion that is always negative.
TestBase::pass protected function Fire an assertion that is always positive.
TestBase::error protected function Fire an error assertion. 1
TestBase::$setup protected property Flag to indicate whether the test has been set up.
TestBase::prepareDatabasePrefix protected function Generates a database prefix for running tests.
TestBase::randomObject public static function Generates a random PHP object.
TestBase::randomName public static function Generates a random string containing letters and numbers.
TestBase::randomString public static function Generates a random string of ASCII characters of codes 32 to 126.
TestBase::errorHandler public function Handle errors during test runs.
TestBase::exceptionHandler protected function Handle exceptions.
TestBase::$verboseId protected property Incrementing identifier for verbose output filenames.
DrupalUnitTestBase::installSchema protected function Installs a specific table from a module schema definition.
DrupalUnitTestBase::installConfig protected function Installs default configuration for a given list of modules.
TestBase::assert protected function Internal helper: stores the assert.
TestBase::verbose protected function Logs verbose message in a text file.
DatabaseTestBase::$modules public static property Modules to enable. Overrides DrupalUnitTestBase::$modules 3
DrupalUnitTestBase::__construct function Overrides \Drupal\simpletest\UnitTestBase::__construct(). Overrides UnitTestBase::__construct
TestBase::prepareEnvironment protected function Prepares the current environment for running the test.
TestBase::rebuildContainer protected function Rebuild drupal_container(). 1
TestBase::configImporter public function Returns a ConfigImporter object to import test importing of configuration. 1
TestBase::getDatabaseConnection public static function Returns the database connection to the site running Simpletest.
TestBase::run public function Run all tests in this class.
TestBase::$verboseClassName protected property Safe class name for use in verbose output filenames.
DatabaseTestBase::setUp function Sets up Drupal unit test environment. Overrides DrupalUnitTestBase::setUp
DatabaseTestBase::addSampleData static function Sets up our sample data.
DatabaseTestBase::ensureSampleDataNull function Sets up tables for NULL handling.
DrupalUnitTestBase::containerBuild public function Sets up the base service container for this test. 1
TestBase::insertAssert public static function Store an assertion from outside the testing context.
BasicSyntaxTest::testLikeBackslash function Tests a LIKE query containing a backslash.
BasicSyntaxTest::testLikeEscape function Tests escaping of LIKE wildcards.
BasicSyntaxTest::testFieldConcat function Tests string concatenation with field values.
BasicSyntaxTest::testBasicConcat function Tests string concatenation.
TestBase::$configImporter protected property The config importer that can used in a test. 1
TestBase::$databasePrefix protected property The database prefix of this test run.
TestBase::$container protected property The dependency injection container used in the test. 1
TestBase::$originalPrefix protected property The original database prefix when running inside Simpletest.
TestBase::$originalFileDirectory protected property The original file directory, before it was changed for testing purposes.
TestBase::$public_files_directory protected property The public file directory for the test environment.
TestBase::$originalSettings protected property The settings array.
TestBase::$testId protected property The test run ID.
TestBase::$skipClasses protected property This class is skipped when looking for the source of an assertion.
TestBase::$timeLimit protected property Time limit for the test.
TestBase::$verbose protected property TRUE if verbose debugging is enabled.
TestBase::$verboseDirectoryUrl protected property URL to the verbose output file directory.
TestBase::$dieOnFail public property Whether to die in case any test assertion fails.