HHH-12271 - SchemaDropperImpl does not drop constraints with IF EXISTS

This commit is contained in:
Andrea Boriero 2018-02-05 13:35:41 +00:00
parent e92f350e22
commit 6bf2869355

View File

@ -21,7 +21,7 @@
* @author Steve Ebersole * @author Steve Ebersole
*/ */
public class StandardForeignKeyExporter implements Exporter<ForeignKey> { public class StandardForeignKeyExporter implements Exporter<ForeignKey> {
private static final String COLUMN_MISMATCH_MSG = "Number of referencing columns [%s] did not " + private static final String COLUMN_MISMATCH_MSG = "Number of referencing columns [%s] did not " +
"match number of referenced columns [%s] in foreign-key [%s] from [%s] to [%s]"; "match number of referenced columns [%s] in foreign-key [%s] from [%s] to [%s]";
private final Dialect dialect; private final Dialect dialect;
@ -32,11 +32,11 @@ public StandardForeignKeyExporter(Dialect dialect) {
@Override @Override
public String[] getSqlCreateStrings(ForeignKey foreignKey, Metadata metadata) { public String[] getSqlCreateStrings(ForeignKey foreignKey, Metadata metadata) {
if ( ! dialect.hasAlterTable() ) { if ( !dialect.hasAlterTable() ) {
return NO_COMMANDS; return NO_COMMANDS;
} }
if ( ! foreignKey.isCreationEnabled() ) { if ( !foreignKey.isCreationEnabled() ) {
return NO_COMMANDS; return NO_COMMANDS;
} }
@ -45,8 +45,8 @@ public String[] getSqlCreateStrings(ForeignKey foreignKey, Metadata metadata) {
} }
final int numberOfColumns = foreignKey.getColumnSpan(); final int numberOfColumns = foreignKey.getColumnSpan();
final String[] columnNames = new String[ numberOfColumns ]; final String[] columnNames = new String[numberOfColumns];
final String[] targetColumnNames = new String[ numberOfColumns ]; final String[] targetColumnNames = new String[numberOfColumns];
final Iterator targetItr; final Iterator targetItr;
if ( foreignKey.isReferenceToPrimaryKey() ) { if ( foreignKey.isReferenceToPrimaryKey() ) {
@ -127,11 +127,11 @@ public String[] getSqlCreateStrings(ForeignKey foreignKey, Metadata metadata) {
@Override @Override
public String[] getSqlDropStrings(ForeignKey foreignKey, Metadata metadata) { public String[] getSqlDropStrings(ForeignKey foreignKey, Metadata metadata) {
if ( ! dialect.hasAlterTable() ) { if ( !dialect.hasAlterTable() ) {
return NO_COMMANDS; return NO_COMMANDS;
} }
if ( ! foreignKey.isCreationEnabled() ) { if ( !foreignKey.isCreationEnabled() ) {
return NO_COMMANDS; return NO_COMMANDS;
} }
@ -145,8 +145,21 @@ public String[] getSqlDropStrings(ForeignKey foreignKey, Metadata metadata) {
dialect dialect
); );
return new String[] { return new String[] {
dialect.getAlterTableString( sourceTableName ) getSqlDropStrings( sourceTableName, foreignKey, dialect )
+ dialect.getDropForeignKeyString() + foreignKey.getName()
}; };
} }
private String getSqlDropStrings(String tableName, ForeignKey foreignKey, Dialect dialect) {
final StringBuilder buf = new StringBuilder( dialect.getAlterTableString( tableName ) );
buf.append( dialect.getDropForeignKeyString() );
if ( dialect.supportsIfExistsBeforeConstraintName() ) {
buf.append( "if exists " );
}
buf.append( dialect.quote( foreignKey.getName() ) );
if ( dialect.supportsIfExistsAfterConstraintName() ) {
buf.append( " if exists" );
}
return buf.toString();
}
} }