6 declare(strict_types=1);
33 private $tableResolver;
43 private $tmpTableSuffix =
'_temp';
48 private $additionalTableSuffix =
'_replica';
53 private $mainTmpTable;
58 private $connectionName;
67 TableResolver $tableResolver,
68 $connectionName =
null 71 $this->tableResolver = $tableResolver;
72 $this->connectionName = $connectionName;
82 if (
null === $this->connection) {
83 $this->connection = $this->resource->getConnection($this->connectionName);
85 return $this->connection;
94 private function getTable(
string $table): string
96 return $this->resource->getTableName(
$table);
109 private function createTable(
string $mainTableName,
string $newTableName)
113 $this->
getConnection()->createTableByDdl($mainTableName, $newTableName)
139 private function truncateTable(
string $tableName)
153 private function getArrayKeyForTmpTable(array $dimensions): string
156 foreach ($dimensions as $dimension) {
157 $key .= $dimension->getName() .
'_' . $dimension->getValue();
171 return $this->tableResolver->resolve(self::MAIN_INDEX_TABLE, $dimensions);
189 $this->getTable(self::MAIN_INDEX_TABLE . $this->additionalTableSuffix),
193 $mainReplicaTableName = $this->
getMainTable($dimensions) . $this->additionalTableSuffix;
196 $this->getTable(self::MAIN_INDEX_TABLE . $this->additionalTableSuffix),
197 $mainReplicaTableName
211 $this->dropTable($mainTableName);
213 $mainReplicaTableName = $this->
getMainTable($dimensions) . $this->additionalTableSuffix;
214 $this->dropTable($mainReplicaTableName);
227 $this->truncateTable($mainTableName);
229 $mainReplicaTableName = $this->
getMainTable($dimensions) . $this->additionalTableSuffix;
230 $this->truncateTable($mainReplicaTableName);
242 return $this->
getMainTable($dimensions) . $this->additionalTableSuffix;
255 $templateTableName = $this->resource->getTableName(self::MAIN_INDEX_TABLE .
'_tmp');
256 $temporaryTableName = $this->
getMainTable($dimensions) . $this->tmpTableSuffix;
257 $this->
getConnection()->createTemporaryTableLike($temporaryTableName, $templateTableName,
true);
258 $this->mainTmpTable[$this->getArrayKeyForTmpTable($dimensions)] = $temporaryTableName;
272 $cacheKey = $this->getArrayKeyForTmpTable($dimensions);
273 if (!isset($this->mainTmpTable[$cacheKey])) {
274 throw new \LogicException(
275 sprintf(
'Temporary table for provided dimensions "%s" does not exist', $cacheKey)
278 return $this->mainTmpTable[$cacheKey];
truncateTablesForDimensions(array $dimensions)
createMainTmpTable(array $dimensions)
createTablesForDimensions(array $dimensions)
getMainTmpTable(array $dimensions)
getMainTable(array $dimensions)
dropTablesForDimensions(array $dimensions)
getMainReplicaTable(array $dimensions)
__construct(ResourceConnection $resource, TableResolver $tableResolver, $connectionName=null)