Loading core/modules/locale/locale.install +62 −0 Original line number Diff line number Diff line Loading @@ -190,6 +190,7 @@ function locale_schema() { ], 'indexes' => [ 'string_type' => ['sid', 'type'], 'type_name' => ['type', 'name'], ], ]; Loading Loading @@ -347,3 +348,64 @@ function locale_update_10100(&$sandbox = NULL) { $connection->schema()->changeField('locale_file', 'last_checked', 'last_checked', $new); } } /** * Add an index on locales_location on type and name. */ function locale_update_10300() { $spec = []; $spec['locales_location'] = [ 'description' => 'Location information for source strings.', 'fields' => [ 'lid' => [ 'type' => 'serial', 'not null' => TRUE, 'description' => 'Unique identifier of this location.', ], 'sid' => [ 'type' => 'int', 'not null' => TRUE, 'description' => 'Unique identifier of this string.', ], 'type' => [ 'type' => 'varchar_ascii', 'length' => 50, 'not null' => TRUE, 'default' => '', 'description' => 'The location type (file, config, path, etc).', ], 'name' => [ 'type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => '', 'description' => 'Type dependent location information (file name, path, etc).', ], 'version' => [ 'type' => 'varchar_ascii', 'length' => 20, 'not null' => TRUE, 'default' => 'none', 'description' => 'Version of Drupal where the location was found.', ], ], 'primary key' => ['lid'], 'foreign keys' => [ 'locales_source' => [ 'table' => 'locales_source', 'columns' => ['sid' => 'lid'], ], ], 'indexes' => [ 'string_type' => ['sid', 'type'], 'type_name' => ['type', 'name'], ], ]; $schema = \Drupal::database()->schema(); // If the update has been manually applied, recreate the index using the // current schema. if ($schema->indexExists('locales_location', 'type_name')) { $schema->dropIndex('locales_location', 'type_name'); } $schema->addIndex('locales_location', 'type_name', ['type', 'name'], $spec['locales_location']); } core/modules/locale/tests/src/Functional/LocalesLocationAddIndexUpdateTest.php 0 → 100644 +114 −0 Original line number Diff line number Diff line <?php declare(strict_types=1); namespace Drupal\Tests\locale\Functional; use Drupal\FunctionalTests\Update\UpdatePathTestBase; /** * Tests Locale update functions. * * @group locale */ class LocalesLocationAddIndexUpdateTest extends UpdatePathTestBase { /** * {@inheritdoc} */ protected $defaultTheme = 'stark'; /** * {@inheritdoc} */ protected function setDatabaseDumpFiles() { $this->databaseDumpFiles[] = $this->root . '/core/modules/system/tests/fixtures/update/drupal-10.3.0.filled.standard.php.gz'; } /** * Tests locale_update_10300(). * * @see locale_update_10300 */ public function testIndex(): void { $this->assertFalse(\Drupal::database() ->schema() ->indexExists('locales_location', 'type_name')); // Run updates and test them. $this->runUpdates(); $this->assertTrue(\Drupal::database() ->schema() ->indexExists('locales_location', 'type_name')); } /** * Tests locale_update_10300(). * * @see locale_update_10300 */ public function testExistingIndex(): void { $spec = []; $spec['locales_location'] = [ 'description' => 'Location information for source strings.', 'fields' => [ 'lid' => [ 'type' => 'serial', 'not null' => TRUE, 'description' => 'Unique identifier of this location.', ], 'sid' => [ 'type' => 'int', 'not null' => TRUE, 'description' => 'Unique identifier of this string.', ], 'type' => [ 'type' => 'varchar_ascii', 'length' => 50, 'not null' => TRUE, 'default' => '', 'description' => 'The location type (file, config, path, etc).', ], 'name' => [ 'type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => '', 'description' => 'Type dependent location information (file name, path, etc).', ], 'version' => [ 'type' => 'varchar_ascii', 'length' => 20, 'not null' => TRUE, 'default' => 'none', 'description' => 'Version of Drupal where the location was found.', ], ], 'primary key' => ['lid'], 'foreign keys' => [ 'locales_source' => [ 'table' => 'locales_source', 'columns' => ['sid' => 'lid'], ], ], 'indexes' => [ 'string_type' => ['sid', 'type'], 'type_name' => ['type', 'name'], ], ]; \Drupal::database()->schema()->addIndex('locales_location', 'type_name', ['type', 'name', 'sid'], $spec['locales_location']); // Run updates and test them. $this->runUpdates(); $schema = \Drupal::database()->schema(); $this->assertTrue($schema->indexExists('locales_location', 'type_name')); // Ensure that index specification matches our expectations. $introspect_index_schema = new \ReflectionMethod(get_class($schema), 'introspectIndexSchema'); $index_schema = $introspect_index_schema->invoke($schema, 'locales_location'); $this->assertSame(['type', 'name'], $index_schema['indexes']['type_name']); } } Loading
core/modules/locale/locale.install +62 −0 Original line number Diff line number Diff line Loading @@ -190,6 +190,7 @@ function locale_schema() { ], 'indexes' => [ 'string_type' => ['sid', 'type'], 'type_name' => ['type', 'name'], ], ]; Loading Loading @@ -347,3 +348,64 @@ function locale_update_10100(&$sandbox = NULL) { $connection->schema()->changeField('locale_file', 'last_checked', 'last_checked', $new); } } /** * Add an index on locales_location on type and name. */ function locale_update_10300() { $spec = []; $spec['locales_location'] = [ 'description' => 'Location information for source strings.', 'fields' => [ 'lid' => [ 'type' => 'serial', 'not null' => TRUE, 'description' => 'Unique identifier of this location.', ], 'sid' => [ 'type' => 'int', 'not null' => TRUE, 'description' => 'Unique identifier of this string.', ], 'type' => [ 'type' => 'varchar_ascii', 'length' => 50, 'not null' => TRUE, 'default' => '', 'description' => 'The location type (file, config, path, etc).', ], 'name' => [ 'type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => '', 'description' => 'Type dependent location information (file name, path, etc).', ], 'version' => [ 'type' => 'varchar_ascii', 'length' => 20, 'not null' => TRUE, 'default' => 'none', 'description' => 'Version of Drupal where the location was found.', ], ], 'primary key' => ['lid'], 'foreign keys' => [ 'locales_source' => [ 'table' => 'locales_source', 'columns' => ['sid' => 'lid'], ], ], 'indexes' => [ 'string_type' => ['sid', 'type'], 'type_name' => ['type', 'name'], ], ]; $schema = \Drupal::database()->schema(); // If the update has been manually applied, recreate the index using the // current schema. if ($schema->indexExists('locales_location', 'type_name')) { $schema->dropIndex('locales_location', 'type_name'); } $schema->addIndex('locales_location', 'type_name', ['type', 'name'], $spec['locales_location']); }
core/modules/locale/tests/src/Functional/LocalesLocationAddIndexUpdateTest.php 0 → 100644 +114 −0 Original line number Diff line number Diff line <?php declare(strict_types=1); namespace Drupal\Tests\locale\Functional; use Drupal\FunctionalTests\Update\UpdatePathTestBase; /** * Tests Locale update functions. * * @group locale */ class LocalesLocationAddIndexUpdateTest extends UpdatePathTestBase { /** * {@inheritdoc} */ protected $defaultTheme = 'stark'; /** * {@inheritdoc} */ protected function setDatabaseDumpFiles() { $this->databaseDumpFiles[] = $this->root . '/core/modules/system/tests/fixtures/update/drupal-10.3.0.filled.standard.php.gz'; } /** * Tests locale_update_10300(). * * @see locale_update_10300 */ public function testIndex(): void { $this->assertFalse(\Drupal::database() ->schema() ->indexExists('locales_location', 'type_name')); // Run updates and test them. $this->runUpdates(); $this->assertTrue(\Drupal::database() ->schema() ->indexExists('locales_location', 'type_name')); } /** * Tests locale_update_10300(). * * @see locale_update_10300 */ public function testExistingIndex(): void { $spec = []; $spec['locales_location'] = [ 'description' => 'Location information for source strings.', 'fields' => [ 'lid' => [ 'type' => 'serial', 'not null' => TRUE, 'description' => 'Unique identifier of this location.', ], 'sid' => [ 'type' => 'int', 'not null' => TRUE, 'description' => 'Unique identifier of this string.', ], 'type' => [ 'type' => 'varchar_ascii', 'length' => 50, 'not null' => TRUE, 'default' => '', 'description' => 'The location type (file, config, path, etc).', ], 'name' => [ 'type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => '', 'description' => 'Type dependent location information (file name, path, etc).', ], 'version' => [ 'type' => 'varchar_ascii', 'length' => 20, 'not null' => TRUE, 'default' => 'none', 'description' => 'Version of Drupal where the location was found.', ], ], 'primary key' => ['lid'], 'foreign keys' => [ 'locales_source' => [ 'table' => 'locales_source', 'columns' => ['sid' => 'lid'], ], ], 'indexes' => [ 'string_type' => ['sid', 'type'], 'type_name' => ['type', 'name'], ], ]; \Drupal::database()->schema()->addIndex('locales_location', 'type_name', ['type', 'name', 'sid'], $spec['locales_location']); // Run updates and test them. $this->runUpdates(); $schema = \Drupal::database()->schema(); $this->assertTrue($schema->indexExists('locales_location', 'type_name')); // Ensure that index specification matches our expectations. $introspect_index_schema = new \ReflectionMethod(get_class($schema), 'introspectIndexSchema'); $index_schema = $introspect_index_schema->invoke($schema, 'locales_location'); $this->assertSame(['type', 'name'], $index_schema['indexes']['type_name']); } }