HHH-6449 : Change Exportable.sqlCreateStrings/sqlDropStrings(MetadataImplementor) to take Dialect argument instead

This commit is contained in:
Gail Badner 2011-07-18 15:11:23 -07:00
parent 5b7ee4f11b
commit 49c54069cd
10 changed files with 58 additions and 93 deletions

View File

@ -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();
}
}

View File

@ -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<String> dialectScopes) {
public BasicAuxiliaryDatabaseObjectImpl(
Schema defaultSchema,
String createString,
String dropString,
Set<String> 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;
}
}

View File

@ -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<String> exportIdentifiers = new HashSet<String>( 50 );
List<String> script = new ArrayList<String>( 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<String> exportIdentifiers = new HashSet<String>( 50 );
List<String> script = new ArrayList<String>( 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<String> exportIdentifiers,
List<String> 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<String> exportIdentifiers,
List<String> script,
Exportable exportable) {
addSqlStrings(
exportIdentifiers, script, exportable.getExportIdentifier(), exportable.sqlCreateStrings( metadata )
exportIdentifiers, script, exportable.getExportIdentifier(), exportable.sqlCreateStrings( dialect )
);
}

View File

@ -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);
}

View File

@ -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 ) +

View File

@ -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 <tt>INDEX</tt>
@ -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()

View File

@ -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();
}
}

View File

@ -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 <tt>TABLE</tt> (or <tt>VIEW</tt>).
@ -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 " );

View File

@ -124,6 +124,7 @@ public class HibernateMappingProcessor {
}
}
auxiliaryDatabaseObject = new BasicAuxiliaryDatabaseObjectImpl(
metadata.getDatabase().getDefaultSchema(),
databaseObjectElement.getCreate(),
databaseObjectElement.getDrop(),
dialectScopes

View File

@ -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 );
}
/**