mirror of
https://github.com/phpbb/phpbb.git
synced 2025-07-31 22:10:45 +02:00
[ticket/17525] Avoid more index name duplication
Many more tables have indexes with the same names which can cause issues on SQLite/Postgres. Also, add an option for migrations to rename indexes. PHPBB-17525
This commit is contained in:
@@ -330,6 +330,19 @@ class doctrine implements tools_interface
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function sql_rename_index(string $table_name, string $index_name_old, string $index_name_new)
|
||||
{
|
||||
return $this->alter_schema(
|
||||
function (Schema $schema) use ($table_name, $index_name_old, $index_name_new): void
|
||||
{
|
||||
$this->schema_rename_index($schema, $table_name, $index_name_old, $index_name_new);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@@ -545,6 +558,11 @@ class doctrine implements tools_interface
|
||||
'use_key' => true,
|
||||
'per_table' => true,
|
||||
],
|
||||
'rename_index' => [
|
||||
'method' => 'schema_rename_index',
|
||||
'use_key' => true,
|
||||
'per_table' => true,
|
||||
],
|
||||
];
|
||||
|
||||
foreach ($mapping as $action => $params)
|
||||
@@ -831,6 +849,27 @@ class doctrine implements tools_interface
|
||||
$table->addIndex($columns, $index_name);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Schema $schema
|
||||
* @param string $table_name
|
||||
* @param string $index_name_old
|
||||
* @param string $index_name_new
|
||||
* @param bool $safe_check
|
||||
*
|
||||
* @throws SchemaException
|
||||
*/
|
||||
protected function schema_rename_index(Schema $schema, string $table_name, string $index_name_old, string $index_name_new, bool $safe_check = false): void
|
||||
{
|
||||
$table = $schema->getTable($table_name);
|
||||
|
||||
if ($safe_check && !$table->hasIndex($index_name_old))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
$table->renameIndex($index_name_old, $index_name_new);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Schema $schema
|
||||
* @param string $table_name
|
||||
|
@@ -165,6 +165,17 @@ interface tools_interface
|
||||
*/
|
||||
public function sql_create_index(string $table_name, string $index_name, $column);
|
||||
|
||||
/**
|
||||
* Rename index
|
||||
*
|
||||
* @param string $table_name Table to modify
|
||||
* @param string $index_name_old Name of the index to rename
|
||||
* @param string $index_name_new New name of the index being renamed
|
||||
*
|
||||
* @return bool|string[] True if the statements have been executed
|
||||
*/
|
||||
public function sql_rename_index(string $table_name, string $index_name_old, string $index_name_new);
|
||||
|
||||
/**
|
||||
* Drop Index
|
||||
*
|
||||
|
Reference in New Issue
Block a user