diff --git a/src/Platforms/SqlitePlatform.php b/src/Platforms/SqlitePlatform.php index 6d5adda49c8..405812510b6 100644 --- a/src/Platforms/SqlitePlatform.php +++ b/src/Platforms/SqlitePlatform.php @@ -39,6 +39,8 @@ */ class SqlitePlatform extends AbstractPlatform { + private bool $schemaEmulationEnabled = true; + /** * {@inheritDoc} */ @@ -328,6 +330,26 @@ protected function _getCommonIntegerTypeDeclarationSQL(array $column) return ! empty($column['unsigned']) ? ' UNSIGNED' : ''; } + /** + * Disables schema emulation. + * + * Schema emulation is enabled by default to maintain backwards compatibility. + * Disable it to opt-in to the behavior of DBAL 4. + * + * @deprecated Will be removed in DBAL 4.0. + */ + public function disableSchemaEmulation(): void + { + $this->schemaEmulationEnabled = false; + } + + private function emulateSchemaNamespacing(string $tableName): string + { + return $this->schemaEmulationEnabled + ? str_replace('.', '__', $tableName) + : $tableName; + } + /** * {@inheritDoc} */ @@ -335,7 +357,7 @@ public function getForeignKeyDeclarationSQL(ForeignKeyConstraint $foreignKey) { return parent::getForeignKeyDeclarationSQL(new ForeignKeyConstraint( $foreignKey->getQuotedLocalColumns($this), - str_replace('.', '__', $foreignKey->getQuotedForeignTableName($this)), + $this->emulateSchemaNamespacing($foreignKey->getQuotedForeignTableName($this)), $foreignKey->getQuotedForeignColumns($this), $foreignKey->getName(), $foreignKey->getOptions() @@ -347,7 +369,7 @@ public function getForeignKeyDeclarationSQL(ForeignKeyConstraint $foreignKey) */ protected function _getCreateTableSQL($name, array $columns, array $options = []) { - $name = str_replace('.', '__', $name); + $name = $this->emulateSchemaNamespacing($name); $queryFields = $this->getColumnDeclarationListSQL($columns); if (isset($options['uniqueConstraints']) && ! empty($options['uniqueConstraints'])) { @@ -461,7 +483,7 @@ public function getClobTypeDeclarationSQL(array $column) */ public function getListTableConstraintsSQL($table) { - $table = str_replace('.', '__', $table); + $table = $this->emulateSchemaNamespacing($table); return sprintf( "SELECT sql FROM sqlite_master WHERE type='index' AND tbl_name = %s AND sql NOT NULL ORDER BY name", @@ -474,7 +496,7 @@ public function getListTableConstraintsSQL($table) */ public function getListTableColumnsSQL($table, $database = null) { - $table = str_replace('.', '__', $table); + $table = $this->emulateSchemaNamespacing($table); return sprintf('PRAGMA table_info(%s)', $this->quoteStringLiteral($table)); } @@ -484,7 +506,7 @@ public function getListTableColumnsSQL($table, $database = null) */ public function getListTableIndexesSQL($table, $database = null) { - $table = str_replace('.', '__', $table); + $table = $this->emulateSchemaNamespacing($table); return sprintf('PRAGMA index_list(%s)', $this->quoteStringLiteral($table)); } @@ -586,7 +608,7 @@ public function getName() public function getTruncateTableSQL($tableName, $cascade = false) { $tableIdentifier = new Identifier($tableName); - $tableName = str_replace('.', '__', $tableIdentifier->getQuotedName($this)); + $tableName = $this->emulateSchemaNamespacing($tableIdentifier->getQuotedName($this)); return 'DELETE FROM ' . $tableName; } @@ -792,7 +814,7 @@ public function getBlobTypeDeclarationSQL(array $column) */ public function getTemporaryTableName($tableName) { - $tableName = str_replace('.', '__', $tableName); + $tableName = $this->emulateSchemaNamespacing($tableName); return $tableName; } @@ -816,7 +838,7 @@ public function canEmulateSchemas() 'SqlitePlatform::canEmulateSchemas() is deprecated.' ); - return true; + return $this->schemaEmulationEnabled; } /** @@ -881,7 +903,7 @@ public function getCreateTableSQL(Table $table, $createFlags = null) */ public function getListTableForeignKeysSQL($table, $database = null) { - $table = str_replace('.', '__', $table); + $table = $this->emulateSchemaNamespacing($table); return sprintf('PRAGMA foreign_key_list(%s)', $this->quoteStringLiteral($table)); }