diff --git a/jOOQ/src/main/java/org/jooq/impl/DeleteQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/DeleteQueryImpl.java index 8ff8dc7a4d..5c4f7e1970 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DeleteQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/DeleteQueryImpl.java @@ -54,6 +54,7 @@ import static org.jooq.SQLDialect.DERBY; import static org.jooq.SQLDialect.DUCKDB; // ... import static org.jooq.SQLDialect.FIREBIRD; +// ... import static org.jooq.SQLDialect.H2; // ... import static org.jooq.SQLDialect.HSQLDB; @@ -86,6 +87,7 @@ import static org.jooq.impl.Keywords.K_DELETE; import static org.jooq.impl.Keywords.K_FROM; import static org.jooq.impl.Keywords.K_LIMIT; import static org.jooq.impl.Keywords.K_ORDER_BY; +import static org.jooq.impl.Keywords.K_ROWS; import static org.jooq.impl.Keywords.K_USING; import static org.jooq.impl.Keywords.K_WHERE; import static org.jooq.impl.Tools.containsDeclaredTable; @@ -137,7 +139,7 @@ implements private static final Set SPECIAL_DELETE_AS_SYNTAX = SQLDialect.supportedBy(MARIADB, MYSQL); // LIMIT is not supported at all - private static final Set NO_SUPPORT_LIMIT = SQLDialect.supportedUntil(CUBRID, DERBY, DUCKDB, FIREBIRD, H2, HSQLDB, POSTGRES, SQLITE, YUGABYTEDB); + private static final Set NO_SUPPORT_LIMIT = SQLDialect.supportedUntil(CUBRID, DERBY, DUCKDB, H2, HSQLDB, POSTGRES, SQLITE, YUGABYTEDB); // LIMIT is supported but not ORDER BY private static final Set NO_SUPPORT_ORDER_BY_LIMIT = SQLDialect.supportedBy(IGNITE); @@ -371,10 +373,7 @@ implements .visit(K_ORDER_BY).sql(' ') .visit(orderBy); - if (limit != null) - ctx.formatSeparator() - .visit(K_LIMIT).sql(' ') - .visit(limit); + acceptLimit(ctx, limit); } ctx.start(DELETE_RETURNING); @@ -382,6 +381,18 @@ implements ctx.end(DELETE_RETURNING); } + static final void acceptLimit(Context ctx, Field limit) { + if (limit != null) + if (ctx.family() == FIREBIRD) + ctx.formatSeparator() + .visit(K_ROWS).sql(' ') + .visit(limit); + else + ctx.formatSeparator() + .visit(K_LIMIT).sql(' ') + .visit(limit); + } + @Override public final Clause[] clauses(Context ctx) { return CLAUSES; diff --git a/jOOQ/src/main/java/org/jooq/impl/UpdateQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/UpdateQueryImpl.java index b6d82e699d..f0556b09d6 100644 --- a/jOOQ/src/main/java/org/jooq/impl/UpdateQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/UpdateQueryImpl.java @@ -57,6 +57,7 @@ import static org.jooq.SQLDialect.DERBY; import static org.jooq.SQLDialect.DUCKDB; // ... import static org.jooq.SQLDialect.FIREBIRD; +// ... import static org.jooq.SQLDialect.H2; // ... import static org.jooq.SQLDialect.HSQLDB; @@ -91,6 +92,7 @@ import static org.jooq.impl.DSL.trueCondition; import static org.jooq.impl.Keywords.K_FROM; import static org.jooq.impl.Keywords.K_LIMIT; import static org.jooq.impl.Keywords.K_ORDER_BY; +import static org.jooq.impl.Keywords.K_ROWS; import static org.jooq.impl.Keywords.K_SET; import static org.jooq.impl.Keywords.K_UPDATE; import static org.jooq.impl.Keywords.K_WHERE; @@ -204,7 +206,7 @@ implements private static final Set EMULATE_RETURNING_WITH_UPSERT = SQLDialect.supportedBy(MARIADB); // LIMIT is not supported at all - private static final Set NO_SUPPORT_LIMIT = SQLDialect.supportedUntil(CUBRID, DERBY, DUCKDB, FIREBIRD, H2, HSQLDB, POSTGRES, SQLITE, YUGABYTEDB); + private static final Set NO_SUPPORT_LIMIT = SQLDialect.supportedUntil(CUBRID, DERBY, DUCKDB, H2, HSQLDB, POSTGRES, SQLITE, YUGABYTEDB); // LIMIT is supported but not ORDER BY private static final Set NO_SUPPORT_ORDER_BY_LIMIT = SQLDialect.supportedBy(IGNITE); @@ -749,10 +751,7 @@ implements .visit(K_ORDER_BY).sql(' ') .visit(orderBy); - if (limit != null) - ctx.formatSeparator() - .visit(K_LIMIT).sql(' ') - .visit(limit); + DeleteQueryImpl.acceptLimit(ctx, limit); } ctx.start(UPDATE_RETURNING);