[jOOQ/jOOQ#8528] ALTER TABLE .. DROP CONSTRAINT .. RESTRICT by default

This commit is contained in:
Lukas Eder 2019-10-16 12:32:24 +02:00
parent 957fba030f
commit fb7e46f452

View File

@ -281,10 +281,10 @@ final class DDLInterpreter {
}
}
dropColumnsCascadeLocalConstraints(table.uniqueKeys, fields, check);
cascade(table.uniqueKeys, fields, check);
}
dropColumnsCascadeLocalConstraints(table.foreignkeys, fields, false);
cascade(table.foreignkeys, fields, false);
indexLoop:
while (it1.hasNext()) {
@ -300,13 +300,13 @@ final class DDLInterpreter {
table.fields.removeAll(fields);
}
private final void dropColumnsCascadeLocalConstraints(List<? extends MutableKey> keys, List<MutableField> fields, boolean check) {
private final void cascade(List<? extends MutableKey> keys, List<MutableField> fields, boolean check) {
Iterator<? extends MutableKey> it2 = keys.iterator();
while (it2.hasNext()) {
MutableKey key = it2.next();
if (intersect(key.keyFields, fields)) {
if (fields == null || intersect(key.keyFields, fields)) {
if (key instanceof MutableUniqueKey)
cascade((MutableUniqueKey) key, fields, !check);
@ -326,6 +326,8 @@ final class DDLInterpreter {
if (mfk.referencedKey.equals(key)) {
if (cascade)
it.remove();
else if (fields == null)
throw new DataDefinitionException("Cannot drop constraint " + key + " because other objects depend on it");
else if (fields.size() == 1)
throw new DataDefinitionException("Cannot drop column " + fields.get(0) + " because other objects depend on it");
else
@ -447,8 +449,12 @@ final class DDLInterpreter {
if (query.$dropConstraintType() != FOREIGN_KEY) {
Iterator<MutableUniqueKey> uks = existing.uniqueKeys.iterator();
while (uks.hasNext()) {
if (uks.next().name.equals(impl.getUnqualifiedName())) {
MutableUniqueKey key = uks.next();
if (key.name.equals(impl.getUnqualifiedName())) {
cascade(key, null, false);
uks.remove();
break removal;
}
@ -456,6 +462,7 @@ final class DDLInterpreter {
if (existing.primaryKey != null) {
if (existing.primaryKey.name.equals(impl.getUnqualifiedName())) {
cascade(existing.primaryKey, null, false);
existing.primaryKey = null;
break removal;
}