ConnectionMigrator
Handling schema migrations per connection.
not part of public core API.
Tags
Table of Contents
Properties
- $deletedPrefix : string
Methods
- __construct() : mixed
- create() : self
- getSchemaDiff() : SchemaDiff
- Return the raw Doctrine SchemaDiff object for the current connection.
- getUpdateSuggestions() : array<string|int, mixed>
- Compare current and expected schema definitions and provide updates suggestions in the form of SQL statements.
- install() : array<string|int, mixed>
- Perform add/change/create operations on tables and fields in an optimized, non-interactive, mode.
- applyDefaultOptionsToTable() : void
- applyDefaultPlatformOptionsToColumns() : void
- buildExistingSchemaDefinitions() : Schema
- buildExpectedSchemaDefinitions() : Schema
- Build the expected schema definitions from raw SQL statements.
- buildQuotedColumn() : Column
- Helper function to build a column object that has the _quoted attribute set so that the SchemaManager will use quoted identifiers when creating the final SQL statements. This is needed as Doctrine doesn't provide a method to set the flag after the object has been instantiated and there's no possibility to hook into the createSchema() method early enough to influence the original column object.
- buildQuotedForeignKey() : ForeignKeyConstraint
- Helper function to build a foreign key constraint object that has the _quoted attribute set so that the SchemaManager will use quoted identifiers when creating the final SQL statements. This is needed as Doctrine doesn't provide a method to set the flag after the object has been instantiated and there's no possibility to hook into the createSchema() method early enough to influence the original column object.
- buildQuotedIndex() : Index
- Helper function to build an index object that has the _quoted attribute set so that the SchemaManager will use quoted identifiers when creating the final SQL statements. This is needed as Doctrine doesn't provide a method to set the flag after the object has been instantiated and there's no possibility to hook into the createSchema() method early enough to influence the original column object.
- buildQuotedTable() : Table
- Helper function to build a table object that has the _quoted attribute set so that the SchemaManager will use quoted identifiers when creating the final SQL statements. This is needed as Doctrine doesn't provide a method to set the flag after the object has been instantiated and there's no possibility to hook into the createSchema() method early enough to influence the original table object.
- buildSchemaDiff() : SchemaDiff
- If the schema is not for the Default connection remove all tables from the schema that have no mapping in the TYPO3 configuration. This avoids update suggestions for tables that are in the database but have no direct relation to the TYPO3 instance.
- calculateUpdateSuggestionsHashes() : array<non-empty-string, non-empty-string>
- Replace the array keys with a md5 sum of the actual SQL statement
- getChangedFieldUpdateSuggestions() : array<string|int, mixed>
- Extract update suggestions (SQL statements) for changed fields from the complete schema diff.
- getChangedTableOptions() : array<string|int, mixed>
- Extract update suggestions (SQL statements) for changed options (like ENGINE) from the complete schema diff.
- getConnectionNameForTable() : string
- Determine the connection name for a table
- getDatabasePlatformForTable() : AbstractPlatform
- getDropFieldUpdateSuggestions() : array<string|int, mixed>
- Extract update suggestions (SQL statements) for fields that can be removed from the complete schema diff.
- getDropTableUpdateSuggestions() : array<string|int, mixed>
- Extract update suggestions (SQL statements) for tables that can be removed from the complete schema diff.
- getNewFieldUpdateSuggestions() : array<string|int, mixed>
- Extract the update suggestions (SQL statements) for newly added fields from the complete schema diff.
- getNewTableUpdateSuggestions() : array<string|int, mixed>
- Extract the update suggestions (SQL statements) for newly added tables from the complete schema diff.
- getSchemaTableNames() : mixed
- getTableOptions() : array<string|int, array<string|int, mixed>>
- Get COLLATION, ROW_FORMAT, COMMENT and ENGINE table options on MySQL connections.
- getTableRecordCount() : int
- Return the amount of records in the given table.
- getUnusedFieldUpdateSuggestions() : array<string|int, mixed>
- Extract update suggestions (SQL statements) for fields that are no longer present in the expected schema from the schema diff.
- getUnusedTableUpdateSuggestions() : array<string|int, mixed>
- Extract update suggestions (SQL statements) for tables that are no longer present in the expected schema from the schema diff.
- migrateColumnRenamesToDistinctActions() : SchemaDiff
- Revert the automatic rename optimization that Doctrine performs when it detects a column being added and a column being dropped that only differ by name.
- migrateUnprefixedRemovedFieldsToRenames() : SchemaDiff
- Scan the list of changed tables for fields that are going to be dropped. If the name of the field does not start with the deleted prefix mark the column for a rename instead of a drop operation.
- migrateUnprefixedRemovedTablesToRenames() : SchemaDiff
- Move tables to be removed that are not prefixed with the deleted prefix to the list of changed tables and set a new prefixed name.
- normalizeDecimalTypeColumnDefaultValue() : void
- Normalize DecimalType fields default values to have the correct format defined by the column scale settings to ensure working comparison with Doctrine DBAL v4 {@see AbstractPlatform::columnsEqual()}.
- normalizeTableColumnIdentifiers() : array<string|int, Column>
- Ensure correct initialized identifier names for table columns.
- normalizeTableForeignKeyConstraints() : array<string|int, ForeignKeyConstraint>
- normalizeTableForMariaDBOrMySQL() : void
- Doctrine DBAL 4+ removed the default length for string and binary fields, but they are required for MariaDB and MySQL database backends. Therefore, we need to normalize the tables and set column length for fields not having them.
- normalizeTableForPostgreSQL() : void
- Normalize fields towards PostgreSQL compatibility.
- normalizeTableForSQLite() : void
- Normalize fields towards SQLite compatibility.
- normalizeTableIdentifiers() : void
- normalizeTableIndex() : void
- normalizeTableIndexIdentifiers() : array<string|int, Index>
- Ensure correct initialized identifier names for table indexes.
- normalizeTablesForTargetConnection() : array<string|int, Table>
- Due to portability reasons it is necessary to normalize the virtual generated schema against the target connection platform.
- normalizeTableUniqueConstraintIdentifiers() : array<string|int, UniqueConstraint>
- Ensure correct initialized identifier names for table unique constraints.
- prepareColumnOptions() : array<string|int, mixed>
- removeUnrelatedTables() : array<non-empty-string, TableDiff|Table>
- Helper for buildSchemaDiff to filter an array of TableDiffs against a list of valid table names.
Properties
$deletedPrefix
protected
string
$deletedPrefix
= 'zzz_deleted_'
Prefix of deleted tables
Methods
__construct()
public
__construct(string $connectionName, Connection $connection, array<string|int, Table> $tables) : mixed
Parameters
- $connectionName : string
- $connection : Connection
- $tables : array<string|int, Table>
create()
public
static create(non-empty-string $connectionName, Connection $connection, array<string|int, Table> $tables) : self
Parameters
- $connectionName : non-empty-string
- $connection : Connection
- $tables : array<string|int, Table>
Return values
selfgetSchemaDiff()
Return the raw Doctrine SchemaDiff object for the current connection.
public
getSchemaDiff() : SchemaDiff
This diff contains all changes without any pre-processing.
Return values
SchemaDiffgetUpdateSuggestions()
Compare current and expected schema definitions and provide updates suggestions in the form of SQL statements.
public
getUpdateSuggestions([bool $remove = false ]) : array<string|int, mixed>
Parameters
- $remove : bool = false
Return values
array<string|int, mixed>install()
Perform add/change/create operations on tables and fields in an optimized, non-interactive, mode.
public
install([bool $createOnly = false ]) : array<string|int, mixed>
Parameters
- $createOnly : bool = false
Return values
array<string|int, mixed>applyDefaultOptionsToTable()
protected
applyDefaultOptionsToTable(AbstractPlatform $platform, SchemaConfig $schemaConfig, Table $table) : void
Parameters
- $platform : AbstractPlatform
- $schemaConfig : SchemaConfig
- $table : Table
applyDefaultPlatformOptionsToColumns()
protected
applyDefaultPlatformOptionsToColumns(AbstractPlatform $platform, SchemaConfig $schemaConfig, Table $table) : void
Parameters
- $platform : AbstractPlatform
- $schemaConfig : SchemaConfig
- $table : Table
buildExistingSchemaDefinitions()
protected
buildExistingSchemaDefinitions(AbstractSchemaManager $schemaManager) : Schema
Parameters
- $schemaManager : AbstractSchemaManager
Return values
SchemabuildExpectedSchemaDefinitions()
Build the expected schema definitions from raw SQL statements.
protected
buildExpectedSchemaDefinitions(string $connectionName) : Schema
Parameters
- $connectionName : string
Tags
Return values
SchemabuildQuotedColumn()
Helper function to build a column object that has the _quoted attribute set so that the SchemaManager will use quoted identifiers when creating the final SQL statements. This is needed as Doctrine doesn't provide a method to set the flag after the object has been instantiated and there's no possibility to hook into the createSchema() method early enough to influence the original column object.
protected
buildQuotedColumn(Column $column) : Column
Parameters
- $column : Column
Return values
ColumnbuildQuotedForeignKey()
Helper function to build a foreign key constraint object that has the _quoted attribute set so that the SchemaManager will use quoted identifiers when creating the final SQL statements. This is needed as Doctrine doesn't provide a method to set the flag after the object has been instantiated and there's no possibility to hook into the createSchema() method early enough to influence the original column object.
protected
buildQuotedForeignKey(ForeignKeyConstraint $index) : ForeignKeyConstraint
Parameters
- $index : ForeignKeyConstraint
Return values
ForeignKeyConstraintbuildQuotedIndex()
Helper function to build an index object that has the _quoted attribute set so that the SchemaManager will use quoted identifiers when creating the final SQL statements. This is needed as Doctrine doesn't provide a method to set the flag after the object has been instantiated and there's no possibility to hook into the createSchema() method early enough to influence the original column object.
protected
buildQuotedIndex(Index $index) : Index
Parameters
- $index : Index
Return values
IndexbuildQuotedTable()
Helper function to build a table object that has the _quoted attribute set so that the SchemaManager will use quoted identifiers when creating the final SQL statements. This is needed as Doctrine doesn't provide a method to set the flag after the object has been instantiated and there's no possibility to hook into the createSchema() method early enough to influence the original table object.
protected
buildQuotedTable(Table $table) : Table
Parameters
- $table : Table
Return values
TablebuildSchemaDiff()
If the schema is not for the Default connection remove all tables from the schema that have no mapping in the TYPO3 configuration. This avoids update suggestions for tables that are in the database but have no direct relation to the TYPO3 instance.
protected
buildSchemaDiff([bool $renameUnused = true ]) : SchemaDiff
Parameters
- $renameUnused : bool = true
Tags
Return values
SchemaDiffcalculateUpdateSuggestionsHashes()
Replace the array keys with a md5 sum of the actual SQL statement
protected
calculateUpdateSuggestionsHashes(array<string|int, string> $statements) : array<non-empty-string, non-empty-string>
Parameters
- $statements : array<string|int, string>
Return values
array<non-empty-string, non-empty-string>getChangedFieldUpdateSuggestions()
Extract update suggestions (SQL statements) for changed fields from the complete schema diff.
protected
getChangedFieldUpdateSuggestions(SchemaDiff $schemaDiff) : array<string|int, mixed>
Parameters
- $schemaDiff : SchemaDiff
Tags
Return values
array<string|int, mixed>getChangedTableOptions()
Extract update suggestions (SQL statements) for changed options (like ENGINE) from the complete schema diff.
protected
getChangedTableOptions(SchemaDiff $schemaDiff) : array<string|int, mixed>
Parameters
- $schemaDiff : SchemaDiff
Tags
Return values
array<string|int, mixed>getConnectionNameForTable()
Determine the connection name for a table
protected
getConnectionNameForTable(string $tableName) : string
Parameters
- $tableName : string
Tags
Return values
stringgetDatabasePlatformForTable()
protected
getDatabasePlatformForTable(string $tableName) : AbstractPlatform
Parameters
- $tableName : string
Return values
AbstractPlatformgetDropFieldUpdateSuggestions()
Extract update suggestions (SQL statements) for fields that can be removed from the complete schema diff.
protected
getDropFieldUpdateSuggestions(SchemaDiff $schemaDiff) : array<string|int, mixed>
Fields that can be removed have been prefixed in a previous run of the schema migration.
Parameters
- $schemaDiff : SchemaDiff
Tags
Return values
array<string|int, mixed>getDropTableUpdateSuggestions()
Extract update suggestions (SQL statements) for tables that can be removed from the complete schema diff.
protected
getDropTableUpdateSuggestions(SchemaDiff $schemaDiff) : array<string|int, mixed>
Tables that can be removed have been prefixed in a previous run of the schema migration.
Parameters
- $schemaDiff : SchemaDiff
Tags
Return values
array<string|int, mixed>getNewFieldUpdateSuggestions()
Extract the update suggestions (SQL statements) for newly added fields from the complete schema diff.
protected
getNewFieldUpdateSuggestions(SchemaDiff $schemaDiff) : array<string|int, mixed>
Parameters
- $schemaDiff : SchemaDiff
Tags
Return values
array<string|int, mixed>getNewTableUpdateSuggestions()
Extract the update suggestions (SQL statements) for newly added tables from the complete schema diff.
protected
getNewTableUpdateSuggestions(SchemaDiff $schemaDiff) : array<string|int, mixed>
Parameters
- $schemaDiff : SchemaDiff
Tags
Return values
array<string|int, mixed>getSchemaTableNames()
protected
getSchemaTableNames(Schema $schema) : mixed
Parameters
- $schema : Schema
getTableOptions()
Get COLLATION, ROW_FORMAT, COMMENT and ENGINE table options on MySQL connections.
protected
getTableOptions(array<string|int, string> $tableNames) : array<string|int, array<string|int, mixed>>
Parameters
- $tableNames : array<string|int, string>
Tags
Return values
array<string|int, array<string|int, mixed>>getTableRecordCount()
Return the amount of records in the given table.
protected
getTableRecordCount(string $tableName) : int
Parameters
- $tableName : string
Tags
Return values
intgetUnusedFieldUpdateSuggestions()
Extract update suggestions (SQL statements) for fields that are no longer present in the expected schema from the schema diff.
protected
getUnusedFieldUpdateSuggestions(SchemaDiff $schemaDiff) : array<string|int, mixed>
In this case the update suggestions are renames of the fields with a prefix to mark them for deletion in a second sweep.
Parameters
- $schemaDiff : SchemaDiff
Tags
Return values
array<string|int, mixed>getUnusedTableUpdateSuggestions()
Extract update suggestions (SQL statements) for tables that are no longer present in the expected schema from the schema diff.
protected
getUnusedTableUpdateSuggestions(SchemaDiff $schemaDiff) : array<string|int, mixed>
In this case the update suggestions are renames of the tables with a prefix to mark them for deletion in a second sweep.
Parameters
- $schemaDiff : SchemaDiff
Tags
Return values
array<string|int, mixed>migrateColumnRenamesToDistinctActions()
Revert the automatic rename optimization that Doctrine performs when it detects a column being added and a column being dropped that only differ by name.
protected
migrateColumnRenamesToDistinctActions(SchemaDiff $schemaDiff) : SchemaDiff
Parameters
- $schemaDiff : SchemaDiff
Tags
Return values
SchemaDiffmigrateUnprefixedRemovedFieldsToRenames()
Scan the list of changed tables for fields that are going to be dropped. If the name of the field does not start with the deleted prefix mark the column for a rename instead of a drop operation.
protected
migrateUnprefixedRemovedFieldsToRenames(SchemaDiff $schemaDiff) : SchemaDiff
Parameters
- $schemaDiff : SchemaDiff
Tags
Return values
SchemaDiffmigrateUnprefixedRemovedTablesToRenames()
Move tables to be removed that are not prefixed with the deleted prefix to the list of changed tables and set a new prefixed name.
protected
migrateUnprefixedRemovedTablesToRenames(SchemaDiff $schemaDiff) : SchemaDiff
Without this help the Doctrine SchemaDiff has no idea if a table has been renamed and performs a drop of the old table and creates a new table, which leads to all data in the old table being lost.
Parameters
- $schemaDiff : SchemaDiff
Tags
Return values
SchemaDiffnormalizeDecimalTypeColumnDefaultValue()
Normalize DecimalType fields default values to have the correct format defined by the column scale settings to ensure working comparison with Doctrine DBAL v4 {@see AbstractPlatform::columnsEqual()}.
protected
normalizeDecimalTypeColumnDefaultValue(AbstractPlatform $platform, Table $table) : void
Parameters
- $platform : AbstractPlatform
- $table : Table
normalizeTableColumnIdentifiers()
Ensure correct initialized identifier names for table columns.
protected
normalizeTableColumnIdentifiers(AbstractPlatform $platform, array<string|int, Column> $columns) : array<string|int, Column>
Parameters
- $platform : AbstractPlatform
- $columns : array<string|int, Column>
Return values
array<string|int, Column>normalizeTableForeignKeyConstraints()
protected
normalizeTableForeignKeyConstraints(AbstractPlatform $platform, array<string|int, ForeignKeyConstraint> $foreignKeyConstraints) : array<string|int, ForeignKeyConstraint>
Parameters
- $platform : AbstractPlatform
- $foreignKeyConstraints : array<string|int, ForeignKeyConstraint>
Return values
array<string|int, ForeignKeyConstraint>normalizeTableForMariaDBOrMySQL()
Doctrine DBAL 4+ removed the default length for string and binary fields, but they are required for MariaDB and MySQL database backends. Therefore, we need to normalize the tables and set column length for fields not having them.
protected
normalizeTableForMariaDBOrMySQL(AbstractPlatform $databasePlatform, Table $table) : void
Missing column length may happen by the DefaultTCASchema
enriched structure information, which is and should
be database vendor unaware. Therefore, we normalize this here now.
Parameters
- $databasePlatform : AbstractPlatform
- $table : Table
Tags
normalizeTableForPostgreSQL()
Normalize fields towards PostgreSQL compatibility.
protected
normalizeTableForPostgreSQL(AbstractPlatform $databasePlatform, Table $table) : void
Parameters
- $databasePlatform : AbstractPlatform
- $table : Table
normalizeTableForSQLite()
Normalize fields towards SQLite compatibility.
protected
normalizeTableForSQLite(AbstractPlatform $databasePlatform, Table $table) : void
Parameters
- $databasePlatform : AbstractPlatform
- $table : Table
Tags
normalizeTableIdentifiers()
protected
normalizeTableIdentifiers(AbstractPlatform $platform, Table &$table) : void
Parameters
- $platform : AbstractPlatform
- $table : Table
normalizeTableIndex()
protected
normalizeTableIndex(AbstractPlatform $platform, Connection $connection, SchemaConfig $schemaConfig, Table &$table) : void
Parameters
- $platform : AbstractPlatform
- $connection : Connection
- $schemaConfig : SchemaConfig
- $table : Table
normalizeTableIndexIdentifiers()
Ensure correct initialized identifier names for table indexes.
protected
normalizeTableIndexIdentifiers(AbstractPlatform $platform, array<string|int, Index> $indexes) : array<string|int, Index>
Parameters
- $platform : AbstractPlatform
- $indexes : array<string|int, Index>
Return values
array<string|int, Index>normalizeTablesForTargetConnection()
Due to portability reasons it is necessary to normalize the virtual generated schema against the target connection platform.
protected
normalizeTablesForTargetConnection(Connection $connection, SchemaConfig $schemaConfig, array<string|int, Table> $tables) : array<string|int, Table>
- SQLite: Needs some special treatment regarding autoincrement fields. [1]
- MySQL/MariaDB: varchar fields needs to have a length, but doctrine dropped the default size. This need's to be addressed in application code. [2][3]
Parameters
- $connection : Connection
- $schemaConfig : SchemaConfig
- $tables : array<string|int, Table>
Tags
Return values
array<string|int, Table>normalizeTableUniqueConstraintIdentifiers()
Ensure correct initialized identifier names for table unique constraints.
protected
normalizeTableUniqueConstraintIdentifiers(AbstractPlatform $platform, array<string|int, UniqueConstraint> $uniqueConstraints) : array<string|int, UniqueConstraint>
Parameters
- $platform : AbstractPlatform
- $uniqueConstraints : array<string|int, UniqueConstraint>
Return values
array<string|int, UniqueConstraint>prepareColumnOptions()
protected
prepareColumnOptions(Column $column) : array<string|int, mixed>
Parameters
- $column : Column
Return values
array<string|int, mixed>removeUnrelatedTables()
Helper for buildSchemaDiff to filter an array of TableDiffs against a list of valid table names.
protected
removeUnrelatedTables(array<non-empty-string, TableDiff|TableDiff|Table> $tableDiffs, array<string|int, string> $validTableNames) : array<non-empty-string, TableDiff|Table>
Parameters
- $tableDiffs : array<non-empty-string, TableDiff|TableDiff|Table>
- $validTableNames : array<string|int, string>