HHH-6449 : Change Exportable.sqlCreateStrings/sqlDropStrings(MetadataImplementor) to take Dialect argument instead
This commit is contained in:
parent
5b7ee4f11b
commit
49c54069cd
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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 )
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
|
@ -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 ) +
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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 " );
|
||||
|
|
|
@ -124,6 +124,7 @@ public class HibernateMappingProcessor {
|
|||
}
|
||||
}
|
||||
auxiliaryDatabaseObject = new BasicAuxiliaryDatabaseObjectImpl(
|
||||
metadata.getDatabase().getDefaultSchema(),
|
||||
databaseObjectElement.getCreate(),
|
||||
databaseObjectElement.getDrop(),
|
||||
dialectScopes
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue