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