From dccb4694a997fdf303fd696a8bfdca3b0b329556 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 12 Apr 2023 13:15:14 +0200 Subject: [PATCH] [jOOQ/jOOQ#11485] Support for Trino DB - No NVARCHAR support - LIKE ANY and LIKE ALL support - Emulate FILTER for window functions --- .../org/jooq/impl/AbstractAggregateFunction.java | 16 ++++++++++++---- .../main/java/org/jooq/impl/DefaultBinding.java | 2 +- .../main/java/org/jooq/impl/EqQuantified.java | 4 ++-- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractAggregateFunction.java b/jOOQ/src/main/java/org/jooq/impl/AbstractAggregateFunction.java index e8e1de09aa..33bf8b32d7 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractAggregateFunction.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractAggregateFunction.java @@ -113,6 +113,7 @@ implements static final Set NO_SUPPORT_FILTER = SQLDialect.supportedUntil(CUBRID, DERBY, IGNITE, MARIADB, MYSQL); + static final Set NO_SUPPORT_WINDOW_FILTER = SQLDialect.supportedBy(TRINO); static final Set SUPPORT_DISTINCT_RVE = SQLDialect.supportedBy(H2, POSTGRES); static final Lazy> ASTERISK = Lazy.of(() -> DSL.field(DSL.raw("*"), Integer.class)); @@ -285,7 +286,7 @@ implements } final void acceptArguments3(Context ctx, QueryPartCollectionView> args, Function, ? extends Field> fun) { - if (!filter.hasWhere() || !NO_SUPPORT_FILTER.contains(ctx.dialect())) + if (!filter.hasWhere() || supportsFilter(ctx)) ctx.visit(wrap(args).map(fun)); @@ -321,7 +322,7 @@ implements acceptFilterClause(ctx, filter); } - static final void acceptFilterClause(Context ctx, Condition filter) { + final void acceptFilterClause(Context ctx, Condition f) { switch (ctx.family()) { @@ -330,18 +331,25 @@ implements default: - if (!NO_SUPPORT_FILTER.contains(ctx.dialect())) + if (supportsFilter(ctx)) ctx.sql(' ') .visit(K_FILTER) .sql(" (") .visit(K_WHERE) .sql(' ') - .visit(filter) + .visit(f) .sql(')'); break; } } + private final boolean supportsFilter(Context ctx) { + return !( + NO_SUPPORT_FILTER.contains(ctx.dialect()) + || NO_SUPPORT_WINDOW_FILTER.contains(ctx.dialect()) && isWindow() + ); + } + final void acceptOrderBy(Context ctx) { if (!Tools.isEmpty(withinGroupOrderBy)) { switch (ctx.family()) { diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java b/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java index 858bacb801..d38e67e7fe 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java @@ -707,7 +707,7 @@ public class DefaultBinding implements Binding { static final Set NEEDS_PRECISION_SCALE_ON_BIGDECIMAL = SQLDialect.supportedBy(CUBRID, DERBY, FIREBIRD, H2, HSQLDB); static final Set REQUIRES_JSON_CAST = SQLDialect.supportedBy(POSTGRES, TRINO, YUGABYTEDB); static final Set NO_SUPPORT_ENUM_CAST = SQLDialect.supportedBy(POSTGRES, YUGABYTEDB); - static final Set NO_SUPPORT_NVARCHAR = SQLDialect.supportedBy(DERBY, FIREBIRD, POSTGRES, SQLITE, YUGABYTEDB); + static final Set NO_SUPPORT_NVARCHAR = SQLDialect.supportedBy(DERBY, FIREBIRD, POSTGRES, SQLITE, TRINO, YUGABYTEDB); diff --git a/jOOQ/src/main/java/org/jooq/impl/EqQuantified.java b/jOOQ/src/main/java/org/jooq/impl/EqQuantified.java index f3b6b3cd99..f216ff8a53 100644 --- a/jOOQ/src/main/java/org/jooq/impl/EqQuantified.java +++ b/jOOQ/src/main/java/org/jooq/impl/EqQuantified.java @@ -90,8 +90,8 @@ implements - private static final Set NO_SUPPORT_QUANTIFIED_LIKE = SQLDialect.supportedBy(CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE); - private static final Set NO_SUPPORT_QUANTIFIED_SIMILAR_TO = SQLDialect.supportedBy(CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB); + private static final Set NO_SUPPORT_QUANTIFIED_LIKE = SQLDialect.supportedBy(CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE, TRINO); + private static final Set NO_SUPPORT_QUANTIFIED_SIMILAR_TO = SQLDialect.supportedBy(CUBRID, DERBY, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB); private static final Set SUPPORTS_QUANTIFIED_ARRAYS = SQLDialect.supportedBy(POSTGRES); @Override