diff --git a/jOOQ/src/main/java/org/jooq/impl/AlterTableImpl.java b/jOOQ/src/main/java/org/jooq/impl/AlterTableImpl.java index afa46c07ca..05edba3daa 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AlterTableImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/AlterTableImpl.java @@ -229,7 +229,7 @@ implements private static final Clause[] CLAUSES = { ALTER_TABLE }; private static final Set NO_SUPPORT_IF_EXISTS = SQLDialect.supportedUntil(CUBRID, DERBY, FIREBIRD, MARIADB); private static final Set NO_SUPPORT_IF_EXISTS_COLUMN = SQLDialect.supportedBy(CUBRID, DERBY, FIREBIRD); - private static final Set NO_SUPPORT_IF_EXISTS_CONSTRAINT = SQLDialect.supportedBy(CUBRID, DERBY, FIREBIRD); + private static final Set NO_SUPPORT_IF_EXISTS_CONSTRAINT = SQLDialect.supportedBy(CUBRID, DERBY, FIREBIRD, YUGABYTEDB); private static final Set NO_SUPPORT_IF_NOT_EXISTS_COLUMN = SQLDialect.supportedBy(CUBRID, DERBY, FIREBIRD); private static final Set SUPPORT_RENAME_COLUMN = SQLDialect.supportedBy(DERBY); private static final Set SUPPORT_RENAME_TABLE = SQLDialect.supportedBy(DERBY); @@ -973,13 +973,21 @@ implements return !NO_SUPPORT_IF_EXISTS_COLUMN.contains(ctx.dialect()); } + private final boolean supportsIfExistsConstraint(Context ctx) { + return !NO_SUPPORT_IF_EXISTS_CONSTRAINT.contains(ctx.dialect()); + } + private final boolean supportsIfNotExistsColumn(Context ctx) { return !NO_SUPPORT_IF_NOT_EXISTS_COLUMN.contains(ctx.dialect()); } @Override public final void accept(Context ctx) { - if ((ifExists && !supportsIfExists(ctx)) || ((ifExistsColumn || ifExistsConstraint || ifNotExistsColumn) && !supportsIfExistsColumn(ctx))) + if ((ifExists && !supportsIfExists(ctx)) + || (ifExistsColumn && !supportsIfExistsColumn(ctx)) + || (ifExistsConstraint && !supportsIfExistsConstraint(ctx)) + || (ifNotExistsColumn && !supportsIfNotExistsColumn(ctx)) + ) { tryCatch( ctx, DDLStatementType.ALTER_TABLE, @@ -987,6 +995,7 @@ implements ifExistsColumn || ifExistsConstraint ? TRUE : ifNotExistsColumn ? FALSE : null, c -> accept0(c) ); + } else accept0(ctx); } diff --git a/jOOQ/src/main/java/org/jooq/impl/Tools.java b/jOOQ/src/main/java/org/jooq/impl/Tools.java index 71afbb88b9..68cba7d804 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Tools.java +++ b/jOOQ/src/main/java/org/jooq/impl/Tools.java @@ -5579,6 +5579,7 @@ final class Tools { switch (type) { case ALTER_DATABASE: sqlstate = "3D000"; break; case ALTER_DOMAIN : + case ALTER_TABLE : case ALTER_TYPE : sqlstate = "42704"; break; case CREATE_DOMAIN : case CREATE_TYPE : sqlstate = "42710"; break;