2 declare(strict_types = 1);
18 use Doctrine\DBAL\DBALException;
19 use Doctrine\DBAL\Schema\Schema;
20 use Doctrine\DBAL\Schema\SchemaDiff;
21 use Doctrine\DBAL\Schema\Table;
59 $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class);
62 $updateSuggestions = [];
64 foreach ($connectionPool->getConnectionNames() as $connectionName) {
70 $updateSuggestions[$connectionName] =
71 $connectionMigrator->getUpdateSuggestions($remove);
74 return $updateSuggestions;
94 $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class);
99 foreach ($connectionPool->getConnectionNames() as $connectionName) {
104 $schemaDiffs[$connectionName] = $connectionMigrator->getSchemaDiff();
126 public function migrate(array $statements, array $selectedStatements): array
129 $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class);
130 $updateSuggestionsPerConnection = array_merge_recursive(
135 foreach ($updateSuggestionsPerConnection as $connectionName => $updateSuggestions) {
136 unset($updateSuggestions[
'tables_count'], $updateSuggestions[
'change_currentValue']);
137 $updateSuggestions = array_merge(...array_values($updateSuggestions));
138 $statementsToExecute = array_intersect_key($updateSuggestions, $selectedStatements);
139 if (count($statementsToExecute) === 0) {
143 $connection = $connectionPool->getConnectionByName($connectionName);
144 foreach ($statementsToExecute as $hash => $statement) {
146 $connection->executeUpdate($statement);
147 }
catch (DBALException $e) {
148 $result[$hash] = $e->getPrevious()->getMessage();
173 public function install(array $statements,
bool $createOnly =
false): array
175 $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class);
179 foreach ($connectionPool->getConnectionNames() as $connectionName) {
185 $lastResult = $connectionMigrator->install($createOnly);
186 $result = array_merge($result, $lastResult);
199 public function importStaticData(array $statements,
bool $truncate =
false): array
202 $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class);
203 $insertStatements = [];
205 foreach ($statements as $statement) {
208 if (preg_match(
'/^INSERT\s+INTO\s+`?(\w+)`?(.*)/i', $statement, $matches)) {
209 list(, $tableName, $sqlFragment) = $matches;
210 $insertStatements[$tableName][] = sprintf(
212 $connectionPool->getConnectionForTable($tableName)->quoteIdentifier($tableName),
213 rtrim($sqlFragment,
';')
218 foreach ($insertStatements as $tableName => $perTableStatements) {
219 $connection = $connectionPool->getConnectionForTable($tableName);
222 $connection->truncate($tableName);
225 foreach ((array)$perTableStatements as $statement) {
227 $connection->executeUpdate($statement);
228 $result[$statement] =
'';
229 }
catch (DBALException $e) {
230 $result[$statement] = $e->getPrevious()->getMessage();
254 foreach ($statements as $statement) {
255 $createTableParser = GeneralUtility::makeInstance(Parser::class, $statement);
260 $tables[] = $createTableParser->parse();
264 $statementException->getMessage() .
' in statement: ' . LF . $statement,
272 $tables = array_merge(...$tables);
276 $disabledPagesLanguageOverlay = GeneralUtility::makeInstance(Features::class)->isFeatureEnabled(
'unifiedPageTranslationHandling');
279 $defaultTcaSchema = GeneralUtility::makeInstance(DefaultTcaSchema::class);
280 $tables = $defaultTcaSchema->enrich($tables);
282 foreach ($tables as $k => $table) {
283 if ($disabledPagesLanguageOverlay && $table->getName() ===
'pages_language_overlay') {
287 $prioritizedColumnNames = $defaultTcaSchema->getPrioritizedFieldNames($table->getName());
289 if (empty($prioritizedColumnNames)) {
293 $prioritizedColumns = [];
294 $nonPrioritizedColumns = [];
296 foreach ($table->getColumns() as $columnObject) {
297 if (in_array($columnObject->getName(), $prioritizedColumnNames,
true)) {
298 $prioritizedColumns[] = $columnObject;
300 $nonPrioritizedColumns[] = $columnObject;
304 $tables[$k] =
new Table(
306 array_merge($prioritizedColumns, $nonPrioritizedColumns),
307 $table->getIndexes(),
308 $table->getForeignKeys(),