diff --git a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/SQLiteDialect.java b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/SQLiteDialect.java index 605b3a00cc..f7b2c207bf 100644 --- a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/SQLiteDialect.java +++ b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/SQLiteDialect.java @@ -16,6 +16,7 @@ import jakarta.persistence.TemporalType; import org.hibernate.ScrollMode; import org.hibernate.boot.model.TypeContributions; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.community.dialect.identity.SQLiteIdentityColumnSupport; import org.hibernate.dialect.Dialect; import org.hibernate.dialect.NationalizationSupport; @@ -116,7 +117,7 @@ public class SQLiteDialect extends Dialect { super( dialect ); } @Override - public String getColumnDefinitionUniquenessFragment(Column column) { + public String getColumnDefinitionUniquenessFragment(Column column, SqlStringGenerationContext context) { return " unique"; } } diff --git a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/TeradataDialect.java b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/TeradataDialect.java index 37f9c8537e..406d38b752 100644 --- a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/TeradataDialect.java +++ b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/TeradataDialect.java @@ -11,6 +11,7 @@ import org.hibernate.boot.Metadata; import org.hibernate.boot.model.naming.Identifier; import org.hibernate.boot.model.relational.QualifiedNameImpl; import org.hibernate.boot.model.relational.QualifiedTableName; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.cfg.Environment; import org.hibernate.dialect.Dialect; import org.hibernate.dialect.function.CommonFunctionFactory; @@ -19,7 +20,6 @@ import org.hibernate.community.dialect.identity.Teradata14IdentityColumnSupport; import org.hibernate.dialect.pagination.LimitHandler; import org.hibernate.dialect.pagination.TopLimitHandler; import org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo; -import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment; import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.exception.spi.TemplatedViolatedConstraintNameExtractor; import org.hibernate.exception.spi.ViolatedConstraintNameExtractor; @@ -543,23 +543,18 @@ public class TeradataDialect extends Dialect { } @Override - public String[] getSqlCreateStrings(Index index, Metadata metadata) { - final JdbcEnvironment jdbcEnvironment = metadata.getDatabase().getJdbcEnvironment(); + public String[] getSqlCreateStrings(Index index, Metadata metadata, SqlStringGenerationContext context) { QualifiedTableName qualifiedTableName = index.getTable().getQualifiedTableName(); - final String tableName = jdbcEnvironment.getQualifiedObjectNameFormatter().format( - qualifiedTableName, - jdbcEnvironment.getDialect() - ); + final String tableName = context.format( qualifiedTableName ); final String indexNameForCreation; if ( getDialect().qualifyIndexName() ) { - indexNameForCreation = jdbcEnvironment.getQualifiedObjectNameFormatter().format( + indexNameForCreation = context.format( new QualifiedNameImpl( qualifiedTableName.getCatalogName(), qualifiedTableName.getSchemaName(), Identifier.toIdentifier( index.getName() ) - ), - jdbcEnvironment.getDialect() + ) ); } else { diff --git a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/unique/InformixUniqueDelegate.java b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/unique/InformixUniqueDelegate.java index f081bea12b..14cce56a3d 100644 --- a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/unique/InformixUniqueDelegate.java +++ b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/unique/InformixUniqueDelegate.java @@ -7,6 +7,7 @@ package org.hibernate.community.dialect.unique; import org.hibernate.boot.Metadata; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.dialect.Dialect; import org.hibernate.dialect.unique.DefaultUniqueDelegate; import org.hibernate.mapping.UniqueKey; @@ -25,13 +26,11 @@ public class InformixUniqueDelegate extends DefaultUniqueDelegate { // legacy model ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @Override - public String getAlterTableToAddUniqueKeyCommand(UniqueKey uniqueKey, Metadata metadata) { + public String getAlterTableToAddUniqueKeyCommand(UniqueKey uniqueKey, Metadata metadata, + SqlStringGenerationContext context) { // Do this here, rather than allowing UniqueKey/Constraint to do it. // We need full, simplified control over whether or not it happens. - final String tableName = metadata.getDatabase().getJdbcEnvironment().getQualifiedObjectNameFormatter().format( - uniqueKey.getTable().getQualifiedTableName(), - metadata.getDatabase().getJdbcEnvironment().getDialect() - ); + final String tableName = context.format( uniqueKey.getTable().getQualifiedTableName() ); final String constraintName = dialect.quote( uniqueKey.getName() ); return dialect.getAlterTableString( tableName ) + " add constraint " + uniqueConstraintSql( uniqueKey ) + " constraint " + constraintName; diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/relational/QualifiedName.java b/hibernate-core/src/main/java/org/hibernate/boot/model/relational/QualifiedName.java index 92139e89c2..b7af552a2b 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/relational/QualifiedName.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/relational/QualifiedName.java @@ -31,8 +31,8 @@ public interface QualifiedName { * Returns a String-form of the qualified name. *

* Depending on intention, may not be appropriate. May want - * {@link org.hibernate.engine.jdbc.env.spi.QualifiedObjectNameFormatter#format} - * instead. See {@link org.hibernate.engine.jdbc.env.spi.JdbcEnvironment#getQualifiedObjectNameFormatter} + * {@link SqlStringGenerationContext#format} + * instead. * * @return The string form */ diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/relational/SqlStringGenerationContext.java b/hibernate-core/src/main/java/org/hibernate/boot/model/relational/SqlStringGenerationContext.java index 9daa2271a9..522fbb0bb4 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/relational/SqlStringGenerationContext.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/relational/SqlStringGenerationContext.java @@ -7,6 +7,7 @@ package org.hibernate.boot.model.relational; import org.hibernate.dialect.Dialect; +import org.hibernate.engine.jdbc.env.spi.IdentifierHelper; /** * A context provided to methods responsible for generating SQL strings on startup. @@ -14,10 +15,18 @@ import org.hibernate.dialect.Dialect; public interface SqlStringGenerationContext { /** - * @return The database dialect, to generate SQL fragments that are specific to each vendor. + * @return The database dialect of the current JDBC environment, + * to generate SQL fragments that are specific to each vendor. */ Dialect getDialect(); + /** + * @return The helper for dealing with identifiers in the current JDBC environment. + *

+ * Note that the Identifiers returned from this helper already account for auto-quoting. + */ + IdentifierHelper getIdentifierHelper(); + /** * Render a formatted a table name * @@ -45,4 +54,13 @@ public interface SqlStringGenerationContext { */ String format(QualifiedName qualifiedName); + /** + * Render a formatted sequence name, without the catalog (even the default one). + * + * @param qualifiedName The sequence name + * + * @return The formatted name + */ + String formatWithoutCatalog(QualifiedSequenceName qualifiedName); + } diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/relational/internal/SqlStringGenerationContextImpl.java b/hibernate-core/src/main/java/org/hibernate/boot/model/relational/internal/SqlStringGenerationContextImpl.java index 83b39a0efa..8000968031 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/relational/internal/SqlStringGenerationContextImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/relational/internal/SqlStringGenerationContextImpl.java @@ -11,6 +11,7 @@ import org.hibernate.boot.model.relational.QualifiedSequenceName; import org.hibernate.boot.model.relational.QualifiedTableName; import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.dialect.Dialect; +import org.hibernate.engine.jdbc.env.spi.IdentifierHelper; import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment; import org.hibernate.engine.jdbc.env.spi.QualifiedObjectNameFormatter; @@ -22,10 +23,13 @@ public class SqlStringGenerationContextImpl } private final Dialect dialect; + private final IdentifierHelper identifierHelper; private final QualifiedObjectNameFormatter qualifiedObjectNameFormatter; + @SuppressWarnings("deprecation") public SqlStringGenerationContextImpl(JdbcEnvironment jdbcEnvironment) { this.dialect = jdbcEnvironment.getDialect(); + this.identifierHelper = jdbcEnvironment.getIdentifierHelper(); this.qualifiedObjectNameFormatter = jdbcEnvironment.getQualifiedObjectNameFormatter(); } @@ -34,6 +38,11 @@ public class SqlStringGenerationContextImpl return dialect; } + @Override + public IdentifierHelper getIdentifierHelper() { + return identifierHelper; + } + @Override public String format(QualifiedTableName qualifiedName) { return qualifiedObjectNameFormatter.format( qualifiedName, dialect ); @@ -49,4 +58,16 @@ public class SqlStringGenerationContextImpl return qualifiedObjectNameFormatter.format( qualifiedName, dialect ); } + @Override + public String formatWithoutCatalog(QualifiedSequenceName qualifiedName) { + QualifiedSequenceName nameToFormat; + if ( qualifiedName.getCatalogName() != null ) { + nameToFormat = new QualifiedSequenceName( null, + qualifiedName.getSchemaName(), qualifiedName.getSequenceName() ); + } + else { + nameToFormat = qualifiedName; + } + return qualifiedObjectNameFormatter.format( nameToFormat, dialect ); + } } diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/AbstractHANADialect.java b/hibernate-core/src/main/java/org/hibernate/dialect/AbstractHANADialect.java index 3cc11e0cbf..477810c4ce 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/AbstractHANADialect.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/AbstractHANADialect.java @@ -9,8 +9,10 @@ package org.hibernate.dialect; import org.hibernate.LockMode; import org.hibernate.LockOptions; import org.hibernate.ScrollMode; +import org.hibernate.boot.Metadata; import org.hibernate.boot.model.TypeContributions; import org.hibernate.boot.model.naming.Identifier; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.cfg.AvailableSettings; import org.hibernate.dialect.function.CommonFunctionFactory; import org.hibernate.dialect.identity.HANAIdentityColumnSupport; @@ -697,14 +699,16 @@ public abstract class AbstractHANADialect extends Dialect { private final StandardTableExporter hanaTableExporter = new StandardTableExporter( this ) { @Override - public String[] getSqlCreateStrings(Table table, org.hibernate.boot.Metadata metadata) { - String[] sqlCreateStrings = super.getSqlCreateStrings( table, metadata ); + public String[] getSqlCreateStrings(Table table, Metadata metadata, + SqlStringGenerationContext context) { + String[] sqlCreateStrings = super.getSqlCreateStrings( table, metadata, context ); return quoteTypeIfNecessary( table, sqlCreateStrings, getCreateTableString() ); } @Override - public String[] getSqlDropStrings(Table table, org.hibernate.boot.Metadata metadata) { - String[] sqlDropStrings = super.getSqlDropStrings( table, metadata ); + public String[] getSqlDropStrings(Table table, Metadata metadata, + SqlStringGenerationContext context) { + String[] sqlDropStrings = super.getSqlDropStrings( table, metadata, context ); return quoteTypeIfNecessary( table, sqlDropStrings, "drop table" ); } diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/SQLServerDialect.java b/hibernate-core/src/main/java/org/hibernate/dialect/SQLServerDialect.java index 4f85e08b04..7bf7947b51 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/SQLServerDialect.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/SQLServerDialect.java @@ -11,6 +11,7 @@ import org.hibernate.boot.Metadata; import org.hibernate.boot.model.TypeContributions; import org.hibernate.boot.model.relational.QualifiedSequenceName; import org.hibernate.boot.model.relational.Sequence; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.dialect.function.CommonFunctionFactory; import org.hibernate.dialect.function.SQLServerFormatEmulation; import org.hibernate.dialect.identity.IdentityColumnSupport; @@ -847,14 +848,12 @@ public class SQLServerDialect extends AbstractTransactSQLDialect { } @Override - protected String getFormattedSequenceName(QualifiedSequenceName name, Metadata metadata) { - if ( name.getCatalogName() != null ) { - // SQL Server does not allow the catalog in the sequence name. - // See https://docs.microsoft.com/en-us/sql/t-sql/statements/create-sequence-transact-sql?view=sql-server-ver15&viewFallbackFrom=sql-server-ver12 - // Keeping the catalog in the name does not break on ORM, but it fails using Vert.X for Reactive. - name = new QualifiedSequenceName( null, name.getSchemaName(), name.getObjectName() ); - } - return super.getFormattedSequenceName( name, metadata ); + protected String getFormattedSequenceName(QualifiedSequenceName name, Metadata metadata, + SqlStringGenerationContext context) { + // SQL Server does not allow the catalog in the sequence name. + // See https://docs.microsoft.com/en-us/sql/t-sql/statements/create-sequence-transact-sql?view=sql-server-ver15&viewFallbackFrom=sql-server-ver12 + // Keeping the catalog in the name does not break on ORM, but it fails using Vert.X for Reactive. + return context.formatWithoutCatalog( name ); } } diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/SpannerDialect.java b/hibernate-core/src/main/java/org/hibernate/dialect/SpannerDialect.java index 6c81531629..f4f6fc964c 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/SpannerDialect.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/SpannerDialect.java @@ -12,6 +12,7 @@ import org.hibernate.StaleObjectStateException; import org.hibernate.boot.Metadata; import org.hibernate.boot.model.relational.Exportable; import org.hibernate.boot.model.relational.Sequence; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.dialect.function.CommonFunctionFactory; import org.hibernate.dialect.lock.LockingStrategy; import org.hibernate.dialect.lock.LockingStrategyException; @@ -783,12 +784,12 @@ public class SpannerDialect extends Dialect { static class EmptyExporter implements Exporter { @Override - public String[] getSqlCreateStrings(T exportable, Metadata metadata) { + public String[] getSqlCreateStrings(T exportable, Metadata metadata, SqlStringGenerationContext context) { return ArrayHelper.EMPTY_STRING_ARRAY; } @Override - public String[] getSqlDropStrings(T exportable, Metadata metadata) { + public String[] getSqlDropStrings(T exportable, Metadata metadata, SqlStringGenerationContext context) { return ArrayHelper.EMPTY_STRING_ARRAY; } } @@ -818,22 +819,22 @@ public class SpannerDialect extends Dialect { static class DoNothingUniqueDelegate implements UniqueDelegate { @Override - public String getColumnDefinitionUniquenessFragment(Column column) { + public String getColumnDefinitionUniquenessFragment(Column column, SqlStringGenerationContext context) { return ""; } @Override - public String getTableCreationUniqueConstraintsFragment(Table table) { + public String getTableCreationUniqueConstraintsFragment(Table table, SqlStringGenerationContext context) { return ""; } @Override - public String getAlterTableToAddUniqueKeyCommand(UniqueKey uniqueKey, Metadata metadata) { + public String getAlterTableToAddUniqueKeyCommand(UniqueKey uniqueKey, Metadata metadata, SqlStringGenerationContext context) { return ""; } @Override - public String getAlterTableToDropUniqueKeyCommand(UniqueKey uniqueKey, Metadata metadata) { + public String getAlterTableToDropUniqueKeyCommand(UniqueKey uniqueKey, Metadata metadata, SqlStringGenerationContext context) { return ""; } } diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/SpannerDialectTableExporter.java b/hibernate-core/src/main/java/org/hibernate/dialect/SpannerDialectTableExporter.java index e63f603255..4286a4adf4 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/SpannerDialectTableExporter.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/SpannerDialectTableExporter.java @@ -7,6 +7,7 @@ package org.hibernate.dialect; import org.hibernate.boot.Metadata; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.id.enhanced.SequenceStyleGenerator; import org.hibernate.mapping.Column; import org.hibernate.mapping.Index; @@ -46,7 +47,7 @@ class SpannerDialectTableExporter implements Exporter { } @Override - public String[] getSqlCreateStrings(Table table, Metadata metadata) { + public String[] getSqlCreateStrings(Table table, Metadata metadata, SqlStringGenerationContext context) { Collection keyColumns; @@ -66,10 +67,10 @@ class SpannerDialectTableExporter implements Exporter
{ keyColumns = Collections.emptyList(); } - return getTableString( table, keyColumns ); + return getTableString( table, keyColumns, context ); } - private String[] getTableString(Table table, Iterable keyColumns) { + private String[] getTableString(Table table, Iterable keyColumns, SqlStringGenerationContext context) { String primaryKeyColNames = StreamSupport.stream( keyColumns.spliterator(), false ) .map( Column::getName ) .collect( Collectors.joining( "," ) ); @@ -90,7 +91,7 @@ class SpannerDialectTableExporter implements Exporter
{ statements.add( MessageFormat.format( this.createTableTemplate, - table.getQualifiedTableName().render(), + context.format( table.getQualifiedTableName() ), colsAndTypes.toString(), primaryKeyColNames ) ); @@ -105,7 +106,7 @@ class SpannerDialectTableExporter implements Exporter
{ } @Override - public String[] getSqlDropStrings(Table table, Metadata metadata) { + public String[] getSqlDropStrings(Table table, Metadata metadata, SqlStringGenerationContext context) { /* Cloud Spanner requires examining the metadata to find all indexes and interleaved tables. * These must be dropped before the given table can be dropped. @@ -118,7 +119,7 @@ class SpannerDialectTableExporter implements Exporter
{ dropStrings.add( "drop index " + index.next().getName() ); } - dropStrings.add( this.spannerDialect.getDropTableString( table.getQualifiedTableName().render() ) ); + dropStrings.add( this.spannerDialect.getDropTableString( context.format( table.getQualifiedTableName() ) ) ); return dropStrings.toArray( new String[0] ); } diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/unique/DB2UniqueDelegate.java b/hibernate-core/src/main/java/org/hibernate/dialect/unique/DB2UniqueDelegate.java index a0e53eb0a1..03c2d27215 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/unique/DB2UniqueDelegate.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/unique/DB2UniqueDelegate.java @@ -9,6 +9,7 @@ package org.hibernate.dialect.unique; import java.util.Iterator; import org.hibernate.boot.Metadata; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.dialect.Dialect; import org.hibernate.mapping.UniqueKey; @@ -29,10 +30,11 @@ public class DB2UniqueDelegate extends DefaultUniqueDelegate { } @Override - public String getAlterTableToAddUniqueKeyCommand(UniqueKey uniqueKey, Metadata metadata) { + public String getAlterTableToAddUniqueKeyCommand(UniqueKey uniqueKey, Metadata metadata, + SqlStringGenerationContext context) { if ( hasNullable( uniqueKey ) ) { return org.hibernate.mapping.Index.buildSqlCreateIndexString( - dialect, + context, uniqueKey.getName(), uniqueKey.getTable(), uniqueKey.getColumnIterator(), @@ -42,23 +44,21 @@ public class DB2UniqueDelegate extends DefaultUniqueDelegate { ); } else { - return super.getAlterTableToAddUniqueKeyCommand( uniqueKey, metadata ); + return super.getAlterTableToAddUniqueKeyCommand( uniqueKey, metadata, context ); } } @Override - public String getAlterTableToDropUniqueKeyCommand(UniqueKey uniqueKey, Metadata metadata) { + public String getAlterTableToDropUniqueKeyCommand(UniqueKey uniqueKey, Metadata metadata, + SqlStringGenerationContext context) { if ( hasNullable( uniqueKey ) ) { return org.hibernate.mapping.Index.buildSqlDropIndexString( uniqueKey.getName(), - metadata.getDatabase().getJdbcEnvironment().getQualifiedObjectNameFormatter().format( - uniqueKey.getTable().getQualifiedTableName(), - metadata.getDatabase().getJdbcEnvironment().getDialect() - ) + context.format( uniqueKey.getTable().getQualifiedTableName() ) ); } else { - return super.getAlterTableToDropUniqueKeyCommand( uniqueKey, metadata ); + return super.getAlterTableToDropUniqueKeyCommand( uniqueKey, metadata, context ); } } diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/unique/DefaultUniqueDelegate.java b/hibernate-core/src/main/java/org/hibernate/dialect/unique/DefaultUniqueDelegate.java index d40d8b000f..4be0a984f9 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/unique/DefaultUniqueDelegate.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/unique/DefaultUniqueDelegate.java @@ -9,8 +9,10 @@ package org.hibernate.dialect.unique; import java.util.Iterator; import org.hibernate.boot.Metadata; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.dialect.Dialect; -import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment; +import org.hibernate.mapping.Column; +import org.hibernate.mapping.Table; import org.hibernate.mapping.UniqueKey; /** @@ -34,23 +36,21 @@ public class DefaultUniqueDelegate implements UniqueDelegate { // legacy model ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @Override - public String getColumnDefinitionUniquenessFragment(org.hibernate.mapping.Column column) { + public String getColumnDefinitionUniquenessFragment(Column column, + SqlStringGenerationContext context) { return ""; } @Override - public String getTableCreationUniqueConstraintsFragment(org.hibernate.mapping.Table table) { + public String getTableCreationUniqueConstraintsFragment(Table table, + SqlStringGenerationContext context) { return ""; } @Override - public String getAlterTableToAddUniqueKeyCommand(UniqueKey uniqueKey, Metadata metadata) { - final JdbcEnvironment jdbcEnvironment = metadata.getDatabase().getJdbcEnvironment(); - - final String tableName = jdbcEnvironment.getQualifiedObjectNameFormatter().format( - uniqueKey.getTable().getQualifiedTableName(), - dialect - ); + public String getAlterTableToAddUniqueKeyCommand(UniqueKey uniqueKey, Metadata metadata, + SqlStringGenerationContext context) { + final String tableName = context.format( uniqueKey.getTable().getQualifiedTableName() ); final String constraintName = dialect.quote( uniqueKey.getName() ); return dialect.getAlterTableString( tableName ) @@ -76,13 +76,9 @@ public class DefaultUniqueDelegate implements UniqueDelegate { } @Override - public String getAlterTableToDropUniqueKeyCommand(UniqueKey uniqueKey, Metadata metadata) { - final JdbcEnvironment jdbcEnvironment = metadata.getDatabase().getJdbcEnvironment(); - - final String tableName = jdbcEnvironment.getQualifiedObjectNameFormatter().format( - uniqueKey.getTable().getQualifiedTableName(), - dialect - ); + public String getAlterTableToDropUniqueKeyCommand(UniqueKey uniqueKey, Metadata metadata, + SqlStringGenerationContext context) { + final String tableName = context.format( uniqueKey.getTable().getQualifiedTableName() ); final StringBuilder buf = new StringBuilder( dialect.getAlterTableString(tableName) ); buf.append( getDropUnique() ); diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/unique/UniqueDelegate.java b/hibernate-core/src/main/java/org/hibernate/dialect/unique/UniqueDelegate.java index fd540c0a61..99e4d1e763 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/unique/UniqueDelegate.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/unique/UniqueDelegate.java @@ -7,6 +7,9 @@ package org.hibernate.dialect.unique; import org.hibernate.boot.Metadata; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; +import org.hibernate.mapping.Column; +import org.hibernate.mapping.Table; import org.hibernate.mapping.UniqueKey; /** @@ -38,11 +41,11 @@ public interface UniqueDelegate { * This is intended for dialects which do not support unique constraints * * @param column The column to which to apply the unique - * + * @param context A context for SQL string generation * @return The fragment (usually "unique"), empty string indicates the uniqueness will be indicated using a * different approach */ - public String getColumnDefinitionUniquenessFragment(org.hibernate.mapping.Column column); + public String getColumnDefinitionUniquenessFragment(Column column, SqlStringGenerationContext context); /** * Get the fragment that can be used to apply unique constraints as part of table creation. The implementation @@ -53,30 +56,32 @@ public interface UniqueDelegate { * Intended for Dialects which support unique constraint definitions, but just not in separate ALTER statements. * * @param table The table for which to generate the unique constraints fragment - * + * @param context A context for SQL string generation * @return The fragment, typically in the form {@code ", unique(col1, col2), unique( col20)"}. NOTE: The leading * comma is important! */ - public String getTableCreationUniqueConstraintsFragment(org.hibernate.mapping.Table table); + public String getTableCreationUniqueConstraintsFragment(Table table, SqlStringGenerationContext context); /** * Get the SQL ALTER TABLE command to be used to create the given UniqueKey. * * @param uniqueKey The UniqueKey instance. Contains all information about the columns * @param metadata Access to the bootstrap mapping information - * + * @param context A context for SQL string generation * @return The ALTER TABLE command */ - public String getAlterTableToAddUniqueKeyCommand(UniqueKey uniqueKey, Metadata metadata); + public String getAlterTableToAddUniqueKeyCommand(UniqueKey uniqueKey, Metadata metadata, + SqlStringGenerationContext context); /** * Get the SQL ALTER TABLE command to be used to drop the given UniqueKey. * * @param uniqueKey The UniqueKey instance. Contains all information about the columns * @param metadata Access to the bootstrap mapping information - * + * @param context A context for SQL string generation * @return The ALTER TABLE command */ - public String getAlterTableToDropUniqueKeyCommand(UniqueKey uniqueKey, Metadata metadata); + public String getAlterTableToDropUniqueKeyCommand(UniqueKey uniqueKey, Metadata metadata, + SqlStringGenerationContext context); } diff --git a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/spi/JdbcEnvironment.java b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/spi/JdbcEnvironment.java index d6ff61ec57..51ba001070 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/spi/JdbcEnvironment.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/spi/JdbcEnvironment.java @@ -58,7 +58,9 @@ public interface JdbcEnvironment extends Service { * Obtain support for formatting qualified object names. * * @return Qualified name support. + * @deprecated Use a provided {@link org.hibernate.boot.model.relational.SqlStringGenerationContext} instead. */ + @Deprecated QualifiedObjectNameFormatter getQualifiedObjectNameFormatter(); /** diff --git a/hibernate-core/src/main/java/org/hibernate/internal/FilterConfiguration.java b/hibernate-core/src/main/java/org/hibernate/internal/FilterConfiguration.java index ac090ec44e..4babf86c5f 100644 --- a/hibernate-core/src/main/java/org/hibernate/internal/FilterConfiguration.java +++ b/hibernate-core/src/main/java/org/hibernate/internal/FilterConfiguration.java @@ -59,7 +59,7 @@ public class FilterConfiguration { } else if ( persistentClass != null ) { String table = persistentClass.getTable().getQualifiedName( - factory.getDialect(), + factory.getSqlStringGenerationContext(), factory.getSettings().getDefaultCatalogName(), factory.getSettings().getDefaultSchemaName() ); diff --git a/hibernate-core/src/main/java/org/hibernate/mapping/Constraint.java b/hibernate-core/src/main/java/org/hibernate/mapping/Constraint.java index bb10074dd7..7a8aab6f41 100644 --- a/hibernate-core/src/main/java/org/hibernate/mapping/Constraint.java +++ b/hibernate-core/src/main/java/org/hibernate/mapping/Constraint.java @@ -18,6 +18,7 @@ import java.util.Locale; import org.hibernate.HibernateException; import org.hibernate.boot.model.relational.Exportable; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.dialect.Dialect; import org.hibernate.engine.spi.Mapping; import org.hibernate.internal.util.StringHelper; @@ -168,9 +169,12 @@ public abstract class Constraint implements RelationalModel, Exportable, Seriali return true; } - public String sqlDropString(Dialect dialect, String defaultCatalog, String defaultSchema) { + @Override + public String sqlDropString(SqlStringGenerationContext context, + String defaultCatalog, String defaultSchema) { + Dialect dialect = context.getDialect(); if ( isGenerated( dialect ) ) { - final String tableName = getTable().getQualifiedName( dialect, defaultCatalog, defaultSchema ); + final String tableName = getTable().getQualifiedName( context, defaultCatalog, defaultSchema ); return String.format( Locale.ROOT, "%s evictData constraint %s", @@ -183,14 +187,17 @@ public abstract class Constraint implements RelationalModel, Exportable, Seriali } } - public String sqlCreateString(Dialect dialect, Mapping p, String defaultCatalog, String defaultSchema) { + @Override + public String sqlCreateString(Mapping p, SqlStringGenerationContext context, String defaultCatalog, + String defaultSchema) { + Dialect dialect = context.getDialect(); if ( isGenerated( dialect ) ) { // Certain dialects (ex: HANA) don't support FKs as expected, but other constraints can still be created. // If that's the case, hasAlterTable() will be true, but getAddForeignKeyConstraintString will return // empty string. Prevent blank "alter table" statements. - String constraintString = sqlConstraintString( dialect, getName(), defaultCatalog, defaultSchema ); + String constraintString = sqlConstraintString( context, getName(), defaultCatalog, defaultSchema ); if ( !StringHelper.isEmpty( constraintString ) ) { - final String tableName = getTable().getQualifiedName( dialect, defaultCatalog, defaultSchema ); + final String tableName = getTable().getQualifiedName( context, defaultCatalog, defaultSchema ); return dialect.getAlterTableString( tableName ) + " " + constraintString; } } @@ -202,7 +209,7 @@ public abstract class Constraint implements RelationalModel, Exportable, Seriali } public abstract String sqlConstraintString( - Dialect d, + SqlStringGenerationContext context, String constraintName, String defaultCatalog, String defaultSchema); diff --git a/hibernate-core/src/main/java/org/hibernate/mapping/ForeignKey.java b/hibernate-core/src/main/java/org/hibernate/mapping/ForeignKey.java index dc3411efc0..70efeab172 100644 --- a/hibernate-core/src/main/java/org/hibernate/mapping/ForeignKey.java +++ b/hibernate-core/src/main/java/org/hibernate/mapping/ForeignKey.java @@ -11,6 +11,7 @@ import java.util.Iterator; import java.util.List; import org.hibernate.MappingException; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.dialect.Dialect; import org.hibernate.internal.util.StringHelper; @@ -54,11 +55,13 @@ public class ForeignKey extends Constraint { } } + @Override public String sqlConstraintString( - Dialect dialect, + SqlStringGenerationContext context, String constraintName, String defaultCatalog, String defaultSchema) { + Dialect dialect = context.getDialect(); String[] columnNames = new String[getColumnSpan()]; String[] referencedColumnNames = new String[getColumnSpan()]; @@ -87,7 +90,7 @@ public class ForeignKey extends Constraint { constraintName, columnNames, referencedTable.getQualifiedName( - dialect, + context, defaultCatalog, defaultSchema ), @@ -172,8 +175,11 @@ public class ForeignKey extends Constraint { this.keyDefinition = keyDefinition; } - public String sqlDropString(Dialect dialect, String defaultCatalog, String defaultSchema) { - String tableName = getTable().getQualifiedName( dialect, defaultCatalog, defaultSchema ); + @Override + public String sqlDropString(SqlStringGenerationContext context, + String defaultCatalog, String defaultSchema) { + Dialect dialect = context.getDialect(); + String tableName = getTable().getQualifiedName( context, defaultCatalog, defaultSchema ); final StringBuilder buf = new StringBuilder( dialect.getAlterTableString( tableName ) ); buf.append( dialect.getDropForeignKeyString() ); if ( dialect.supportsIfExistsBeforeConstraintName() ) { diff --git a/hibernate-core/src/main/java/org/hibernate/mapping/Index.java b/hibernate-core/src/main/java/org/hibernate/mapping/Index.java index 7268afa0e9..24f9dd14f4 100644 --- a/hibernate-core/src/main/java/org/hibernate/mapping/Index.java +++ b/hibernate-core/src/main/java/org/hibernate/mapping/Index.java @@ -16,8 +16,8 @@ import org.hibernate.HibernateException; import org.hibernate.boot.Metadata; import org.hibernate.boot.model.naming.Identifier; import org.hibernate.boot.model.relational.Exportable; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.dialect.Dialect; -import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment; import org.hibernate.engine.spi.Mapping; import org.hibernate.internal.util.StringHelper; @@ -32,10 +32,13 @@ public class Index implements RelationalModel, Exportable, Serializable { private java.util.Map columnOrderMap = new HashMap<>( ); private Identifier name; - public String sqlCreateString(Dialect dialect, Mapping mapping, String defaultCatalog, String defaultSchema) + @Override + public String sqlCreateString(Mapping mapping, SqlStringGenerationContext context, String defaultCatalog, + String defaultSchema) throws HibernateException { + Dialect dialect = context.getDialect(); return buildSqlCreateIndexString( - dialect, + context, getQuotedName( dialect ), getTable(), getColumnIterator(), @@ -47,12 +50,12 @@ public class Index implements RelationalModel, Exportable, Serializable { } public static String buildSqlDropIndexString( - Dialect dialect, + SqlStringGenerationContext context, Table table, String name, String defaultCatalog, String defaultSchema) { - return buildSqlDropIndexString( name, table.getQualifiedName( dialect, defaultCatalog, defaultSchema ) ); + return buildSqlDropIndexString( name, table.getQualifiedName( context, defaultCatalog, defaultSchema ) ); } public static String buildSqlDropIndexString( @@ -62,7 +65,7 @@ public class Index implements RelationalModel, Exportable, Serializable { } public static String buildSqlCreateIndexString( - Dialect dialect, + SqlStringGenerationContext context, String name, Table table, Iterator columns, @@ -71,9 +74,9 @@ public class Index implements RelationalModel, Exportable, Serializable { String defaultCatalog, String defaultSchema) { return buildSqlCreateIndexString( - dialect, + context.getDialect(), name, - table.getQualifiedName( dialect, defaultCatalog, defaultSchema ), + table.getQualifiedName( context, defaultCatalog, defaultSchema ), columns, columnOrderMap, unique @@ -109,42 +112,17 @@ public class Index implements RelationalModel, Exportable, Serializable { } public static String buildSqlCreateIndexString( - Dialect dialect, - String name, - Table table, - Iterator columns, - boolean unique, - String defaultCatalog, - String defaultSchema) { - return buildSqlCreateIndexString( - dialect, - name, - table, - columns, - Collections.EMPTY_MAP, - unique, - defaultCatalog, - defaultSchema - ); - } - - public static String buildSqlCreateIndexString( - Dialect dialect, + SqlStringGenerationContext context, String name, Table table, Iterator columns, java.util.Map columnOrderMap, boolean unique, Metadata metadata) { - final JdbcEnvironment jdbcEnvironment = metadata.getDatabase().getJdbcEnvironment(); - - final String tableName = jdbcEnvironment.getQualifiedObjectNameFormatter().format( - table.getQualifiedTableName(), - dialect - ); + final String tableName = context.format( table.getQualifiedTableName() ); return buildSqlCreateIndexString( - dialect, + context.getDialect(), name, tableName, columns, @@ -168,10 +146,12 @@ public class Index implements RelationalModel, Exportable, Serializable { } @Override - public String sqlDropString(Dialect dialect, String defaultCatalog, String defaultSchema) { + public String sqlDropString(SqlStringGenerationContext context, + String defaultCatalog, String defaultSchema) { + Dialect dialect = context.getDialect(); return "drop index " + StringHelper.qualify( - table.getQualifiedName( dialect, defaultCatalog, defaultSchema ), + table.getQualifiedName( context, defaultCatalog, defaultSchema ), getQuotedName( dialect ) ); } diff --git a/hibernate-core/src/main/java/org/hibernate/mapping/PrimaryKey.java b/hibernate-core/src/main/java/org/hibernate/mapping/PrimaryKey.java index 1b2f8d5fae..98d11fbb13 100644 --- a/hibernate-core/src/main/java/org/hibernate/mapping/PrimaryKey.java +++ b/hibernate-core/src/main/java/org/hibernate/mapping/PrimaryKey.java @@ -7,6 +7,7 @@ package org.hibernate.mapping; import java.util.Iterator; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.dialect.Dialect; import org.hibernate.internal.util.StringHelper; @@ -71,7 +72,9 @@ public class PrimaryKey extends Constraint { return buf.append(')').toString(); } - public String sqlConstraintString(Dialect dialect, String constraintName, String defaultCatalog, String defaultSchema) { + @Override + public String sqlConstraintString(SqlStringGenerationContext context, String constraintName, String defaultCatalog, String defaultSchema) { + Dialect dialect = context.getDialect(); StringBuilder buf = new StringBuilder( dialect.getAddPrimaryKeyConstraintString(constraintName) ).append('('); diff --git a/hibernate-core/src/main/java/org/hibernate/mapping/RelationalModel.java b/hibernate-core/src/main/java/org/hibernate/mapping/RelationalModel.java index 167a28bc1a..3f011773fe 100644 --- a/hibernate-core/src/main/java/org/hibernate/mapping/RelationalModel.java +++ b/hibernate-core/src/main/java/org/hibernate/mapping/RelationalModel.java @@ -6,7 +6,7 @@ */ package org.hibernate.mapping; import org.hibernate.HibernateException; -import org.hibernate.dialect.Dialect; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.engine.spi.Mapping; /** @@ -17,6 +17,6 @@ import org.hibernate.engine.spi.Mapping; */ @Deprecated public interface RelationalModel { - String sqlCreateString(Dialect dialect, Mapping p, String defaultCatalog, String defaultSchema) throws HibernateException; - String sqlDropString(Dialect dialect, String defaultCatalog, String defaultSchema); + String sqlCreateString(Mapping p, SqlStringGenerationContext context, String defaultCatalog, String defaultSchema) throws HibernateException; + String sqlDropString(SqlStringGenerationContext context, String defaultCatalog, String defaultSchema); } diff --git a/hibernate-core/src/main/java/org/hibernate/mapping/Table.java b/hibernate-core/src/main/java/org/hibernate/mapping/Table.java index 7fd5b3c688..adbdba6598 100644 --- a/hibernate-core/src/main/java/org/hibernate/mapping/Table.java +++ b/hibernate-core/src/main/java/org/hibernate/mapping/Table.java @@ -27,8 +27,7 @@ import org.hibernate.boot.model.relational.Namespace; import org.hibernate.boot.model.relational.QualifiedTableName; import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.dialect.Dialect; -import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment; -import org.hibernate.engine.jdbc.env.spi.QualifiedObjectNameFormatter; +import org.hibernate.engine.jdbc.env.spi.IdentifierHelper; import org.hibernate.engine.spi.Mapping; import org.hibernate.tool.schema.extract.spi.ColumnInformation; import org.hibernate.tool.schema.extract.spi.TableInformation; @@ -122,28 +121,23 @@ public class Table implements RelationalModel, Serializable, ContributableDataba return contributor; } - /** - * @deprecated Should use {@link QualifiedObjectNameFormatter#format} on QualifiedObjectNameFormatter - * obtained from {@link JdbcEnvironment} - */ - @Deprecated - public String getQualifiedName(Dialect dialect, String defaultCatalog, String defaultSchema) { + public String getQualifiedName(SqlStringGenerationContext context, String defaultCatalog, String defaultSchema) { if ( subselect != null ) { return "( " + subselect + " )"; } - String quotedName = getQuotedName( dialect ); - String usedSchema = schema == null ? - defaultSchema : - getQuotedSchema( dialect ); - String usedCatalog = catalog == null ? - defaultCatalog : - getQuotedCatalog( dialect ); - return qualify( usedCatalog, usedSchema, quotedName ); + IdentifierHelper identifierHelper = context.getIdentifierHelper(); + Identifier usedSchema = schema == null ? + identifierHelper.toIdentifier( defaultSchema ) : + schema; + Identifier usedCatalog = catalog == null ? + identifierHelper.toIdentifier( defaultCatalog ) : + catalog; + return context.format( new QualifiedTableName( usedCatalog, usedSchema, name ) ); } /** - * @deprecated Should use {@link QualifiedObjectNameFormatter#format} on QualifiedObjectNameFormatter - * obtained from {@link JdbcEnvironment} + * @deprecated Should build a {@link QualifiedTableName} + * then use {@link SqlStringGenerationContext#format(QualifiedTableName)}. */ @Deprecated public static String qualify(String catalog, String schema, String table) { @@ -429,17 +423,14 @@ public class Table implements RelationalModel, Serializable, ContributableDataba Metadata metadata, TableInformation tableInfo, Identifier defaultCatalog, - Identifier defaultSchema) throws HibernateException { - - final JdbcEnvironment jdbcEnvironment = metadata.getDatabase().getJdbcEnvironment(); - - final String tableName = jdbcEnvironment.getQualifiedObjectNameFormatter().format( + Identifier defaultSchema, + SqlStringGenerationContext sqlStringGenerationContext) throws HibernateException { + final String tableName = sqlStringGenerationContext.format( new QualifiedTableName( catalog != null ? catalog : defaultCatalog, schema != null ? schema : defaultSchema, name - ), - dialect + ) ); StringBuilder root = new StringBuilder( dialect.getAlterTableString( tableName ) ) @@ -479,7 +470,7 @@ public class Table implements RelationalModel, Serializable, ContributableDataba UniqueKey uk = getOrCreateUniqueKey( keyName ); uk.addColumn( column ); alter.append( dialect.getUniqueDelegate() - .getColumnDefinitionUniquenessFragment( column ) ); + .getColumnDefinitionUniquenessFragment( column, sqlStringGenerationContext ) ); } String checkConstraint = column.checkConstraint(); @@ -510,10 +501,13 @@ public class Table implements RelationalModel, Serializable, ContributableDataba return getPrimaryKey() != null; } - public String sqlCreateString(Dialect dialect, Mapping p, String defaultCatalog, String defaultSchema) { + @Override + public String sqlCreateString(Mapping p, SqlStringGenerationContext context, String defaultCatalog, + String defaultSchema) { + Dialect dialect = context.getDialect(); StringBuilder buf = new StringBuilder( hasPrimaryKey() ? dialect.getCreateTableString() : dialect.getCreateMultisetTableString() ) .append( ' ' ) - .append( getQualifiedName( dialect, defaultCatalog, defaultSchema ) ) + .append( getQualifiedName( context, defaultCatalog, defaultSchema ) ) .append( " (" ); boolean identityColumn = idValue != null && idValue.isIdentityColumn( p.getIdentifierGeneratorFactory(), dialect ); @@ -562,7 +556,7 @@ public class Table implements RelationalModel, Serializable, ContributableDataba UniqueKey uk = getOrCreateUniqueKey( keyName ); uk.addColumn( col ); buf.append( dialect.getUniqueDelegate() - .getColumnDefinitionUniquenessFragment( col ) ); + .getColumnDefinitionUniquenessFragment( col, context ) ); } String checkConstraint = col.checkConstraint(); @@ -585,7 +579,7 @@ public class Table implements RelationalModel, Serializable, ContributableDataba .append( getPrimaryKey().sqlConstraintString( dialect ) ); } - buf.append( dialect.getUniqueDelegate().getTableCreationUniqueConstraintsFragment( this ) ); + buf.append( dialect.getUniqueDelegate().getTableCreationUniqueConstraintsFragment( this, context ) ); if ( dialect.supportsTableCheck() ) { for ( String checkConstraint : checkConstraints ) { @@ -604,8 +598,10 @@ public class Table implements RelationalModel, Serializable, ContributableDataba return buf.append( dialect.getTableTypeString() ).toString(); } - public String sqlDropString(Dialect dialect, String defaultCatalog, String defaultSchema) { - return dialect.getDropTableString( getQualifiedName( dialect, defaultCatalog, defaultSchema ) ); + @Override + public String sqlDropString(SqlStringGenerationContext context, String defaultCatalog, String defaultSchema) { + Dialect dialect = context.getDialect(); + return dialect.getDropTableString( getQualifiedName( context, defaultCatalog, defaultSchema ) ); } public PrimaryKey getPrimaryKey() { @@ -811,25 +807,6 @@ public class Table implements RelationalModel, Serializable, ContributableDataba return checkConstraints.iterator(); } - public Iterator sqlCommentStrings(Dialect dialect, String defaultCatalog, String defaultSchema) { - List comments = new ArrayList<>(); - if ( dialect.supportsCommentOn() ) { - String tableName = getQualifiedName( dialect, defaultCatalog, defaultSchema ); - if ( comment != null ) { - comments.add( "comment on table " + tableName + " is '" + comment + "'" ); - } - Iterator iter = getColumnIterator(); - while ( iter.hasNext() ) { - Column column = (Column) iter.next(); - String columnComment = column.getComment(); - if ( columnComment != null ) { - comments.add( "comment on column " + tableName + '.' + column.getQuotedName( dialect ) + " is '" + columnComment + "'" ); - } - } - } - return comments.iterator(); - } - @Override public String getExportIdentifier() { return Table.qualify( diff --git a/hibernate-core/src/main/java/org/hibernate/mapping/UniqueKey.java b/hibernate-core/src/main/java/org/hibernate/mapping/UniqueKey.java index 0da7000c94..c6e96c09c2 100644 --- a/hibernate-core/src/main/java/org/hibernate/mapping/UniqueKey.java +++ b/hibernate-core/src/main/java/org/hibernate/mapping/UniqueKey.java @@ -9,6 +9,7 @@ package org.hibernate.mapping; import java.util.HashMap; import java.util.Map; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.dialect.Dialect; import org.hibernate.engine.spi.Mapping; import org.hibernate.internal.util.StringHelper; @@ -23,7 +24,7 @@ public class UniqueKey extends Constraint { @Override public String sqlConstraintString( - Dialect dialect, + SqlStringGenerationContext context, String constraintName, String defaultCatalog, String defaultSchema) { @@ -34,9 +35,8 @@ public class UniqueKey extends Constraint { @Override public String sqlCreateString( - Dialect dialect, Mapping p, - String defaultCatalog, + SqlStringGenerationContext context, String defaultCatalog, String defaultSchema) { return null; // return dialect.getUniqueDelegate().getAlterTableToAddUniqueKeyCommand( @@ -46,8 +46,7 @@ public class UniqueKey extends Constraint { @Override public String sqlDropString( - Dialect dialect, - String defaultCatalog, + SqlStringGenerationContext context, String defaultCatalog, String defaultSchema) { return null; // return dialect.getUniqueDelegate().getAlterTableToDropUniqueKeyCommand( diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/EmbeddableMappingType.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/EmbeddableMappingType.java index 213c16d6d1..cb1c26cc90 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/EmbeddableMappingType.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/EmbeddableMappingType.java @@ -9,6 +9,22 @@ package org.hibernate.metamodel.mapping; import java.util.List; import java.util.function.BiConsumer; +import org.hibernate.MappingException; +import org.hibernate.NotYetImplementedFor6Exception; +import org.hibernate.SharedSessionContract; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; +import org.hibernate.cfg.Environment; +import org.hibernate.dialect.Dialect; +import org.hibernate.engine.FetchTiming; +import org.hibernate.engine.config.spi.ConfigurationService; +import org.hibernate.engine.spi.CascadeStyle; +import org.hibernate.engine.spi.SessionFactoryImplementor; +import org.hibernate.engine.spi.SharedSessionContractImplementor; +import org.hibernate.internal.util.config.ConfigurationHelper; +import org.hibernate.mapping.Any; +import org.hibernate.mapping.BasicValue; +import org.hibernate.mapping.Column; +import org.hibernate.mapping.Component; import org.hibernate.mapping.IndexedConsumer; import org.hibernate.metamodel.mapping.internal.EmbeddedAttributeMapping; import org.hibernate.metamodel.mapping.internal.MappingModelCreationProcess; diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/DiscriminatedAssociationMapping.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/DiscriminatedAssociationMapping.java index 1713956096..3dfdc4d1bf 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/DiscriminatedAssociationMapping.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/DiscriminatedAssociationMapping.java @@ -15,9 +15,10 @@ import java.util.Map; import java.util.function.Consumer; import java.util.function.Function; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; +import org.hibernate.dialect.Dialect; import org.hibernate.engine.FetchStyle; import org.hibernate.engine.FetchTiming; -import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment; import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.mapping.Any; @@ -65,11 +66,9 @@ public class DiscriminatedAssociationMapping implements MappingType, FetchOption MappingModelCreationProcess creationProcess) { final SessionFactoryImplementor sessionFactory = creationProcess.getCreationContext().getSessionFactory(); - final JdbcEnvironment jdbcEnvironment = sessionFactory.getJdbcServices().getJdbcEnvironment(); - final String tableName = jdbcEnvironment.getQualifiedObjectNameFormatter().format( - bootValueMapping.getTable().getQualifiedTableName(), - jdbcEnvironment.getDialect() - ); + final SqlStringGenerationContext sqlStringGenerationContext = sessionFactory.getSqlStringGenerationContext(); + final Dialect dialect = sqlStringGenerationContext.getDialect(); + final String tableName = sqlStringGenerationContext.format( bootValueMapping.getTable().getQualifiedTableName() ); assert bootValueMapping.getColumnSpan() == 2; final Iterator columnIterator = bootValueMapping.getColumnIterator(); @@ -86,7 +85,7 @@ public class DiscriminatedAssociationMapping implements MappingType, FetchOption containerRole.append( AnyDiscriminatorPart.ROLE_NAME), declaringModelPart, tableName, - metaColumn.getText( jdbcEnvironment.getDialect() ), + metaColumn.getText( dialect ), bootValueMapping.isNullable(), (MetaType) anyType.getDiscriminatorType() ); @@ -97,7 +96,7 @@ public class DiscriminatedAssociationMapping implements MappingType, FetchOption containerRole.append( AnyKeyPart.ROLE_NAME), declaringModelPart, tableName, - keyColumn.getText( jdbcEnvironment.getDialect() ), + keyColumn.getText( dialect ), bootValueMapping.isNullable(), keyType ); diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/EmbeddableMappingTypeImpl.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/EmbeddableMappingTypeImpl.java index 65b8acfee0..884d251107 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/EmbeddableMappingTypeImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/EmbeddableMappingTypeImpl.java @@ -17,6 +17,7 @@ import java.util.function.Function; import org.hibernate.MappingException; import org.hibernate.NotYetImplementedFor6Exception; import org.hibernate.SharedSessionContract; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.cfg.Environment; import org.hibernate.dialect.Dialect; import org.hibernate.engine.FetchTiming; @@ -339,7 +340,7 @@ public class EmbeddableMappingTypeImpl extends AbstractEmbeddableMapping impleme if ( selectable instanceof Column ) { containingTableExpression = getTableIdentifierExpression( ( (Column) selectable ).getValue().getTable(), - jdbcEnvironment + creationProcess ); } else { @@ -556,12 +557,11 @@ public class EmbeddableMappingTypeImpl extends AbstractEmbeddableMapping impleme return true; } - private static String getTableIdentifierExpression(Table table, JdbcEnvironment jdbcEnvironment) { - return jdbcEnvironment - .getQualifiedObjectNameFormatter().format( - table.getQualifiedTableName(), - jdbcEnvironment.getDialect() - ); + private static String getTableIdentifierExpression(Table table, MappingModelCreationProcess creationProcess) { + final SqlStringGenerationContext sqlStringGenerationContext = creationProcess.getCreationContext() + .getSessionFactory() + .getSqlStringGenerationContext(); + return sqlStringGenerationContext.format( table.getQualifiedTableName() ); } private boolean initColumnMappings() { diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/IdClassEmbeddable.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/IdClassEmbeddable.java index afaddd62e8..a582040207 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/IdClassEmbeddable.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/IdClassEmbeddable.java @@ -10,9 +10,9 @@ import java.util.List; import java.util.function.Consumer; import org.hibernate.NotYetImplementedFor6Exception; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.engine.FetchStyle; import org.hibernate.engine.FetchTiming; -import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment; import org.hibernate.engine.spi.EntityKey; import org.hibernate.engine.spi.PersistenceContext; import org.hibernate.engine.spi.SessionFactoryImplementor; @@ -476,7 +476,7 @@ public class IdClassEmbeddable extends AbstractEmbeddableMapping implements Iden throw new IllegalAttributeType( "An IdClass cannot define attributes : " + attributeName ); } }, - (column, jdbcEnvironment) -> getTableIdentifierExpression( column.getValue().getTable(), jdbcEnvironment ), + (column, jdbcEnvironment) -> getTableIdentifierExpression( column.getValue().getTable(), creationProcess ), this::addAttribute, () -> { // We need the attribute mapping types to finish initialization first before we can build the column mappings @@ -489,12 +489,11 @@ public class IdClassEmbeddable extends AbstractEmbeddableMapping implements Iden ); } - private static String getTableIdentifierExpression(Table table, JdbcEnvironment jdbcEnvironment) { - return jdbcEnvironment - .getQualifiedObjectNameFormatter().format( - table.getQualifiedTableName(), - jdbcEnvironment.getDialect() - ); + private static String getTableIdentifierExpression(Table table, MappingModelCreationProcess creationProcess) { + final SqlStringGenerationContext sqlStringGenerationContext = creationProcess.getCreationContext() + .getSessionFactory() + .getSqlStringGenerationContext(); + return sqlStringGenerationContext.format( table.getQualifiedTableName() ); } private boolean initColumnMappings() { diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/MappingModelCreationHelper.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/MappingModelCreationHelper.java index 236361878f..d8cee0dfad 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/MappingModelCreationHelper.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/MappingModelCreationHelper.java @@ -16,6 +16,7 @@ import org.hibernate.FetchMode; import org.hibernate.MappingException; import org.hibernate.NotYetImplementedFor6Exception; import org.hibernate.SharedSessionContract; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.collection.internal.StandardArraySemantics; import org.hibernate.collection.internal.StandardBagSemantics; import org.hibernate.collection.internal.StandardIdentifierBagSemantics; @@ -24,7 +25,6 @@ import org.hibernate.collection.spi.CollectionSemantics; import org.hibernate.dialect.Dialect; import org.hibernate.engine.FetchStyle; import org.hibernate.engine.FetchTiming; -import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment; import org.hibernate.engine.spi.CascadeStyle; import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.internal.util.StringHelper; @@ -524,8 +524,8 @@ public class MappingModelCreationHelper { final RuntimeModelCreationContext creationContext = creationProcess.getCreationContext(); final SessionFactoryImplementor sessionFactory = creationContext.getSessionFactory(); - final JdbcEnvironment jdbcEnvironment = sessionFactory.getJdbcServices().getJdbcEnvironment(); - final Dialect dialect = jdbcEnvironment.getDialect(); + final SqlStringGenerationContext sqlStringGenerationContext = sessionFactory.getSqlStringGenerationContext(); + final Dialect dialect = sqlStringGenerationContext.getDialect(); final MappingMetamodel domainModel = creationContext.getDomainModel(); final CollectionPersister collectionDescriptor = domainModel.findCollectionDescriptor( bootValueMapping.getRole() ); @@ -644,9 +644,8 @@ public class MappingModelCreationHelper { ); final String mapKeyTableExpression; if ( bootValueMapping instanceof Map && ( (Map) bootValueMapping ).getMapKeyPropertyName() != null ) { - mapKeyTableExpression = jdbcEnvironment.getQualifiedObjectNameFormatter().format( - ( (Map) bootValueMapping ).getIndex().getTable().getQualifiedTableName(), - dialect + mapKeyTableExpression = sqlStringGenerationContext.format( + ( (Map) bootValueMapping ).getIndex().getTable().getQualifiedTableName() ); } else { @@ -1281,14 +1280,10 @@ public class MappingModelCreationHelper { } private static String getTableIdentifierExpression(Table table, MappingModelCreationProcess creationProcess) { - final JdbcEnvironment jdbcEnvironment = creationProcess.getCreationContext() - .getMetadata() - .getDatabase() - .getJdbcEnvironment(); - return jdbcEnvironment.getQualifiedObjectNameFormatter().format( - table.getQualifiedTableName(), - jdbcEnvironment.getDialect() - ); + final SqlStringGenerationContext sqlStringGenerationContext = creationProcess.getCreationContext() + .getSessionFactory() + .getSqlStringGenerationContext(); + return sqlStringGenerationContext.format( table.getQualifiedTableName() ); } private static CollectionPart interpretMapKey( diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/ToOneAttributeMapping.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/ToOneAttributeMapping.java index 4c6d66fc35..2620deb09e 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/ToOneAttributeMapping.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/ToOneAttributeMapping.java @@ -15,9 +15,9 @@ import java.util.function.BiConsumer; import java.util.function.Consumer; import org.hibernate.LockMode; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.engine.FetchStyle; import org.hibernate.engine.FetchTiming; -import org.hibernate.engine.jdbc.spi.JdbcServices; import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.internal.util.StringHelper; @@ -270,13 +270,8 @@ public class ToOneAttributeMapping isKeyTableNullable = true; } else { - final JdbcServices jdbcServices = declaringEntityPersister.getFactory().getJdbcServices(); - final String targetTableName = jdbcServices.getJdbcEnvironment() - .getQualifiedObjectNameFormatter() - .format( - manyToOne.getTable().getQualifiedTableName(), - jdbcServices.getDialect() - ); + final SqlStringGenerationContext sqlStringGenerationContext = declaringEntityPersister.getFactory().getSqlStringGenerationContext(); + final String targetTableName = sqlStringGenerationContext.format( manyToOne.getTable().getQualifiedTableName() ); if ( CollectionPart.Nature.fromNameExact( navigableRole.getParent().getLocalName() ) != null ) { final PluralAttributeMapping pluralAttribute = (PluralAttributeMapping) declaringEntityPersister.resolveSubPart( navigableRole.getParent().getParent() diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/VirtualIdEmbeddable.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/VirtualIdEmbeddable.java index 7af7957bb1..f8863a96a8 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/VirtualIdEmbeddable.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/VirtualIdEmbeddable.java @@ -10,7 +10,7 @@ import java.util.List; import java.util.function.Consumer; import org.hibernate.NotYetImplementedFor6Exception; -import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.mapping.Component; import org.hibernate.mapping.IndexedConsumer; @@ -371,7 +371,7 @@ public class VirtualIdEmbeddable extends AbstractEmbeddableMapping implements Id throw new IllegalAttributeType( "A \"virtual id\" cannot define attributes : " + attributeName ); } }, - (column, jdbcEnvironment) -> getTableIdentifierExpression( column.getValue().getTable(), jdbcEnvironment ), + (column, jdbcEnvironment) -> getTableIdentifierExpression( column.getValue().getTable(), creationProcess ), this::addAttribute, () -> { // We need the attribute mapping types to finish initialization first before we can build the column mappings @@ -384,14 +384,11 @@ public class VirtualIdEmbeddable extends AbstractEmbeddableMapping implements Id ); } - - - private static String getTableIdentifierExpression(Table table, JdbcEnvironment jdbcEnvironment) { - return jdbcEnvironment - .getQualifiedObjectNameFormatter().format( - table.getQualifiedTableName(), - jdbcEnvironment.getDialect() - ); + private static String getTableIdentifierExpression(Table table, MappingModelCreationProcess creationProcess) { + final SqlStringGenerationContext sqlStringGenerationContext = creationProcess.getCreationContext() + .getSessionFactory() + .getSqlStringGenerationContext(); + return sqlStringGenerationContext.format( table.getQualifiedTableName() ); } private boolean initColumnMappings() { diff --git a/hibernate-core/src/main/java/org/hibernate/persister/collection/AbstractCollectionPersister.java b/hibernate-core/src/main/java/org/hibernate/persister/collection/AbstractCollectionPersister.java index 6342f7f328..01ecd910c4 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/collection/AbstractCollectionPersister.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/collection/AbstractCollectionPersister.java @@ -289,7 +289,6 @@ public abstract class AbstractCollectionPersister : null; final Database database = creationContext.getMetadata().getDatabase(); - final JdbcEnvironment jdbcEnvironment = database.getJdbcEnvironment(); this.factory = creationContext.getSessionFactory(); this.cacheAccessStrategy = cacheAccessStrategy; @@ -321,7 +320,7 @@ public abstract class AbstractCollectionPersister isArray = collectionBootDescriptor.isArray(); subselectLoadable = collectionBootDescriptor.isSubselectLoadable(); - qualifiedTableName = determineTableName( table, jdbcEnvironment ); + qualifiedTableName = determineTableName( table ); int spacesSize = 1 + collectionBootDescriptor.getSynchronizedTables().size(); spaces = new String[spacesSize]; @@ -691,15 +690,12 @@ public abstract class AbstractCollectionPersister return comparator; } - protected String determineTableName(Table table, JdbcEnvironment jdbcEnvironment) { + protected String determineTableName(Table table) { if ( table.getSubselect() != null ) { return "( " + table.getSubselect() + " )"; } - return jdbcEnvironment.getQualifiedObjectNameFormatter().format( - table.getQualifiedTableName(), - jdbcEnvironment.getDialect() - ); + return factory.getSqlStringGenerationContext().format( table.getQualifiedTableName() ); } // private class ColumnMapperImpl implements ColumnMapper { diff --git a/hibernate-core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java b/hibernate-core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java index 5ca2ed4966..a8fb60c2b9 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java @@ -5327,15 +5327,12 @@ public abstract class AbstractEntityPersister return 0; } - protected String determineTableName(Table table, JdbcEnvironment jdbcEnvironment) { + protected String determineTableName(Table table) { if ( table.getSubselect() != null ) { return "( " + table.getSubselect() + " )"; } - return jdbcEnvironment.getQualifiedObjectNameFormatter().format( - table.getQualifiedTableName(), - jdbcEnvironment.getDialect() - ); + return factory.getSqlStringGenerationContext().format( table.getQualifiedTableName() ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/persister/entity/JoinedSubclassEntityPersister.java b/hibernate-core/src/main/java/org/hibernate/persister/entity/JoinedSubclassEntityPersister.java index 7854db29a0..9120af6fa4 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/entity/JoinedSubclassEntityPersister.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/entity/JoinedSubclassEntityPersister.java @@ -168,7 +168,6 @@ public class JoinedSubclassEntityPersister extends AbstractEntityPersister { final SessionFactoryImplementor factory = creationContext.getSessionFactory(); final Database database = creationContext.getMetadata().getDatabase(); - final JdbcEnvironment jdbcEnvironment = database.getJdbcEnvironment(); // DISCRIMINATOR @@ -256,7 +255,7 @@ public class JoinedSubclassEntityPersister extends AbstractEntityPersister { while ( tItr.hasNext() ) { final Table table = tItr.next(); final KeyValue key = kItr.next(); - final String tableName = determineTableName( table, jdbcEnvironment ); + final String tableName = determineTableName( table ); tableNames.add( tableName ); String[] keyCols = new String[idColumnSpan]; String[] keyColReaders = new String[idColumnSpan]; @@ -289,7 +288,7 @@ public class JoinedSubclassEntityPersister extends AbstractEntityPersister { isInverseTable[tableIndex] = join.isInverse(); Table table = join.getTable(); - final String tableName = determineTableName( table, jdbcEnvironment ); + final String tableName = determineTableName( table ); tableNames.add( tableName ); KeyValue key = join.getKey(); @@ -334,7 +333,7 @@ public class JoinedSubclassEntityPersister extends AbstractEntityPersister { isLazies.add( Boolean.FALSE ); isInverses.add( Boolean.FALSE ); isNullables.add( Boolean.FALSE ); - final String tableName = determineTableName( tab, jdbcEnvironment ); + final String tableName = determineTableName( tab ); subclassTableNames.add( tableName ); String[] key = new String[idColumnSpan]; Iterator cItr = tab.getPrimaryKey().getColumnIterator(); @@ -356,7 +355,7 @@ public class JoinedSubclassEntityPersister extends AbstractEntityPersister { isNullables.add( join.isOptional() ); isLazies.add( join.isLazy() ); - String joinTableName = determineTableName( joinTable, jdbcEnvironment ); + String joinTableName = determineTableName( joinTable ); subclassTableNames.add( joinTableName ); String[] key = new String[idColumnSpan]; Iterator citer = joinTable.getPrimaryKey().getColumnIterator(); @@ -480,7 +479,7 @@ public class JoinedSubclassEntityPersister extends AbstractEntityPersister { while ( iter.hasNext() ) { Property prop = iter.next(); String tabname = prop.getValue().getTable().getQualifiedName( - factory.getJdbcServices().getDialect(), + factory.getSqlStringGenerationContext(), factory.getSettings().getDefaultCatalogName(), factory.getSettings().getDefaultSchemaName() ); @@ -502,7 +501,7 @@ public class JoinedSubclassEntityPersister extends AbstractEntityPersister { Property prop = iter.next(); Table tab = prop.getValue().getTable(); String tabname = tab.getQualifiedName( - factory.getJdbcServices().getDialect(), + factory.getSqlStringGenerationContext(), factory.getSettings().getDefaultCatalogName(), factory.getSettings().getDefaultSchemaName() ); @@ -544,13 +543,13 @@ public class JoinedSubclassEntityPersister extends AbstractEntityPersister { Table table = persistentClass.getTable(); final Object convertedDiscriminatorValue = discriminatorType.getJavaTypeDescriptor().fromString( discriminatorSQLString ); discriminatorValues = new String[subclassSpan]; - initDiscriminatorProperties( factory, jdbcEnvironment, subclassSpanMinusOne, table, convertedDiscriminatorValue + initDiscriminatorProperties( factory, subclassSpanMinusOne, table, convertedDiscriminatorValue ); notNullColumnTableNumbers = new int[subclassSpan]; final int id = getTableId( table.getQualifiedName( - factory.getJdbcServices().getDialect(), + factory.getSqlStringGenerationContext(), factory.getSettings().getDefaultCatalogName(), factory.getSettings().getDefaultSchemaName() ), @@ -615,11 +614,11 @@ public class JoinedSubclassEntityPersister extends AbstractEntityPersister { // "foo.class = Bar" works in HQL discriminatorValue = sc.getSubclassId(); } - initDiscriminatorProperties( factory, jdbcEnvironment, k, table, discriminatorValue ); + initDiscriminatorProperties( factory, k, table, discriminatorValue ); subclassesByDiscriminatorValue.put( discriminatorValue, sc.getEntityName() ); int id = getTableId( table.getQualifiedName( - factory.getJdbcServices().getDialect(), + factory.getSqlStringGenerationContext(), factory.getSettings().getDefaultCatalogName(), factory.getSettings().getDefaultSchemaName() ), @@ -645,11 +644,10 @@ public class JoinedSubclassEntityPersister extends AbstractEntityPersister { private void initDiscriminatorProperties( SessionFactoryImplementor factory, - JdbcEnvironment jdbcEnvironment, int k, Table table, Object discriminatorValue) { - final String tableName = determineTableName( table, jdbcEnvironment ); + final String tableName = determineTableName( table ); final String columnName = table.getPrimaryKey().getColumn( 0 ).getQuotedName( factory.getJdbcServices().getDialect() ); discriminatorValuesByTableName.put( tableName, discriminatorValue ); discriminatorColumnNameByTableName.put( tableName, columnName ); @@ -755,7 +753,7 @@ public class JoinedSubclassEntityPersister extends AbstractEntityPersister { SessionFactoryImplementor factory) { final String tableName = persistentClass.getTable().getQualifiedName( - factory.getJdbcServices().getDialect(), + factory.getSqlStringGenerationContext(), factory.getSettings().getDefaultCatalogName(), factory.getSettings().getDefaultSchemaName() ); @@ -766,7 +764,7 @@ public class JoinedSubclassEntityPersister extends AbstractEntityPersister { while ( itr.hasNext() ) { final Join join = itr.next(); final String secondaryTableName = join.getTable().getQualifiedName( - factory.getJdbcServices().getDialect(), + factory.getSqlStringGenerationContext(), factory.getSettings().getDefaultCatalogName(), factory.getSettings().getDefaultSchemaName() ); diff --git a/hibernate-core/src/main/java/org/hibernate/persister/entity/SingleTableEntityPersister.java b/hibernate-core/src/main/java/org/hibernate/persister/entity/SingleTableEntityPersister.java index 26b3e2659b..c5147792a3 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/entity/SingleTableEntityPersister.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/entity/SingleTableEntityPersister.java @@ -143,7 +143,6 @@ public class SingleTableEntityPersister extends AbstractEntityPersister { final SessionFactoryImplementor factory = creationContext.getSessionFactory(); final Database database = creationContext.getMetadata().getDatabase(); - final JdbcEnvironment jdbcEnvironment = database.getJdbcEnvironment(); // CLASS + TABLE @@ -153,7 +152,7 @@ public class SingleTableEntityPersister extends AbstractEntityPersister { isNullableTable = new boolean[joinSpan]; keyColumnNames = new String[joinSpan][]; final Table table = persistentClass.getRootTable(); - qualifiedTableNames[0] = determineTableName( table, jdbcEnvironment ); + qualifiedTableNames[0] = determineTableName( table ); isInverseTable[0] = false; isNullableTable[0] = false; @@ -194,7 +193,7 @@ public class SingleTableEntityPersister extends AbstractEntityPersister { final Dialect dialect = factory.getJdbcServices().getDialect(); while ( joinIter.hasNext() ) { Join join = joinIter.next(); - qualifiedTableNames[j] = determineTableName( join.getTable(), jdbcEnvironment ); + qualifiedTableNames[j] = determineTableName( join.getTable() ); isInverseTable[j] = join.isInverse(); isNullableTable[j] = join.isOptional(); cascadeDeleteEnabled[j] = join.getKey().isCascadeDeleteEnabled() && @@ -271,7 +270,7 @@ public class SingleTableEntityPersister extends AbstractEntityPersister { isDeferreds.add( isDeferred ); hasDeferred |= isDeferred; - String joinTableName = determineTableName( join.getTable(), jdbcEnvironment ); + String joinTableName = determineTableName( join.getTable() ); subclassTables.add( joinTableName ); Iterator iter = join.getKey().getColumnIterator(); diff --git a/hibernate-core/src/main/java/org/hibernate/persister/entity/UnionSubclassEntityPersister.java b/hibernate-core/src/main/java/org/hibernate/persister/entity/UnionSubclassEntityPersister.java index 08c7219636..a3eafa4052 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/entity/UnionSubclassEntityPersister.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/entity/UnionSubclassEntityPersister.java @@ -24,6 +24,7 @@ import org.hibernate.AssertionFailure; import org.hibernate.HibernateException; import org.hibernate.MappingException; import org.hibernate.boot.model.relational.Database; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.cache.spi.access.EntityDataAccess; import org.hibernate.cache.spi.access.NaturalIdDataAccess; import org.hibernate.cfg.Settings; @@ -104,11 +105,10 @@ public class UnionSubclassEntityPersister extends AbstractEntityPersister { final SessionFactoryImplementor factory = creationContext.getSessionFactory(); final Database database = creationContext.getMetadata().getDatabase(); - final JdbcEnvironment jdbcEnvironment = database.getJdbcEnvironment(); // TABLE - tableName = determineTableName( persistentClass.getTable(), jdbcEnvironment ); + tableName = determineTableName( persistentClass.getTable() ); subclassTableNames = new String[]{tableName}; //Custom SQL @@ -184,7 +184,7 @@ public class UnionSubclassEntityPersister extends AbstractEntityPersister { HashSet subclassTables = new HashSet<>(); Iterator
subclassTableIter = persistentClass.getSubclassTableClosureIterator(); while ( subclassTableIter.hasNext() ) { - subclassTables.add( determineTableName( subclassTableIter.next(), jdbcEnvironment ) ); + subclassTables.add( determineTableName( subclassTableIter.next() ) ); } subclassSpaces = ArrayHelper.toStringArray( subclassTables ); @@ -214,7 +214,7 @@ public class UnionSubclassEntityPersister extends AbstractEntityPersister { while ( tableIter.hasNext() ) { Table tab = tableIter.next(); if ( !tab.isAbstractUnionTable() ) { - final String tableName = determineTableName( tab, jdbcEnvironment ); + final String tableName = determineTableName( tab ); tableNames.add( tableName ); String[] key = new String[idColumnSpan]; Iterator citer = tab.getPrimaryKey().getColumnIterator(); @@ -456,10 +456,11 @@ public class UnionSubclassEntityPersister extends AbstractEntityPersister { Dialect dialect = getFactory().getJdbcServices().getDialect(); Settings settings = getFactory().getSettings(); + SqlStringGenerationContext sqlStringGenerationContext = getFactory().getSqlStringGenerationContext(); if ( !model.hasSubclasses() ) { return model.getTable().getQualifiedName( - dialect, + sqlStringGenerationContext, settings.getDefaultCatalogName(), settings.getDefaultSchemaName() ); @@ -505,7 +506,7 @@ public class UnionSubclassEntityPersister extends AbstractEntityPersister { buf.append( " from " ) .append( table.getQualifiedName( - dialect, + sqlStringGenerationContext, settings.getDefaultCatalogName(), settings.getDefaultSchemaName() ) diff --git a/hibernate-core/src/main/java/org/hibernate/tool/schema/extract/internal/ExtractionContextImpl.java b/hibernate-core/src/main/java/org/hibernate/tool/schema/extract/internal/ExtractionContextImpl.java index 9da18060d2..1af9e2c66f 100644 --- a/hibernate-core/src/main/java/org/hibernate/tool/schema/extract/internal/ExtractionContextImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/tool/schema/extract/internal/ExtractionContextImpl.java @@ -11,6 +11,8 @@ import java.sql.DatabaseMetaData; import java.sql.SQLException; import org.hibernate.boot.model.naming.Identifier; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; +import org.hibernate.boot.model.relational.internal.SqlStringGenerationContextImpl; import org.hibernate.engine.jdbc.connections.spi.JdbcConnectionAccess; import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment; import org.hibernate.service.ServiceRegistry; @@ -22,6 +24,7 @@ import org.hibernate.tool.schema.extract.spi.ExtractionContext; public class ExtractionContextImpl implements ExtractionContext { private final ServiceRegistry serviceRegistry; private final JdbcEnvironment jdbcEnvironment; + private final SqlStringGenerationContext sqlStringGenerationContext; private final JdbcConnectionAccess jdbcConnectionAccess; private final DatabaseObjectAccess registeredTableAccess; private final Identifier defaultCatalogName; @@ -39,6 +42,7 @@ public class ExtractionContextImpl implements ExtractionContext { Identifier defaultSchemaName) { this.serviceRegistry = serviceRegistry; this.jdbcEnvironment = jdbcEnvironment; + this.sqlStringGenerationContext = new SqlStringGenerationContextImpl( jdbcEnvironment ); this.jdbcConnectionAccess = jdbcConnectionAccess; this.registeredTableAccess = registeredTableAccess; this.defaultCatalogName = defaultCatalogName; @@ -55,6 +59,11 @@ public class ExtractionContextImpl implements ExtractionContext { return jdbcEnvironment; } + @Override + public SqlStringGenerationContext getSqlStringGenerationContext() { + return sqlStringGenerationContext; + } + @Override public Connection getJdbcConnection() { if ( jdbcConnection == null ) { diff --git a/hibernate-core/src/main/java/org/hibernate/tool/schema/extract/internal/InformationExtractorJdbcDatabaseMetaDataImpl.java b/hibernate-core/src/main/java/org/hibernate/tool/schema/extract/internal/InformationExtractorJdbcDatabaseMetaDataImpl.java index 25d9f9c03e..0f934484cc 100644 --- a/hibernate-core/src/main/java/org/hibernate/tool/schema/extract/internal/InformationExtractorJdbcDatabaseMetaDataImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/tool/schema/extract/internal/InformationExtractorJdbcDatabaseMetaDataImpl.java @@ -137,11 +137,10 @@ public class InformationExtractorJdbcDatabaseMetaDataImpl extends AbstractInform final ExtractionContext extractionContext = getExtractionContext(); // We use this dummy query to retrieve the table information through the ResultSetMetaData // This is significantly better than to use the DatabaseMetaData especially on Oracle with synonyms enable - final String tableName = extractionContext.getJdbcEnvironment().getQualifiedObjectNameFormatter().format( + final String tableName = extractionContext.getSqlStringGenerationContext().format( // The name comes from the database, so the case is correct // But we quote here to avoid issues with reserved words - tableInformation.getName().quote(), - extractionContext.getJdbcEnvironment().getDialect() + tableInformation.getName().quote() ); try { diff --git a/hibernate-core/src/main/java/org/hibernate/tool/schema/extract/spi/ExtractionContext.java b/hibernate-core/src/main/java/org/hibernate/tool/schema/extract/spi/ExtractionContext.java index ab1c7c4d59..ddd2d52e3a 100644 --- a/hibernate-core/src/main/java/org/hibernate/tool/schema/extract/spi/ExtractionContext.java +++ b/hibernate-core/src/main/java/org/hibernate/tool/schema/extract/spi/ExtractionContext.java @@ -16,6 +16,7 @@ import org.hibernate.Incubating; import org.hibernate.boot.model.naming.Identifier; import org.hibernate.boot.model.relational.QualifiedSequenceName; import org.hibernate.boot.model.relational.QualifiedTableName; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment; import org.hibernate.service.ServiceRegistry; @@ -30,6 +31,7 @@ import org.hibernate.service.ServiceRegistry; public interface ExtractionContext { ServiceRegistry getServiceRegistry(); JdbcEnvironment getJdbcEnvironment(); + SqlStringGenerationContext getSqlStringGenerationContext(); Connection getJdbcConnection(); DatabaseMetaData getJdbcDatabaseMetaData(); @@ -83,6 +85,11 @@ public interface ExtractionContext { return null; } + @Override + public SqlStringGenerationContext getSqlStringGenerationContext() { + return null; + } + @Override public Connection getJdbcConnection() { return null; diff --git a/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/AbstractSchemaMigrator.java b/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/AbstractSchemaMigrator.java index 9c7c1a12ed..0f3aaf31a8 100644 --- a/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/AbstractSchemaMigrator.java +++ b/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/AbstractSchemaMigrator.java @@ -22,6 +22,8 @@ import org.hibernate.boot.model.relational.Database; import org.hibernate.boot.model.relational.Exportable; import org.hibernate.boot.model.relational.Namespace; import org.hibernate.boot.model.relational.Sequence; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; +import org.hibernate.boot.model.relational.internal.SqlStringGenerationContextImpl; import org.hibernate.boot.spi.MetadataImplementor; import org.hibernate.dialect.Dialect; import org.hibernate.engine.config.spi.ConfigurationService; @@ -157,7 +159,9 @@ public abstract class AbstractSchemaMigrator implements SchemaMigrator { boolean tryToCreateCatalogs, boolean tryToCreateSchemas, Set exportedCatalogs, - Namespace namespace, GenerationTarget[] targets); + Namespace namespace, + SqlStringGenerationContext sqlStringGenerationContext, + GenerationTarget[] targets); private void performMigration( Metadata metadata, @@ -172,6 +176,8 @@ public abstract class AbstractSchemaMigrator implements SchemaMigrator { final Set exportIdentifiers = CollectionHelper.setOfSize( 50 ); final Database database = metadata.getDatabase(); + SqlStringGenerationContext sqlStringGenerationContext = + new SqlStringGenerationContextImpl( database.getJdbcEnvironment() ); // Drop all AuxiliaryDatabaseObjects for ( AuxiliaryDatabaseObject auxiliaryDatabaseObject : database.getAuxiliaryDatabaseObjects() ) { @@ -179,7 +185,7 @@ public abstract class AbstractSchemaMigrator implements SchemaMigrator { applySqlStrings( true, dialect.getAuxiliaryDatabaseObjectExporter() - .getSqlDropStrings( auxiliaryDatabaseObject, metadata ), + .getSqlDropStrings( auxiliaryDatabaseObject, metadata, sqlStringGenerationContext ), formatter, options, targets @@ -192,7 +198,7 @@ public abstract class AbstractSchemaMigrator implements SchemaMigrator { if ( !auxiliaryDatabaseObject.beforeTablesOnCreation() && auxiliaryDatabaseObject.appliesToDialect( dialect ) ) { applySqlStrings( true, - auxiliaryDatabaseObject.sqlCreateStrings( dialect ), + auxiliaryDatabaseObject.sqlCreateStrings( sqlStringGenerationContext ), formatter, options, targets @@ -225,7 +231,7 @@ public abstract class AbstractSchemaMigrator implements SchemaMigrator { tryToCreateSchemas, exportedCatalogs, namespace, - targets + sqlStringGenerationContext, targets ); tablesInformation.put( namespace, nameSpaceTablesInformation ); if ( options.getSchemaFilter().includeNamespace( namespace ) ) { @@ -240,7 +246,8 @@ public abstract class AbstractSchemaMigrator implements SchemaMigrator { false, dialect.getSequenceExporter().getSqlCreateStrings( sequence, - metadata + metadata, + sqlStringGenerationContext ), formatter, options, @@ -265,7 +272,8 @@ public abstract class AbstractSchemaMigrator implements SchemaMigrator { final TableInformation tableInformation = nameSpaceTablesInformation.getTableInformation( table ); if ( tableInformation == null || tableInformation.isPhysicalTable() ) { - applyForeignKeys( table, tableInformation, dialect, metadata, formatter, options, targets ); + applyForeignKeys( table, tableInformation, dialect, metadata, formatter, options, + sqlStringGenerationContext, targets ); } } } @@ -276,7 +284,7 @@ public abstract class AbstractSchemaMigrator implements SchemaMigrator { if ( auxiliaryDatabaseObject.beforeTablesOnCreation() && auxiliaryDatabaseObject.appliesToDialect( dialect )) { applySqlStrings( true, - auxiliaryDatabaseObject.sqlCreateStrings( dialect ), + auxiliaryDatabaseObject.sqlCreateStrings( sqlStringGenerationContext ), formatter, options, targets @@ -291,10 +299,11 @@ public abstract class AbstractSchemaMigrator implements SchemaMigrator { Metadata metadata, Formatter formatter, ExecutionOptions options, + SqlStringGenerationContext sqlStringGenerationContext, GenerationTarget... targets) { applySqlStrings( false, - dialect.getTableExporter().getSqlCreateStrings( table, metadata ), + dialect.getTableExporter().getSqlCreateStrings( table, metadata, sqlStringGenerationContext ), formatter, options, targets @@ -308,6 +317,7 @@ public abstract class AbstractSchemaMigrator implements SchemaMigrator { Metadata metadata, Formatter formatter, ExecutionOptions options, + SqlStringGenerationContext sqlStringGenerationContext, GenerationTarget... targets) { final Database database = metadata.getDatabase(); @@ -319,7 +329,8 @@ public abstract class AbstractSchemaMigrator implements SchemaMigrator { metadata, tableInformation, database.getDefaultNamespace().getPhysicalName().getCatalog(), - database.getDefaultNamespace().getPhysicalName().getSchema() + database.getDefaultNamespace().getPhysicalName().getSchema(), + sqlStringGenerationContext ), formatter, options, @@ -334,6 +345,7 @@ public abstract class AbstractSchemaMigrator implements SchemaMigrator { Metadata metadata, Formatter formatter, ExecutionOptions options, + SqlStringGenerationContext sqlStringGenerationContext, GenerationTarget... targets) { final Exporter exporter = dialect.getIndexExporter(); @@ -348,7 +360,7 @@ public abstract class AbstractSchemaMigrator implements SchemaMigrator { if ( existingIndex == null ) { applySqlStrings( false, - exporter.getSqlCreateStrings( index, metadata ), + exporter.getSqlCreateStrings( index, metadata, sqlStringGenerationContext ), formatter, options, targets @@ -369,6 +381,7 @@ public abstract class AbstractSchemaMigrator implements SchemaMigrator { Metadata metadata, Formatter formatter, ExecutionOptions options, + SqlStringGenerationContext sqlStringGenerationContext, GenerationTarget... targets) { if ( uniqueConstraintStrategy == null ) { uniqueConstraintStrategy = determineUniqueConstraintSchemaUpdateStrategy( metadata ); @@ -391,7 +404,7 @@ public abstract class AbstractSchemaMigrator implements SchemaMigrator { if ( uniqueConstraintStrategy == UniqueConstraintSchemaUpdateStrategy.DROP_RECREATE_QUIETLY ) { applySqlStrings( true, - exporter.getSqlDropStrings( uniqueKey, metadata ), + exporter.getSqlDropStrings( uniqueKey, metadata, sqlStringGenerationContext ), formatter, options, targets @@ -400,7 +413,7 @@ public abstract class AbstractSchemaMigrator implements SchemaMigrator { applySqlStrings( true, - exporter.getSqlCreateStrings( uniqueKey, metadata ), + exporter.getSqlCreateStrings( uniqueKey, metadata, sqlStringGenerationContext ), formatter, options, targets @@ -427,6 +440,7 @@ public abstract class AbstractSchemaMigrator implements SchemaMigrator { Metadata metadata, Formatter formatter, ExecutionOptions options, + SqlStringGenerationContext sqlStringGenerationContext, GenerationTarget... targets) { if ( dialect.hasAlterTable() ) { final Exporter exporter = dialect.getForeignKeyExporter(); @@ -450,7 +464,7 @@ public abstract class AbstractSchemaMigrator implements SchemaMigrator { // in old SchemaUpdate code, this was the trigger to "create" applySqlStrings( false, - exporter.getSqlCreateStrings( foreignKey, metadata ), + exporter.getSqlCreateStrings( foreignKey, metadata, sqlStringGenerationContext ), formatter, options, targets diff --git a/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/GroupedSchemaMigratorImpl.java b/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/GroupedSchemaMigratorImpl.java index 046b23d783..17f2052547 100644 --- a/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/GroupedSchemaMigratorImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/GroupedSchemaMigratorImpl.java @@ -11,6 +11,7 @@ import java.util.Set; import org.hibernate.boot.Metadata; import org.hibernate.boot.model.naming.Identifier; import org.hibernate.boot.model.relational.Namespace; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.dialect.Dialect; import org.hibernate.engine.jdbc.internal.Formatter; import org.hibernate.mapping.Table; @@ -48,7 +49,9 @@ public class GroupedSchemaMigratorImpl extends AbstractSchemaMigrator { boolean tryToCreateCatalogs, boolean tryToCreateSchemas, Set exportedCatalogs, - Namespace namespace, GenerationTarget[] targets) { + Namespace namespace, + SqlStringGenerationContext sqlStringGenerationContext, + GenerationTarget[] targets) { final NameSpaceTablesInformation tablesInformation = new NameSpaceTablesInformation( metadata.getDatabase().getJdbcEnvironment().getIdentifierHelper() ); @@ -73,11 +76,12 @@ public class GroupedSchemaMigratorImpl extends AbstractSchemaMigrator { checkExportIdentifier( table, exportIdentifiers ); final TableInformation tableInformation = tables.getTableInformation( table ); if ( tableInformation == null ) { - createTable( table, dialect, metadata, formatter, options, targets ); + createTable( table, dialect, metadata, formatter, options, sqlStringGenerationContext, targets ); } else if ( tableInformation.isPhysicalTable() ) { tablesInformation.addTableInformation( tableInformation ); - migrateTable( table, tableInformation, dialect, metadata, formatter, options, targets ); + migrateTable( table, tableInformation, dialect, metadata, formatter, options, + sqlStringGenerationContext, targets ); } } } @@ -88,8 +92,10 @@ public class GroupedSchemaMigratorImpl extends AbstractSchemaMigrator { && contributableInclusionFilter.matches( table ) ) { final TableInformation tableInformation = tablesInformation.getTableInformation( table ); if ( tableInformation == null || tableInformation.isPhysicalTable() ) { - applyIndexes( table, tableInformation, dialect, metadata, formatter, options, targets ); - applyUniqueKeys( table, tableInformation, dialect, metadata, formatter, options, targets ); + applyIndexes( table, tableInformation, dialect, metadata, formatter, options, + sqlStringGenerationContext, targets ); + applyUniqueKeys( table, tableInformation, dialect, metadata, formatter, options, + sqlStringGenerationContext, targets ); } } } diff --git a/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/IndividuallySchemaMigratorImpl.java b/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/IndividuallySchemaMigratorImpl.java index 16f75c21f7..9b0a7df14c 100644 --- a/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/IndividuallySchemaMigratorImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/IndividuallySchemaMigratorImpl.java @@ -11,6 +11,7 @@ import java.util.Set; import org.hibernate.boot.Metadata; import org.hibernate.boot.model.naming.Identifier; import org.hibernate.boot.model.relational.Namespace; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.dialect.Dialect; import org.hibernate.engine.jdbc.internal.Formatter; import org.hibernate.mapping.Table; @@ -49,6 +50,7 @@ public class IndividuallySchemaMigratorImpl extends AbstractSchemaMigrator { boolean tryToCreateSchemas, Set exportedCatalogs, Namespace namespace, + SqlStringGenerationContext sqlStringGenerationContext, GenerationTarget[] targets) { final NameSpaceTablesInformation tablesInformation = new NameSpaceTablesInformation( metadata.getDatabase().getJdbcEnvironment().getIdentifierHelper() ); @@ -72,11 +74,12 @@ public class IndividuallySchemaMigratorImpl extends AbstractSchemaMigrator { checkExportIdentifier( table, exportIdentifiers ); final TableInformation tableInformation = existingDatabase.getTableInformation( table.getQualifiedTableName() ); if ( tableInformation == null ) { - createTable( table, dialect, metadata, formatter, options, targets ); + createTable( table, dialect, metadata, formatter, options, sqlStringGenerationContext, targets ); } else if ( tableInformation.isPhysicalTable() ) { tablesInformation.addTableInformation( tableInformation ); - migrateTable( table, tableInformation, dialect, metadata, formatter, options, targets ); + migrateTable( table, tableInformation, dialect, metadata, formatter, options, + sqlStringGenerationContext, targets ); } } } @@ -87,8 +90,10 @@ public class IndividuallySchemaMigratorImpl extends AbstractSchemaMigrator { && contributableInclusionFilter.matches( table ) ) { final TableInformation tableInformation = tablesInformation.getTableInformation( table ); if ( tableInformation == null || tableInformation.isPhysicalTable() ) { - applyIndexes( table, tableInformation, dialect, metadata, formatter, options, targets ); - applyUniqueKeys( table, tableInformation, dialect, metadata, formatter, options, targets ); + applyIndexes( table, tableInformation, dialect, metadata, formatter, options, + sqlStringGenerationContext, targets ); + applyUniqueKeys( table, tableInformation, dialect, metadata, formatter, options, + sqlStringGenerationContext, targets ); } } } diff --git a/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/SchemaCreatorImpl.java b/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/SchemaCreatorImpl.java index fab02cb164..2215bba912 100644 --- a/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/SchemaCreatorImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/SchemaCreatorImpl.java @@ -24,6 +24,8 @@ import org.hibernate.boot.model.relational.Exportable; import org.hibernate.boot.model.relational.InitCommand; import org.hibernate.boot.model.relational.Namespace; import org.hibernate.boot.model.relational.Sequence; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; +import org.hibernate.boot.model.relational.internal.SqlStringGenerationContextImpl; import org.hibernate.boot.registry.classloading.spi.ClassLoaderService; import org.hibernate.boot.spi.MetadataImplementor; import org.hibernate.cfg.AvailableSettings; @@ -241,6 +243,8 @@ public class SchemaCreatorImpl implements SchemaCreator { } final Database database = metadata.getDatabase(); + SqlStringGenerationContext sqlStringGenerationContext = + new SqlStringGenerationContextImpl( database.getJdbcEnvironment() ); final Set exportIdentifiers = CollectionHelper.setOfSize( 50 ); @@ -290,7 +294,8 @@ public class SchemaCreatorImpl implements SchemaCreator { applySqlStrings( dialect.getAuxiliaryDatabaseObjectExporter().getSqlCreateStrings( auxiliaryDatabaseObject, - metadata + metadata, + sqlStringGenerationContext ), formatter, options, @@ -321,7 +326,8 @@ public class SchemaCreatorImpl implements SchemaCreator { applySqlStrings( dialect.getSequenceExporter().getSqlCreateStrings( sequence, - metadata + metadata, + sqlStringGenerationContext ), // dialect.getCreateSequenceStrings( // jdbcEnvironment.getQualifiedObjectNameFormatter().format( sequence.getName(), dialect ), @@ -351,7 +357,7 @@ public class SchemaCreatorImpl implements SchemaCreator { checkExportIdentifier( table, exportIdentifiers ); applySqlStrings( - dialect.getTableExporter().getSqlCreateStrings( table, metadata ), + dialect.getTableExporter().getSqlCreateStrings( table, metadata, sqlStringGenerationContext ), formatter, options, targets @@ -377,7 +383,9 @@ public class SchemaCreatorImpl implements SchemaCreator { final Index index = (Index) indexItr.next(); checkExportIdentifier( index, exportIdentifiers ); applySqlStrings( - dialect.getIndexExporter().getSqlCreateStrings( index, metadata ), + dialect.getIndexExporter().getSqlCreateStrings( index, metadata, + sqlStringGenerationContext + ), formatter, options, targets @@ -390,7 +398,9 @@ public class SchemaCreatorImpl implements SchemaCreator { final UniqueKey uniqueKey = (UniqueKey) ukItr.next(); checkExportIdentifier( uniqueKey, exportIdentifiers ); applySqlStrings( - dialect.getUniqueKeyExporter().getSqlCreateStrings( uniqueKey, metadata ), + dialect.getUniqueKeyExporter().getSqlCreateStrings( uniqueKey, metadata, + sqlStringGenerationContext + ), formatter, options, targets @@ -421,7 +431,9 @@ public class SchemaCreatorImpl implements SchemaCreator { while ( fkItr.hasNext() ) { final ForeignKey foreignKey = (ForeignKey) fkItr.next(); applySqlStrings( - dialect.getForeignKeyExporter().getSqlCreateStrings( foreignKey, metadata ), + dialect.getForeignKeyExporter().getSqlCreateStrings( foreignKey, metadata, + sqlStringGenerationContext + ), formatter, options, targets @@ -436,7 +448,9 @@ public class SchemaCreatorImpl implements SchemaCreator { && !auxiliaryDatabaseObject.beforeTablesOnCreation() ) { checkExportIdentifier( auxiliaryDatabaseObject, exportIdentifiers ); applySqlStrings( - dialect.getAuxiliaryDatabaseObjectExporter().getSqlCreateStrings( auxiliaryDatabaseObject, metadata ), + dialect.getAuxiliaryDatabaseObjectExporter().getSqlCreateStrings( auxiliaryDatabaseObject, metadata, + sqlStringGenerationContext + ), formatter, options, targets diff --git a/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/SchemaDropperImpl.java b/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/SchemaDropperImpl.java index ba5ea150ed..6a45b108d9 100644 --- a/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/SchemaDropperImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/SchemaDropperImpl.java @@ -238,7 +238,9 @@ public class SchemaDropperImpl implements SchemaDropper { } applySqlStrings( - dialect.getAuxiliaryDatabaseObjectExporter().getSqlDropStrings( auxiliaryDatabaseObject, metadata ), + dialect.getAuxiliaryDatabaseObjectExporter().getSqlDropStrings( auxiliaryDatabaseObject, metadata, + sqlStringGenerationContext + ), formatter, options, targets @@ -252,7 +254,8 @@ public class SchemaDropperImpl implements SchemaDropper { } // we need to drop all constraints/indexes prior to dropping the tables - applyConstraintDropping( namespace, metadata, formatter, options, contributableInclusionFilter, targets ); + applyConstraintDropping( namespace, metadata, formatter, options, sqlStringGenerationContext, + contributableInclusionFilter, targets ); // now it's safe to drop the tables for ( Table table : namespace.getTables() ) { @@ -267,7 +270,9 @@ public class SchemaDropperImpl implements SchemaDropper { } checkExportIdentifier( table, exportIdentifiers ); - applySqlStrings( dialect.getTableExporter().getSqlDropStrings( table, metadata ), formatter, options,targets ); + applySqlStrings( dialect.getTableExporter().getSqlDropStrings( table, metadata, + sqlStringGenerationContext + ), formatter, options,targets ); } for ( Sequence sequence : namespace.getSequences() ) { @@ -279,7 +284,9 @@ public class SchemaDropperImpl implements SchemaDropper { } checkExportIdentifier( sequence, exportIdentifiers ); - applySqlStrings( dialect.getSequenceExporter().getSqlDropStrings( sequence, metadata ), formatter, options, targets ); + applySqlStrings( dialect.getSequenceExporter().getSqlDropStrings( sequence, metadata, + sqlStringGenerationContext + ), formatter, options, targets ); } } @@ -343,6 +350,7 @@ public class SchemaDropperImpl implements SchemaDropper { Metadata metadata, Formatter formatter, ExecutionOptions options, + SqlStringGenerationContext sqlStringGenerationContext, ContributableMatcher contributableInclusionFilter, GenerationTarget... targets) { final Dialect dialect = metadata.getDatabase().getJdbcEnvironment().getDialect(); @@ -366,7 +374,9 @@ public class SchemaDropperImpl implements SchemaDropper { while ( fks.hasNext() ) { final ForeignKey foreignKey = (ForeignKey) fks.next(); applySqlStrings( - dialect.getForeignKeyExporter().getSqlDropStrings( foreignKey, metadata ), + dialect.getForeignKeyExporter().getSqlDropStrings( foreignKey, metadata, + sqlStringGenerationContext + ), formatter, options, targets diff --git a/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/StandardAuxiliaryDatabaseObjectExporter.java b/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/StandardAuxiliaryDatabaseObjectExporter.java index 09a67f5af4..773807908b 100644 --- a/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/StandardAuxiliaryDatabaseObjectExporter.java +++ b/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/StandardAuxiliaryDatabaseObjectExporter.java @@ -8,7 +8,7 @@ package org.hibernate.tool.schema.internal; import org.hibernate.boot.Metadata; import org.hibernate.boot.model.relational.AuxiliaryDatabaseObject; -import org.hibernate.boot.model.relational.internal.SqlStringGenerationContextImpl; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.dialect.Dialect; import org.hibernate.tool.schema.spi.Exporter; @@ -23,12 +23,14 @@ public class StandardAuxiliaryDatabaseObjectExporter implements Exporter { } @Override - public String[] getSqlCreateStrings(ForeignKey foreignKey, Metadata metadata) { + public String[] getSqlCreateStrings(ForeignKey foreignKey, Metadata metadata, SqlStringGenerationContext context) { if ( !dialect.hasAlterTable() ) { return NO_COMMANDS; } @@ -90,15 +91,8 @@ public class StandardForeignKeyExporter implements Exporter { i++; } - final JdbcEnvironment jdbcEnvironment = metadata.getDatabase().getJdbcEnvironment(); - final String sourceTableName = jdbcEnvironment.getQualifiedObjectNameFormatter().format( - foreignKey.getTable().getQualifiedTableName(), - dialect - ); - final String targetTableName = jdbcEnvironment.getQualifiedObjectNameFormatter().format( - foreignKey.getReferencedTable().getQualifiedTableName(), - dialect - ); + final String sourceTableName = context.format( foreignKey.getTable().getQualifiedTableName() ); + final String targetTableName = context.format( foreignKey.getReferencedTable().getQualifiedTableName() ); final StringBuilder buffer = new StringBuilder( dialect.getAlterTableString( sourceTableName ) ) .append( @@ -126,7 +120,7 @@ public class StandardForeignKeyExporter implements Exporter { } @Override - public String[] getSqlDropStrings(ForeignKey foreignKey, Metadata metadata) { + public String[] getSqlDropStrings(ForeignKey foreignKey, Metadata metadata, SqlStringGenerationContext context) { if ( !dialect.hasAlterTable() ) { return NO_COMMANDS; } @@ -139,11 +133,7 @@ public class StandardForeignKeyExporter implements Exporter { return NO_COMMANDS; } - final JdbcEnvironment jdbcEnvironment = metadata.getDatabase().getJdbcEnvironment(); - final String sourceTableName = jdbcEnvironment.getQualifiedObjectNameFormatter().format( - foreignKey.getTable().getQualifiedTableName(), - dialect - ); + final String sourceTableName = context.format( foreignKey.getTable().getQualifiedTableName() ); return new String[] { getSqlDropStrings( sourceTableName, foreignKey, dialect ) }; diff --git a/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/StandardIndexExporter.java b/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/StandardIndexExporter.java index fd3e26d13c..261231942d 100644 --- a/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/StandardIndexExporter.java +++ b/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/StandardIndexExporter.java @@ -11,6 +11,7 @@ import java.util.Map; import org.hibernate.boot.Metadata; import org.hibernate.boot.model.relational.QualifiedNameImpl; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.dialect.Dialect; import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment; import org.hibernate.internal.util.StringHelper; @@ -34,22 +35,18 @@ public class StandardIndexExporter implements Exporter { } @Override - public String[] getSqlCreateStrings(Index index, Metadata metadata) { + public String[] getSqlCreateStrings(Index index, Metadata metadata, SqlStringGenerationContext context) { final JdbcEnvironment jdbcEnvironment = metadata.getDatabase().getJdbcEnvironment(); - final String tableName = jdbcEnvironment.getQualifiedObjectNameFormatter().format( - index.getTable().getQualifiedTableName(), - dialect - ); + final String tableName = context.format( index.getTable().getQualifiedTableName() ); final String indexNameForCreation; if ( dialect.qualifyIndexName() ) { - indexNameForCreation = jdbcEnvironment.getQualifiedObjectNameFormatter().format( + indexNameForCreation = context.format( new QualifiedNameImpl( index.getTable().getQualifiedTableName().getCatalogName(), index.getTable().getQualifiedTableName().getSchemaName(), jdbcEnvironment.getIdentifierHelper().toIdentifier( index.getQuotedName( dialect ) ) - ), - jdbcEnvironment.getDialect() + ) ); } else { @@ -83,16 +80,12 @@ public class StandardIndexExporter implements Exporter { } @Override - public String[] getSqlDropStrings(Index index, Metadata metadata) { + public String[] getSqlDropStrings(Index index, Metadata metadata, SqlStringGenerationContext context) { if ( !dialect.dropConstraints() ) { return NO_COMMANDS; } - final JdbcEnvironment jdbcEnvironment = metadata.getDatabase().getJdbcEnvironment(); - final String tableName = jdbcEnvironment.getQualifiedObjectNameFormatter().format( - index.getTable().getQualifiedTableName(), - dialect - ); + final String tableName = context.format( index.getTable().getQualifiedTableName() ); final String indexNameForCreation; if ( dialect.qualifyIndexName() ) { diff --git a/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/StandardSequenceExporter.java b/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/StandardSequenceExporter.java index 92e4edf274..0b2e527b2a 100644 --- a/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/StandardSequenceExporter.java +++ b/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/StandardSequenceExporter.java @@ -9,8 +9,8 @@ package org.hibernate.tool.schema.internal; import org.hibernate.boot.Metadata; import org.hibernate.boot.model.relational.QualifiedSequenceName; import org.hibernate.boot.model.relational.Sequence; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.dialect.Dialect; -import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment; import org.hibernate.tool.schema.spi.Exporter; /** @@ -24,26 +24,23 @@ public class StandardSequenceExporter implements Exporter { } @Override - public String[] getSqlCreateStrings(Sequence sequence, Metadata metadata) { + public String[] getSqlCreateStrings(Sequence sequence, Metadata metadata, SqlStringGenerationContext context) { return dialect.getSequenceSupport().getCreateSequenceStrings( - getFormattedSequenceName( sequence.getName(), metadata ), + getFormattedSequenceName( sequence.getName(), metadata, context ), sequence.getInitialValue(), sequence.getIncrementSize() ); } @Override - public String[] getSqlDropStrings(Sequence sequence, Metadata metadata) { + public String[] getSqlDropStrings(Sequence sequence, Metadata metadata, SqlStringGenerationContext context) { return dialect.getSequenceSupport().getDropSequenceStrings( - getFormattedSequenceName( sequence.getName(), metadata ) + getFormattedSequenceName( sequence.getName(), metadata, context ) ); } - protected String getFormattedSequenceName(QualifiedSequenceName name, Metadata metadata) { - final JdbcEnvironment jdbcEnvironment = metadata.getDatabase().getJdbcEnvironment(); - return jdbcEnvironment.getQualifiedObjectNameFormatter().format( - name, - jdbcEnvironment.getDialect() - ); + protected String getFormattedSequenceName(QualifiedSequenceName name, Metadata metadata, + SqlStringGenerationContext context) { + return context.format( name ); } } diff --git a/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/StandardTableExporter.java b/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/StandardTableExporter.java index 44ea0a9103..c7f81b138e 100644 --- a/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/StandardTableExporter.java +++ b/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/StandardTableExporter.java @@ -18,9 +18,7 @@ import org.hibernate.boot.model.relational.InitCommand; import org.hibernate.boot.model.relational.QualifiedName; import org.hibernate.boot.model.relational.QualifiedNameParser; import org.hibernate.boot.model.relational.SqlStringGenerationContext; -import org.hibernate.boot.model.relational.internal.SqlStringGenerationContextImpl; import org.hibernate.dialect.Dialect; -import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment; import org.hibernate.mapping.Column; import org.hibernate.mapping.Constraint; import org.hibernate.mapping.Table; @@ -38,7 +36,8 @@ public class StandardTableExporter implements Exporter
{ } @Override - public String[] getSqlCreateStrings(Table table, Metadata metadata) { + public String[] getSqlCreateStrings(Table table, Metadata metadata, + SqlStringGenerationContext context) { final QualifiedName tableName = new QualifiedNameParser.NameParts( Identifier.toIdentifier( table.getCatalog(), table.isCatalogQuoted() ), Identifier.toIdentifier( table.getSchema(), table.isSchemaQuoted() ), @@ -46,17 +45,10 @@ public class StandardTableExporter implements Exporter
{ ); try { - - final JdbcEnvironment jdbcEnvironment = metadata.getDatabase().getJdbcEnvironment(); StringBuilder buf = new StringBuilder( tableCreateString( table.hasPrimaryKey() ) ) .append( ' ' ) - .append( - jdbcEnvironment.getQualifiedObjectNameFormatter().format( - tableName, - jdbcEnvironment.getDialect() - ) - ) + .append( context.format( tableName ) ) .append( " (" ); @@ -122,7 +114,7 @@ public class StandardTableExporter implements Exporter
{ uk.addColumn( col ); buf.append( dialect.getUniqueDelegate() - .getColumnDefinitionUniquenessFragment( col ) + .getColumnDefinitionUniquenessFragment( col, context ) ); } @@ -141,7 +133,7 @@ public class StandardTableExporter implements Exporter
{ .append( table.getPrimaryKey().sqlConstraintString( dialect ) ); } - buf.append( dialect.getUniqueDelegate().getTableCreationUniqueConstraintsFragment( table ) ); + buf.append( dialect.getUniqueDelegate().getTableCreationUniqueConstraintsFragment( table, context ) ); applyTableCheck( table, buf ); @@ -158,8 +150,6 @@ public class StandardTableExporter implements Exporter
{ applyComments( table, tableName, sqlStrings ); - SqlStringGenerationContext context = - new SqlStringGenerationContextImpl( metadata.getDatabase().getJdbcEnvironment() ); applyInitCommands( table, sqlStrings, context ); return sqlStrings.toArray( new String[ sqlStrings.size() ] ); @@ -212,7 +202,7 @@ public class StandardTableExporter implements Exporter
{ } @Override - public String[] getSqlDropStrings(Table table, Metadata metadata) { + public String[] getSqlDropStrings(Table table, Metadata metadata, SqlStringGenerationContext context) { StringBuilder buf = new StringBuilder( "drop table " ); if ( dialect.supportsIfExistsBeforeTableName() ) { buf.append( "if exists " ); @@ -223,8 +213,7 @@ public class StandardTableExporter implements Exporter
{ Identifier.toIdentifier( table.getSchema(), table.isSchemaQuoted() ), table.getNameIdentifier() ); - final JdbcEnvironment jdbcEnvironment = metadata.getDatabase().getJdbcEnvironment(); - buf.append( jdbcEnvironment.getQualifiedObjectNameFormatter().format( tableName, jdbcEnvironment.getDialect() ) ) + buf.append( context.format( tableName ) ) .append( dialect.getCascadeConstraintsString() ); if ( dialect.supportsIfExistsAfterTableName() ) { diff --git a/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/StandardUniqueKeyExporter.java b/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/StandardUniqueKeyExporter.java index 260f9d9e89..cee8e41180 100644 --- a/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/StandardUniqueKeyExporter.java +++ b/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/StandardUniqueKeyExporter.java @@ -7,6 +7,7 @@ package org.hibernate.tool.schema.internal; import org.hibernate.boot.Metadata; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.dialect.Dialect; import org.hibernate.mapping.Constraint; import org.hibernate.mapping.UniqueKey; @@ -26,21 +27,25 @@ public class StandardUniqueKeyExporter implements Exporter { } @Override - public String[] getSqlCreateStrings(Constraint constraint, Metadata metadata) { + public String[] getSqlCreateStrings(Constraint constraint, Metadata metadata, + SqlStringGenerationContext context) { return new String[] { dialect.getUniqueDelegate().getAlterTableToAddUniqueKeyCommand( (UniqueKey) constraint, - metadata + metadata, + context ) }; } @Override - public String[] getSqlDropStrings(Constraint constraint, Metadata metadata) { + public String[] getSqlDropStrings(Constraint constraint, Metadata metadata, + SqlStringGenerationContext context) { return new String[] { dialect.getUniqueDelegate().getAlterTableToDropUniqueKeyCommand( (UniqueKey) constraint, - metadata + metadata, + context ) }; } diff --git a/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/exec/ImprovedExtractionContextImpl.java b/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/exec/ImprovedExtractionContextImpl.java index 926673d739..20a56f55e8 100644 --- a/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/exec/ImprovedExtractionContextImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/tool/schema/internal/exec/ImprovedExtractionContextImpl.java @@ -11,6 +11,8 @@ import java.sql.DatabaseMetaData; import java.sql.SQLException; import org.hibernate.boot.model.naming.Identifier; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; +import org.hibernate.boot.model.relational.internal.SqlStringGenerationContextImpl; import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment; import org.hibernate.resource.transaction.spi.DdlTransactionIsolator; import org.hibernate.service.ServiceRegistry; @@ -22,6 +24,7 @@ import org.hibernate.tool.schema.extract.spi.ExtractionContext; public class ImprovedExtractionContextImpl implements ExtractionContext { private final ServiceRegistry serviceRegistry; private final JdbcEnvironment jdbcEnvironment; + private final SqlStringGenerationContext sqlStringGenerationContext; private final DdlTransactionIsolator ddlTransactionIsolator; private final Identifier defaultCatalog; private final Identifier defaultSchema; @@ -39,6 +42,7 @@ public class ImprovedExtractionContextImpl implements ExtractionContext { DatabaseObjectAccess databaseObjectAccess) { this.serviceRegistry = serviceRegistry; this.jdbcEnvironment = jdbcEnvironment; + this.sqlStringGenerationContext = new SqlStringGenerationContextImpl( jdbcEnvironment ); this.ddlTransactionIsolator = ddlTransactionIsolator; this.defaultCatalog = defaultCatalog; this.defaultSchema = defaultSchema; @@ -55,6 +59,11 @@ public class ImprovedExtractionContextImpl implements ExtractionContext { return jdbcEnvironment; } + @Override + public SqlStringGenerationContext getSqlStringGenerationContext() { + return sqlStringGenerationContext; + } + @Override public Connection getJdbcConnection() { return ddlTransactionIsolator.getIsolatedConnection(); diff --git a/hibernate-core/src/main/java/org/hibernate/tool/schema/spi/Exporter.java b/hibernate-core/src/main/java/org/hibernate/tool/schema/spi/Exporter.java index 79b0181076..b6301c62f5 100644 --- a/hibernate-core/src/main/java/org/hibernate/tool/schema/spi/Exporter.java +++ b/hibernate-core/src/main/java/org/hibernate/tool/schema/spi/Exporter.java @@ -9,6 +9,7 @@ package org.hibernate.tool.schema.spi; import org.hibernate.boot.Metadata; import org.hibernate.boot.model.relational.Exportable; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.internal.util.collections.ArrayHelper; /** @@ -27,12 +28,12 @@ public interface Exporter { * * @return The commands needed for creation scripting. */ - String[] getSqlCreateStrings(T exportable, Metadata metadata); + String[] getSqlCreateStrings(T exportable, Metadata metadata, SqlStringGenerationContext context); /** * Get the commands needed for dropping. * * @return The commands needed for drop scripting. */ - String[] getSqlDropStrings(T exportable, Metadata metadata); + String[] getSqlDropStrings(T exportable, Metadata metadata, SqlStringGenerationContext context); } diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/boot/database/qualfiedTableNaming/QualifiedTableNamingTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/boot/database/qualfiedTableNaming/QualifiedTableNamingTest.java index 90b2eae1d4..4f937d3a16 100644 --- a/hibernate-core/src/test/java/org/hibernate/orm/test/boot/database/qualfiedTableNaming/QualifiedTableNamingTest.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/boot/database/qualfiedTableNaming/QualifiedTableNamingTest.java @@ -64,9 +64,8 @@ public class QualifiedTableNamingTest extends BaseNonConfigCoreFunctionalTestCas assertEquals( 1, namespace.getTables().size() ); - expectedName = metadata().getDatabase().getJdbcEnvironment().getQualifiedObjectNameFormatter().format( - namespace.getTables().iterator().next().getQualifiedTableName(), - getDialect() + expectedName = sessionFactory().getSqlStringGenerationContext().format( + namespace.getTables().iterator().next().getQualifiedTableName() ); } diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/bootstrap/jpa/PersistenceUnitOverridesTests.java b/hibernate-core/src/test/java/org/hibernate/orm/test/bootstrap/jpa/PersistenceUnitOverridesTests.java index 030c48c83d..c20ce5d74c 100644 --- a/hibernate-core/src/test/java/org/hibernate/orm/test/bootstrap/jpa/PersistenceUnitOverridesTests.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/bootstrap/jpa/PersistenceUnitOverridesTests.java @@ -12,6 +12,7 @@ import java.util.Map; import java.util.Properties; import javax.sql.DataSource; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.cache.spi.access.AccessType; import org.hibernate.cfg.AvailableSettings; import org.hibernate.dialect.Dialect; @@ -565,7 +566,8 @@ public class PersistenceUnitOverridesTests extends BaseUnitTestCase { // JdbcServices jdbcServices, // JdbcConnectionAccess connectionAccess, // MetadataImplementor metadata, -// SessionFactoryOptions sessionFactoryOptions) { +// SessionFactoryOptions sessionFactoryOptions, +// SqlStringGenerationContext sqlStringGenerationContext) { // // } // diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/hbm/uk/UniqueDelegateTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/hbm/uk/UniqueDelegateTest.java index a2bdc80f63..f72830f637 100644 --- a/hibernate-core/src/test/java/org/hibernate/orm/test/hbm/uk/UniqueDelegateTest.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/hbm/uk/UniqueDelegateTest.java @@ -8,6 +8,7 @@ package org.hibernate.orm.test.hbm.uk; import org.hibernate.boot.Metadata; import org.hibernate.boot.MetadataSources; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.boot.registry.StandardServiceRegistry; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.AvailableSettings; @@ -103,29 +104,33 @@ public class UniqueDelegateTest extends BaseUnitTestCase { } @Override - public String getColumnDefinitionUniquenessFragment(Column column) { + public String getColumnDefinitionUniquenessFragment(Column column, + SqlStringGenerationContext context) { getColumnDefinitionUniquenessFragmentCallCount++; - return super.getColumnDefinitionUniquenessFragment( column ); + return super.getColumnDefinitionUniquenessFragment( column, context ); } @Override - public String getTableCreationUniqueConstraintsFragment(Table table) { + public String getTableCreationUniqueConstraintsFragment(Table table, + SqlStringGenerationContext context) { getTableCreationUniqueConstraintsFragmentCallCount++; - return super.getTableCreationUniqueConstraintsFragment( table ); + return super.getTableCreationUniqueConstraintsFragment( table, context ); } @Override public String getAlterTableToAddUniqueKeyCommand( - UniqueKey uniqueKey, Metadata metadata) { + UniqueKey uniqueKey, Metadata metadata, + SqlStringGenerationContext context) { getAlterTableToAddUniqueKeyCommandCallCount++; - return super.getAlterTableToAddUniqueKeyCommand( uniqueKey, metadata ); + return super.getAlterTableToAddUniqueKeyCommand( uniqueKey, metadata, context ); } @Override public String getAlterTableToDropUniqueKeyCommand( - UniqueKey uniqueKey, Metadata metadata) { + UniqueKey uniqueKey, Metadata metadata, + SqlStringGenerationContext context) { getAlterTableToDropUniqueKeyCommandCallCount++; - return super.getAlterTableToDropUniqueKeyCommand( uniqueKey, metadata ); + return super.getAlterTableToDropUniqueKeyCommand( uniqueKey, metadata, context ); } } } diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/idgen/enhanced/table/Db2GenerationTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/idgen/enhanced/table/Db2GenerationTest.java index a2d1f8895b..91fcb29ce4 100644 --- a/hibernate-core/src/test/java/org/hibernate/orm/test/idgen/enhanced/table/Db2GenerationTest.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/idgen/enhanced/table/Db2GenerationTest.java @@ -10,6 +10,9 @@ import java.util.Properties; import org.hibernate.boot.Metadata; import org.hibernate.boot.MetadataSources; +import org.hibernate.boot.model.relational.Database; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; +import org.hibernate.boot.model.relational.internal.SqlStringGenerationContextImpl; import org.hibernate.boot.registry.StandardServiceRegistry; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.AvailableSettings; @@ -55,8 +58,13 @@ public class Db2GenerationTest { assertEquals( 1, metadata.getDatabase().getDefaultNamespace().getTables().size() ); - final Table table = metadata.getDatabase().getDefaultNamespace().getTables().iterator().next(); - final String[] createCommands = new DB2Dialect().getTableExporter().getSqlCreateStrings( table, metadata ); + Database database = metadata.getDatabase(); + final Table table = database.getDefaultNamespace().getTables().iterator().next(); + SqlStringGenerationContext sqlStringGenerationContext = + SqlStringGenerationContextImpl.forTests( database.getJdbcEnvironment() ); + final String[] createCommands = new DB2Dialect().getTableExporter().getSqlCreateStrings( table, metadata, + sqlStringGenerationContext + ); assertThat( createCommands[0], containsString( "sequence_name varchar(255) not null" ) ); } finally { @@ -93,8 +101,13 @@ public class Db2GenerationTest { assertEquals( 1, metadata.getDatabase().getDefaultNamespace().getTables().size() ); - final Table table = metadata.getDatabase().getDefaultNamespace().getTables().iterator().next(); - final String[] createCommands = new DB2Dialect().getTableExporter().getSqlCreateStrings( table, metadata ); + Database database = metadata.getDatabase(); + final Table table = database.getDefaultNamespace().getTables().iterator().next(); + SqlStringGenerationContext sqlStringGenerationContext = + SqlStringGenerationContextImpl.forTests( database.getJdbcEnvironment() ); + final String[] createCommands = new DB2Dialect().getTableExporter().getSqlCreateStrings( table, metadata, + sqlStringGenerationContext + ); assertThat( createCommands[0], containsString( "sequence_name varchar(255) not null" ) ); } finally { diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/jpa/compliance/tck2_2/GeneratedValueTests.java b/hibernate-core/src/test/java/org/hibernate/orm/test/jpa/compliance/tck2_2/GeneratedValueTests.java index 5f81a6fa49..39924eaa6a 100644 --- a/hibernate-core/src/test/java/org/hibernate/orm/test/jpa/compliance/tck2_2/GeneratedValueTests.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/jpa/compliance/tck2_2/GeneratedValueTests.java @@ -16,7 +16,9 @@ import org.hibernate.annotations.GenericGenerator; import org.hibernate.boot.Metadata; import org.hibernate.boot.MetadataSources; import org.hibernate.boot.model.naming.Identifier; +import org.hibernate.boot.model.relational.Database; import org.hibernate.boot.model.relational.Sequence; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.boot.model.relational.internal.SqlStringGenerationContextImpl; import org.hibernate.boot.registry.StandardServiceRegistry; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; @@ -154,7 +156,10 @@ public class GeneratedValueTests extends BaseUnitTestCase { null, (RootClass) entityMapping ); - generator.initialize( SqlStringGenerationContextImpl.forTests( bootModel.getDatabase().getJdbcEnvironment() ) ); + Database database = bootModel.getDatabase(); + SqlStringGenerationContext sqlStringGenerationContext = + SqlStringGenerationContextImpl.forTests( database.getJdbcEnvironment() ); + generator.initialize( sqlStringGenerationContext ); final SequenceStyleGenerator sequenceStyleGenerator = assertTyping( SequenceStyleGenerator.class, @@ -165,8 +170,7 @@ public class GeneratedValueTests extends BaseUnitTestCase { assertThat( sequenceStyleGenerator.getDatabaseStructure().getInitialValue(), is( 100 ) ); assertThat( sequenceStyleGenerator.getDatabaseStructure().getIncrementSize(), is( 500 ) ); - final Sequence sequence = bootModel.getDatabase() - .getDefaultNamespace() + final Sequence sequence = database.getDefaultNamespace() .locateSequence( Identifier.toIdentifier( "my_db_sequence" ) ); assertThat( sequence, notNullValue() ); assertThat( sequence.getName().getSequenceName().getText(), is( "my_db_sequence" ) ); @@ -175,7 +179,8 @@ public class GeneratedValueTests extends BaseUnitTestCase { final String[] sqlCreateStrings = new H2Dialect().getSequenceExporter().getSqlCreateStrings( sequence, - bootModel + bootModel, + sqlStringGenerationContext ); assertThat( sqlCreateStrings.length, is( 1 ) ); final String cmd = sqlCreateStrings[0].toLowerCase(); diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/tool/schema/internal/CheckForExistingForeignKeyTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/tool/schema/internal/CheckForExistingForeignKeyTest.java index 4a95b75761..e6328ec653 100644 --- a/hibernate-core/src/test/java/org/hibernate/orm/test/tool/schema/internal/CheckForExistingForeignKeyTest.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/tool/schema/internal/CheckForExistingForeignKeyTest.java @@ -12,6 +12,7 @@ import org.hibernate.boot.model.naming.Identifier; import org.hibernate.boot.model.relational.Namespace; import org.hibernate.boot.model.relational.Namespace.Name; import org.hibernate.boot.model.relational.QualifiedTableName; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.dialect.Dialect; import org.hibernate.engine.jdbc.env.spi.IdentifierHelper; import org.hibernate.engine.jdbc.internal.Formatter; @@ -60,12 +61,10 @@ public class CheckForExistingForeignKeyTest { ExecutionOptions options, ContributableMatcher inclusionFilter, Dialect dialect, - Formatter formatter, - Set exportIdentifiers, - boolean tryToCreateCatalogs, + Formatter formatter, Set exportIdentifiers, boolean tryToCreateCatalogs, boolean tryToCreateSchemas, - Set exportedCatalogs, - Namespace namespace, + Set exportedCatalogs, Namespace namespace, + SqlStringGenerationContext sqlStringGenerationContext, GenerationTarget[] targets) { return null; } diff --git a/hibernate-core/src/test/java/org/hibernate/tool/schema/internal/AbstractSchemaMigratorTest.java b/hibernate-core/src/test/java/org/hibernate/tool/schema/internal/AbstractSchemaMigratorTest.java index 129b8b16f0..1c56ba8301 100644 --- a/hibernate-core/src/test/java/org/hibernate/tool/schema/internal/AbstractSchemaMigratorTest.java +++ b/hibernate-core/src/test/java/org/hibernate/tool/schema/internal/AbstractSchemaMigratorTest.java @@ -14,6 +14,7 @@ import org.hibernate.boot.model.TruthValue; import org.hibernate.boot.model.naming.Identifier; import org.hibernate.boot.model.relational.Namespace; import org.hibernate.boot.model.relational.QualifiedTableName; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; import org.hibernate.dialect.Dialect; import org.hibernate.engine.jdbc.internal.Formatter; import org.hibernate.testing.TestForIssue; @@ -46,21 +47,12 @@ public class AbstractSchemaMigratorTest { public void testForeignKeyPreExistenceDetectionIgnoresCaseForTableAndColumnName() { final AbstractSchemaMigrator schemaMigrator = new AbstractSchemaMigrator(null, null) { @Override - protected NameSpaceTablesInformation performTablesMigration( - Metadata metadata, - DatabaseInformation existingDatabase, - ExecutionOptions options, - ContributableMatcher contributableInclusionFilter, - Dialect dialect, - Formatter formatter, - Set exportIdentifiers, - boolean tryToCreateCatalogs, - boolean tryToCreateSchemas, - Set exportedCatalogs, - Namespace namespace, - GenerationTarget[] targets) { - return null; - } + protected NameSpaceTablesInformation performTablesMigration(Metadata metadata, + DatabaseInformation existingDatabase, ExecutionOptions options,ContributableMatcher contributableInclusionFilter, Dialect dialect, + Formatter formatter, Set exportIdentifiers, boolean tryToCreateCatalogs, + boolean tryToCreateSchemas, Set exportedCatalogs, Namespace namespace, + SqlStringGenerationContext sqlStringGenerationContext, + GenerationTarget[] targets) { return null; } }; final TableInformation existingTableInformation = mock(TableInformation.class); diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/MonotonicRevisionNumberTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/MonotonicRevisionNumberTest.java index fe84e7e9a7..545550dfe4 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/MonotonicRevisionNumberTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/MonotonicRevisionNumberTest.java @@ -12,6 +12,8 @@ import java.util.Optional; import org.hibernate.boot.model.relational.AuxiliaryDatabaseObject; import org.hibernate.boot.model.relational.Database; +import org.hibernate.boot.model.relational.SqlStringGenerationContext; +import org.hibernate.boot.model.relational.internal.SqlStringGenerationContextImpl; import org.hibernate.dialect.Oracle8iDialect; import org.hibernate.envers.enhanced.OrderedSequenceGenerator; import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; @@ -43,11 +45,13 @@ public class MonotonicRevisionNumberTest extends BaseEnversFunctionalTestCase { Assert.assertTrue( OrderedSequenceGenerator.class.isInstance( generator ) ); Database database = metadata().getDatabase(); + SqlStringGenerationContext sqlStringGenerationContext = + SqlStringGenerationContextImpl.forTests( database.getJdbcEnvironment() ); Optional sequenceOptional = database.getAuxiliaryDatabaseObjects().stream() .filter( o -> "REVISION_GENERATOR".equals( o.getExportIdentifier() ) ) .findFirst(); assertThat( sequenceOptional ).isPresent(); - String[] sqlCreateStrings = sequenceOptional.get().sqlCreateStrings( database.getDialect() ); + String[] sqlCreateStrings = sequenceOptional.get().sqlCreateStrings( sqlStringGenerationContext ); Assert.assertTrue( "Oracle sequence needs to be ordered in RAC environment.", sqlCreateStrings[0].toLowerCase().endsWith( " order" )