diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java index d989a4b4d3..0bd8d30590 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java @@ -386,6 +386,7 @@ final class SelectQueryImpl extends AbstractResultQuery imp static final Set NO_SUPPORT_LIMIT_ZERO = SQLDialect.supportedBy(DERBY, HSQLDB); static final Set WRAP_EXP_BODY_IN_DERIVED_TABLE_LIMIT = SQLDialect.supportedUntil(CLICKHOUSE); static final Set WRAP_EXP_BODY_IN_DERIVED_TABLE_ORDER_BY = SQLDialect.supportedBy(CLICKHOUSE); + static final Set WRAP_UNION_SUBQ_IN_DERIVED_TABLE_LIMIT = SQLDialect.supportedBy(FIREBIRD); @@ -3412,12 +3413,6 @@ final class SelectQueryImpl extends AbstractResultQuery imp - - - - - - @@ -3441,7 +3436,7 @@ final class SelectQueryImpl extends AbstractResultQuery imp // [#6197] When emulating WITH TIES using RANK() in a subquery, we must avoid rendering the // subquery's ORDER BY clause - if (!getLimit().withTies() + if (!actualLimit.withTies() // Dialects with native support || SUPPORT_FULL_WITH_TIES.contains(ctx.dialect()) @@ -3676,7 +3671,6 @@ final class SelectQueryImpl extends AbstractResultQuery imp - private static final Set NO_SUPPORT_UNION_PARENTHESES = SQLDialect.supportedBy(SQLITE); @@ -3704,7 +3698,12 @@ final class SelectQueryImpl extends AbstractResultQuery imp SelectQueryImpl s; // [#10711] Some derived tables are needed if dialects don't support CTE in union subqueries - return NO_SUPPORT_CTE_IN_UNION.contains(context.dialect()) && (s = selectQueryImpl(s1)) != null && s.with != null; + return NO_SUPPORT_CTE_IN_UNION.contains(context.dialect()) + && (s = selectQueryImpl(s1)) != null + && s.with != null + || WRAP_UNION_SUBQ_IN_DERIVED_TABLE_LIMIT.contains(context.dialect()) + && (s = selectQueryImpl(s1)) != null + && (s.limit.isApplicable() || !s.orderBy.isEmpty()); } private final boolean unionParensRequired(Context context) { @@ -3799,6 +3798,9 @@ final class SelectQueryImpl extends AbstractResultQuery imp switch (ctx.family()) { case FIREBIRD: + if (derivedTableRequired) + ctx.sql(parenthesis); + break; default: