From 49c54069cd68b66575359d2081adaed51ab9cadc Mon Sep 17 00:00:00 2001 From: Gail Badner Date: Mon, 18 Jul 2011 15:11:23 -0700 Subject: [PATCH] HHH-6449 : Change Exportable.sqlCreateStrings/sqlDropStrings(MetadataImplementor) to take Dialect argument instead --- .../relational/AbstractConstraint.java | 12 ++----- .../BasicAuxiliaryDatabaseObjectImpl.java | 28 +++++++++------ .../metamodel/relational/Database.java | 36 ++++++++----------- .../metamodel/relational/Exportable.java | 13 +++---- .../metamodel/relational/ForeignKey.java | 4 +-- .../hibernate/metamodel/relational/Index.java | 25 +++---------- .../metamodel/relational/Sequence.java | 18 ++++------ .../hibernate/metamodel/relational/Table.java | 9 ++--- .../source/hbm/HibernateMappingProcessor.java | 1 + .../hibernate/tool/hbm2ddl/SchemaExport.java | 5 +-- 10 files changed, 58 insertions(+), 93 deletions(-) diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/relational/AbstractConstraint.java b/hibernate-core/src/main/java/org/hibernate/metamodel/relational/AbstractConstraint.java index 2e44239aaa..317829fc16 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/relational/AbstractConstraint.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/relational/AbstractConstraint.java @@ -27,8 +27,6 @@ import java.util.List; import java.util.ArrayList; import org.hibernate.dialect.Dialect; -import org.hibernate.engine.jdbc.spi.JdbcServices; -import org.hibernate.metamodel.source.MetadataImplementor; /** * Support for writing {@link Constraint} implementations @@ -81,8 +79,7 @@ public abstract class AbstractConstraint implements Constraint { protected abstract String sqlConstraintStringInAlterTable(Dialect dialect); - public String[] sqlDropStrings(MetadataImplementor metadata) { - Dialect dialect = getDialect( metadata ); + public String[] sqlDropStrings(Dialect dialect) { if ( isCreationVetoed( dialect ) ) { return null; } @@ -98,8 +95,7 @@ public abstract class AbstractConstraint implements Constraint { } } - public String[] sqlCreateStrings(MetadataImplementor metadata) { - Dialect dialect = getDialect( metadata ); + public String[] sqlCreateStrings(Dialect dialect) { if ( isCreationVetoed( dialect ) ) { return null; } @@ -112,8 +108,4 @@ public abstract class AbstractConstraint implements Constraint { }; } } - - protected static Dialect getDialect(MetadataImplementor metadata) { - return metadata.getServiceRegistry().getService( JdbcServices.class ).getDialect(); - } } diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/relational/BasicAuxiliaryDatabaseObjectImpl.java b/hibernate-core/src/main/java/org/hibernate/metamodel/relational/BasicAuxiliaryDatabaseObjectImpl.java index 2f9af2ee7b..07389d08ca 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/relational/BasicAuxiliaryDatabaseObjectImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/relational/BasicAuxiliaryDatabaseObjectImpl.java @@ -25,9 +25,8 @@ package org.hibernate.metamodel.relational; import java.util.Set; +import org.hibernate.dialect.Dialect; import org.hibernate.internal.util.StringHelper; -import org.hibernate.metamodel.Metadata; -import org.hibernate.metamodel.source.MetadataImplementor; /** * @author Steve Ebersole @@ -36,29 +35,36 @@ import org.hibernate.metamodel.source.MetadataImplementor; public class BasicAuxiliaryDatabaseObjectImpl extends AbstractAuxiliaryDatabaseObject { private static final String CATALOG_NAME_PLACEHOLDER = "${catalog}"; private static final String SCHEMA_NAME_PLACEHOLDER = "${schema}"; + private final Schema defaultSchema; private final String createString; private final String dropString; - public BasicAuxiliaryDatabaseObjectImpl(String createString, String dropString, Set dialectScopes) { + public BasicAuxiliaryDatabaseObjectImpl( + Schema defaultSchema, + String createString, + String dropString, + Set dialectScopes) { super( dialectScopes ); + // keep track of the default schema and the raw create/drop strings; + // we may want to allow copying into a database with a different default schema in the future; + this.defaultSchema = defaultSchema; this.createString = createString; this.dropString = dropString; } @Override - public String[] sqlCreateStrings(MetadataImplementor metadata) { - return new String[] { injectCatalogAndSchema( createString, metadata.getOptions() ) }; + public String[] sqlCreateStrings(Dialect dialect) { + return new String[] { injectCatalogAndSchema( createString, defaultSchema ) }; } @Override - public String[] sqlDropStrings(MetadataImplementor metadata) { - return new String[] { injectCatalogAndSchema( dropString, metadata.getOptions() ) }; + public String[] sqlDropStrings(Dialect dialect) { + return new String[] { injectCatalogAndSchema( dropString, defaultSchema ) }; } - private String injectCatalogAndSchema(String ddlString, Metadata.Options options) { - String rtn = StringHelper.replace( ddlString, CATALOG_NAME_PLACEHOLDER, options.getDefaultCatalogName() ); - rtn = StringHelper.replace( rtn, SCHEMA_NAME_PLACEHOLDER, options.getDefaultSchemaName() ); + private static String injectCatalogAndSchema(String ddlString, Schema schema) { + String rtn = StringHelper.replace( ddlString, CATALOG_NAME_PLACEHOLDER, schema.getName().getCatalog().getName() ); + rtn = StringHelper.replace( rtn, SCHEMA_NAME_PLACEHOLDER, schema.getName().getSchema().getName() ); return rtn; } - } diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/relational/Database.java b/hibernate-core/src/main/java/org/hibernate/metamodel/relational/Database.java index 87747d1bf0..9b5490815d 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/relational/Database.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/relational/Database.java @@ -33,11 +33,9 @@ import java.util.Set; import org.hibernate.MappingException; import org.hibernate.dialect.Dialect; -import org.hibernate.engine.jdbc.spi.JdbcServices; import org.hibernate.internal.util.StringHelper; import org.hibernate.internal.util.collections.ArrayHelper; import org.hibernate.metamodel.Metadata; -import org.hibernate.metamodel.source.MetadataImplementor; /** * Represents a database and manages the named schema/catalog pairs defined within. @@ -103,15 +101,14 @@ public class Database { return auxiliaryDatabaseObjects; } - public String[] generateSchemaCreationScript(MetadataImplementor metadata) { - Dialect dialect = getDialect( metadata ); + public String[] generateSchemaCreationScript(Dialect dialect) { Set exportIdentifiers = new HashSet( 50 ); List script = new ArrayList( 50 ); for ( Schema schema : schemaMap.values() ) { // TODO: create schema/catalog??? for ( Table table : schema.getTables() ) { - addSqlCreateStrings( metadata, exportIdentifiers, script, table ); + addSqlCreateStrings( dialect, exportIdentifiers, script, table ); } } @@ -120,19 +117,19 @@ public class Database { if ( ! dialect.supportsUniqueConstraintInCreateAlterTable() ) { for ( UniqueKey uniqueKey : table.getUniqueKeys() ) { - addSqlCreateStrings( metadata, exportIdentifiers, script, uniqueKey ); + addSqlCreateStrings( dialect, exportIdentifiers, script, uniqueKey ); } } for ( Index index : table.getIndexes() ) { - addSqlCreateStrings( metadata, exportIdentifiers, script, index ); + addSqlCreateStrings( dialect, exportIdentifiers, script, index ); } if ( dialect.hasAlterTable() ) { for ( ForeignKey foreignKey : table.getForeignKeys() ) { // only add the foreign key if its target is a physical table if ( Table.class.isInstance( foreignKey.getTargetTable() ) ) { - addSqlCreateStrings( metadata, exportIdentifiers, script, foreignKey ); + addSqlCreateStrings( dialect, exportIdentifiers, script, foreignKey ); } } } @@ -144,15 +141,14 @@ public class Database { for ( AuxiliaryDatabaseObject auxiliaryDatabaseObject : auxiliaryDatabaseObjects ) { if ( auxiliaryDatabaseObject.appliesToDialect( dialect ) ) { - addSqlCreateStrings( metadata, exportIdentifiers, script, auxiliaryDatabaseObject ); + addSqlCreateStrings( dialect, exportIdentifiers, script, auxiliaryDatabaseObject ); } } return ArrayHelper.toStringArray( script ); } - public String[] generateDropSchemaScript(MetadataImplementor metadata) { - Dialect dialect = getDialect( metadata ); + public String[] generateDropSchemaScript(Dialect dialect) { Set exportIdentifiers = new HashSet( 50 ); List script = new ArrayList( 50 ); @@ -161,7 +157,7 @@ public class Database { for ( int i = auxiliaryDatabaseObjects.size() - 1 ; i >= 0 ; i-- ) { AuxiliaryDatabaseObject object = auxiliaryDatabaseObjects.get( i ); if ( object.appliesToDialect( dialect ) ) { - addSqlDropStrings( metadata, exportIdentifiers, script, object ); + addSqlDropStrings( dialect, exportIdentifiers, script, object ); } } @@ -171,7 +167,7 @@ public class Database { for ( ForeignKey foreignKey : table.getForeignKeys() ) { // only include foreign key if the target table is physical if ( foreignKey.getTargetTable() instanceof Table ) { - addSqlDropStrings( metadata, exportIdentifiers, script, foreignKey ); + addSqlDropStrings( dialect, exportIdentifiers, script, foreignKey ); } } } @@ -180,7 +176,7 @@ public class Database { for ( Schema schema : schemaMap.values() ) { for ( Table table : schema.getTables() ) { - addSqlDropStrings( metadata, exportIdentifiers, script, table ); + addSqlDropStrings( dialect, exportIdentifiers, script, table ); } } @@ -191,27 +187,23 @@ public class Database { return ArrayHelper.toStringArray( script ); } - private static Dialect getDialect(MetadataImplementor metadata) { - return metadata.getServiceRegistry().getService( JdbcServices.class ).getDialect(); - } - private static void addSqlDropStrings( - MetadataImplementor metadata, + Dialect dialect, Set exportIdentifiers, List script, Exportable exportable) { addSqlStrings( - exportIdentifiers, script, exportable.getExportIdentifier(), exportable.sqlDropStrings( metadata ) + exportIdentifiers, script, exportable.getExportIdentifier(), exportable.sqlDropStrings( dialect ) ); } private static void addSqlCreateStrings( - MetadataImplementor metadata, + Dialect dialect, Set exportIdentifiers, List script, Exportable exportable) { addSqlStrings( - exportIdentifiers, script, exportable.getExportIdentifier(), exportable.sqlCreateStrings( metadata ) + exportIdentifiers, script, exportable.getExportIdentifier(), exportable.sqlCreateStrings( dialect ) ); } diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/relational/Exportable.java b/hibernate-core/src/main/java/org/hibernate/metamodel/relational/Exportable.java index 37654997e3..601fd119d6 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/relational/Exportable.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/relational/Exportable.java @@ -23,7 +23,7 @@ */ package org.hibernate.metamodel.relational; -import org.hibernate.metamodel.source.MetadataImplementor; +import org.hibernate.dialect.Dialect; /** * Contract for entities (in the ERD sense) which can be exported via {@code CREATE}, {@code ALTER}, etc @@ -40,16 +40,17 @@ public interface Exportable { /** * Gets the SQL strings for creating the database object. - * @param metadata the metadata + * + * @param dialect * @return the SQL strings for creating the database object. */ - public String[] sqlCreateStrings(MetadataImplementor metadata); + public String[] sqlCreateStrings(Dialect dialect); /** * Gets the SQL strings for dropping the database object. - * @param metadata the metadata - * @return the SQL strings for dropping the database object. + * + * @param dialect@return the SQL strings for dropping the database object. */ - public String[] sqlDropStrings(MetadataImplementor metadata); + public String[] sqlDropStrings(Dialect dialect); } diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/relational/ForeignKey.java b/hibernate-core/src/main/java/org/hibernate/metamodel/relational/ForeignKey.java index c7ee31a041..9a03f9d3b2 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/relational/ForeignKey.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/relational/ForeignKey.java @@ -30,7 +30,6 @@ import java.util.List; import org.hibernate.MappingException; import org.hibernate.dialect.Dialect; import org.hibernate.internal.CoreMessageLogger; -import org.hibernate.metamodel.source.MetadataImplementor; import org.jboss.logging.Logger; @@ -135,8 +134,7 @@ public class ForeignKey extends AbstractConstraint implements Constraint, Export } @Override - public String[] sqlDropStrings(MetadataImplementor metadata) { - Dialect dialect = getDialect( metadata ); + public String[] sqlDropStrings(Dialect dialect) { return new String[] { "alter table " + getTable().getQualifiedName( dialect ) + diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/relational/Index.java b/hibernate-core/src/main/java/org/hibernate/metamodel/relational/Index.java index fb8f96eb4e..8a164c0f82 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/relational/Index.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/relational/Index.java @@ -25,7 +25,6 @@ package org.hibernate.metamodel.relational; import org.hibernate.dialect.Dialect; import org.hibernate.internal.util.StringHelper; -import org.hibernate.metamodel.source.MetadataImplementor; /** * Models a SQL INDEX @@ -49,30 +48,14 @@ public class Index extends AbstractConstraint implements Constraint { return sb.toString(); } - public String[] sqlCreateStrings(MetadataImplementor metadata) { + public String[] sqlCreateStrings(Dialect dialect) { return new String[] { buildSqlCreateIndexString( - getDialect( metadata ), - getName(), - getTable(), - getColumns(), - false + dialect, getName(), getTable(), getColumns(), false ) }; } - /* package-protected */ - static String buildSqlDropIndexString( - Dialect dialect, - TableSpecification table, - String name ) { - return "drop index " + - StringHelper.qualify( - table.getQualifiedName( dialect ), - name - ); - } - public static String buildSqlCreateIndexString( Dialect dialect, String name, @@ -121,12 +104,12 @@ public class Index extends AbstractConstraint implements Constraint { return buf.append( ')' ).toString(); } - public String[] sqlDropStrings(MetadataImplementor metadata) { + public String[] sqlDropStrings(Dialect dialect) { return new String[] { new StringBuffer( "drop index " ) .append( StringHelper.qualify( - getTable().getQualifiedName( getDialect( metadata ) ), + getTable().getQualifiedName( dialect ), getName() ) ).toString() diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/relational/Sequence.java b/hibernate-core/src/main/java/org/hibernate/metamodel/relational/Sequence.java index 44694a859e..fcaf7b886d 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/relational/Sequence.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/relational/Sequence.java @@ -25,8 +25,6 @@ package org.hibernate.metamodel.relational; import org.hibernate.MappingException; import org.hibernate.dialect.Dialect; -import org.hibernate.engine.jdbc.spi.JdbcServices; -import org.hibernate.metamodel.source.MetadataImplementor; /** * Models a database {@code SEQUENCE}. @@ -60,6 +58,7 @@ public class Sequence implements Exportable { return name; } + @Override public String getExportIdentifier() { return qualifiedName; } @@ -72,16 +71,13 @@ public class Sequence implements Exportable { return incrementSize; } - public String[] sqlCreateStrings(MetadataImplementor metadata) throws MappingException { - return getDialect( metadata ).getCreateSequenceStrings( name, initialValue,incrementSize ); + @Override + public String[] sqlCreateStrings(Dialect dialect) throws MappingException { + return dialect.getCreateSequenceStrings( name, initialValue,incrementSize ); } - public String[] sqlDropStrings(MetadataImplementor metadata) throws MappingException { - return getDialect( metadata ).getDropSequenceStrings( name ); + @Override + public String[] sqlDropStrings(Dialect dialect) throws MappingException { + return dialect.getDropSequenceStrings( name ); } - - private Dialect getDialect(MetadataImplementor metadata) { - return metadata.getServiceRegistry().getService( JdbcServices.class ).getDialect(); - } - } diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/relational/Table.java b/hibernate-core/src/main/java/org/hibernate/metamodel/relational/Table.java index 858c8d5dec..ab9d4c5475 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/relational/Table.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/relational/Table.java @@ -28,9 +28,6 @@ import java.util.LinkedHashMap; import java.util.List; import org.hibernate.dialect.Dialect; -import org.hibernate.engine.jdbc.spi.JdbcServices; -import org.hibernate.internal.util.collections.ArrayHelper; -import org.hibernate.metamodel.source.MetadataImplementor; /** * Models the concept of a relational TABLE (or VIEW). @@ -139,8 +136,7 @@ public class Table extends AbstractTableSpecification implements Exportable { return objectName.toText( dialect ); } - public String[] sqlCreateStrings(MetadataImplementor metadata) { - Dialect dialect = metadata.getServiceRegistry().getService( JdbcServices.class ).getDialect(); + public String[] sqlCreateStrings(Dialect dialect) { boolean hasPrimaryKey = getPrimaryKey().getColumns().iterator().hasNext(); StringBuilder buf = new StringBuilder( @@ -273,8 +269,7 @@ public class Table extends AbstractTableSpecification implements Exportable { } @Override - public String[] sqlDropStrings(MetadataImplementor metadata) { - Dialect dialect = metadata.getServiceRegistry().getService( JdbcServices.class ).getDialect(); + public String[] sqlDropStrings(Dialect dialect) { StringBuilder buf = new StringBuilder( "drop table " ); if ( dialect.supportsIfExistsBeforeTableName() ) { buf.append( "if exists " ); diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/source/hbm/HibernateMappingProcessor.java b/hibernate-core/src/main/java/org/hibernate/metamodel/source/hbm/HibernateMappingProcessor.java index 9657e22e1a..6ab1003626 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/source/hbm/HibernateMappingProcessor.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/source/hbm/HibernateMappingProcessor.java @@ -124,6 +124,7 @@ public class HibernateMappingProcessor { } } auxiliaryDatabaseObject = new BasicAuxiliaryDatabaseObjectImpl( + metadata.getDatabase().getDefaultSchema(), databaseObjectElement.getCreate(), databaseObjectElement.getDrop(), dialectScopes diff --git a/hibernate-core/src/main/java/org/hibernate/tool/hbm2ddl/SchemaExport.java b/hibernate-core/src/main/java/org/hibernate/tool/hbm2ddl/SchemaExport.java index ed72c4fbbb..ed8edead74 100644 --- a/hibernate-core/src/main/java/org/hibernate/tool/hbm2ddl/SchemaExport.java +++ b/hibernate-core/src/main/java/org/hibernate/tool/hbm2ddl/SchemaExport.java @@ -137,8 +137,9 @@ public class SchemaExport { DEFAULT_IMPORT_FILE ); - this.dropSQL = metadata.getDatabase().generateDropSchemaScript( metadata ); - this.createSQL = metadata.getDatabase().generateSchemaCreationScript( metadata ); + final Dialect dialect = metadata.getServiceRegistry().getService( JdbcServices.class ).getDialect(); + this.dropSQL = metadata.getDatabase().generateDropSchemaScript( dialect ); + this.createSQL = metadata.getDatabase().generateSchemaCreationScript( dialect ); } /**