function DatabaseTablePrefixTestCase::testSchemaDotTablePrefixes
File
-
modules/
simpletest/ tests/ database_test.test, line 4644
Class
- DatabaseTablePrefixTestCase
- Test table prefix handling.
Code
public function testSchemaDotTablePrefixes() {
// Get a copy of the default connection options.
$db = Database::getConnection('default', 'default');
$connection_options = $db->getConnectionOptions();
if ($connection_options['driver'] === 'sqlite') {
// In SQLite simpletest's prefixed db tables exist in their own schema
// (e.g. simpletest124904.system), so we cannot test the schema.table
// prefix syntax here.
$this->assert(TRUE, 'Skipping schema.table prefixed tables test for SQLite.');
return;
}
$db_name = $connection_options['database'];
if ($connection_options['driver'] === 'pgsql') {
// database.scheme.table for PostgreSQL
// @see https://www.postgresql.org/docs/14/ddl-schemas.html
$db_name .= '.public';
}
// This prefix is usually something like simpletest12345
$test_prefix = $connection_options['prefix']['default'];
// Set up a new connection with table prefixes in the form "schema.table"
$prefixed = $connection_options;
$prefixed['prefix'] = array(
'default' => $test_prefix,
'users' => $db_name . '.' . $test_prefix,
'role' => $db_name . '.' . $test_prefix,
);
Database::addConnectionInfo('default', 'prefixed', $prefixed);
// Test that the prefixed database connection can query the prefixed tables.
$num_users_prefixed = Database::getConnection('prefixed', 'default')->query('SELECT COUNT(1) FROM {users}')
->fetchField();
$this->assertTrue((int) $num_users_prefixed > 0, 'Successfully queried the users table using a schema.table prefix');
$num_users_default = Database::getConnection('default', 'default')->query('SELECT COUNT(1) FROM {users}')
->fetchField();
$this->assertEqual($num_users_default, $num_users_prefixed, 'Verified results of query using a connection with schema.table prefixed tables');
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.