6 declare(strict_types=1);
22 private $temporaryTables = [];
27 private $resourceConnection;
44 private function createTemporaryTable(
string $originalTableName): string
46 $temporaryTableName = $this->resourceConnection->getTableName(
47 $originalTableName .
'__temp' . $this->generateRandomSuffix()
50 $this->resourceConnection->getConnection()->query(
52 'create table %s like %s',
54 $this->resourceConnection->getTableName($originalTableName)
58 return $temporaryTableName;
66 private function generateRandomSuffix(): string
68 return bin2hex(random_bytes(4));
76 $originalTable = $this->resourceConnection->getTableName($originalTable);
77 if (!array_key_exists($originalTable, $this->temporaryTables)) {
78 $this->temporaryTables[$originalTable] = $this->createTemporaryTable($originalTable);
81 return $this->temporaryTables[$originalTable];
93 $temporaryTablesRenamed = [];
98 $temporaryOriginalName = $this->resourceConnection->getTableName(
104 'newName' => $temporaryOriginalName,
107 'oldName' => $temporaryTableName,
110 $toDrop[] = $temporaryOriginalName;
115 $this->resourceConnection->getConnection()->renameTablesBatch($toRename);
117 foreach ($temporaryTablesRenamed as
$tableName) {
122 $this->resourceConnection->getConnection()->dropTable(
$tableName);
swapIndexTables(array $originalTablesNames)
getWorkingTableName(string $originalTable)
__construct(ResourceConnection $resource)