Skip to content
This repository was archived by the owner on Aug 23, 2023. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -278,12 +278,12 @@ public void setOnUpdate(ForeignKeyConstraintType rule) {
public SqlStatement[] generateStatements(Database database) {

boolean deferrable = false;
if (getDeferrable() != null) {
if (checkDeferrable(database) && getDeferrable() != null) {
deferrable = getDeferrable();
}

boolean initiallyDeferred = false;
if (getInitiallyDeferred() != null) {
if (checkDeferrable(database) && getInitiallyDeferred() != null) {
initiallyDeferred = getInitiallyDeferred();
}

Expand All @@ -310,6 +310,10 @@ public SqlStatement[] generateStatements(Database database) {
};
}

private boolean checkDeferrable(Database database) {
return database.supportsInitiallyDeferrableColumns() || database.failOnDeferrable();
}

@Override
protected Change[] createInverses() {
DropForeignKeyConstraintChange inverse = new DropForeignKeyConstraintChange();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,11 @@ public DatabaseObject[] getContainingObjects() {
return null;
}

@Override
public boolean failOnDeferrable() {
return true;
}

// ------- DATABASE INFORMATION METHODS ---- //

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -472,5 +472,8 @@ default String getDisplayName() {
String unescapeDataTypeString(String dataTypeString);

ValidationErrors validate();

boolean failOnDeferrable();

}

Original file line number Diff line number Diff line change
Expand Up @@ -519,4 +519,10 @@ public String getAutoIncrementClause(BigInteger startWith, BigInteger incrementB
final String clause = super.getAutoIncrementClause(startWith, incrementBy, generationType, defaultOnNull);
return clause.replace(",", ""); //sql doesn't use commas between the values
}

@Override
public boolean failOnDeferrable() {
return false;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -796,6 +796,11 @@ public ValidationErrors validate() {
return new ValidationErrors();
}

@Override
public boolean failOnDeferrable() {
return true;
}

@Override
public boolean supportsNotNullConstraintNames() {
return false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,14 @@ public ValidationErrors validate(AddForeignKeyConstraintStatement addForeignKeyC
ValidationErrors validationErrors = new ValidationErrors();

if ((addForeignKeyConstraintStatement.isInitiallyDeferred() || addForeignKeyConstraintStatement.isDeferrable()) && !database.supportsInitiallyDeferrableColumns()) {
validationErrors.checkDisallowedField("initiallyDeferred", addForeignKeyConstraintStatement.isInitiallyDeferred(), database);
validationErrors.checkDisallowedField("deferrable", addForeignKeyConstraintStatement.isDeferrable(), database);
if (database.failOnDeferrable()) {
validationErrors.checkDisallowedField("initiallyDeferred", addForeignKeyConstraintStatement.isInitiallyDeferred(), database);
validationErrors.checkDisallowedField("deferrable", addForeignKeyConstraintStatement.isDeferrable(), database);
} else {
// reset this as it's not supported
addForeignKeyConstraintStatement.setDeferrable(false);
addForeignKeyConstraintStatement.setInitiallyDeferred(false);
}
}

validationErrors.checkRequiredField("baseColumnNames", addForeignKeyConstraintStatement.getBaseColumnNames());
Expand Down