From c1e53deee6a0cf4a8c10e434d4ff71edc7917d24 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 24 Oct 2023 16:25:34 +0200 Subject: [PATCH] [jOOQ/jOOQ#14256] Syntax error when from current_timestamp when precision bind value is specified for Postgres --- .../src/main/java/org/jooq/impl/CurrentTimestamp.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/CurrentTimestamp.java b/jOOQ/src/main/java/org/jooq/impl/CurrentTimestamp.java index 837705dcbc..e2ddd03621 100644 --- a/jOOQ/src/main/java/org/jooq/impl/CurrentTimestamp.java +++ b/jOOQ/src/main/java/org/jooq/impl/CurrentTimestamp.java @@ -40,16 +40,19 @@ package org.jooq.impl; // ... // ... // ... +// ... import static org.jooq.SQLDialect.CUBRID; import static org.jooq.SQLDialect.DERBY; // ... // ... // ... +import static org.jooq.SQLDialect.POSTGRES; // ... // ... import static org.jooq.SQLDialect.SQLITE; // ... // ... +import static org.jooq.conf.ParamType.INLINED; import static org.jooq.impl.Keywords.K_CURRENT; import static org.jooq.impl.Keywords.K_FRACTION; import static org.jooq.impl.Keywords.K_TIMESTAMP; @@ -73,7 +76,8 @@ import org.jooq.SQLDialect; */ final class CurrentTimestamp extends AbstractField implements QOM.CurrentTimestamp { - private static final Set NO_SUPPORT_PRECISION = SQLDialect.supportedBy(CUBRID, DERBY, SQLITE); + private static final Set NO_SUPPORT_PRECISION = SQLDialect.supportedBy(CUBRID, DERBY, SQLITE); + private static final Set NO_SUPPORT_PRECISION_BIND = SQLDialect.supportedBy(POSTGRES); private final Field precision; @@ -134,7 +138,10 @@ final class CurrentTimestamp extends AbstractField implements QOM.CurrentT default: if (precision != null && !NO_SUPPORT_PRECISION.contains(ctx.dialect())) - ctx.visit(K_CURRENT).sql('_').visit(K_TIMESTAMP).sql('(').visit(precision).sql(')'); + if (NO_SUPPORT_PRECISION_BIND.contains(ctx.dialect())) + ctx.visit(K_CURRENT).sql('_').visit(K_TIMESTAMP).sql('(').paramType(INLINED, c -> c.visit(precision)).sql(')'); + else + ctx.visit(K_CURRENT).sql('_').visit(K_TIMESTAMP).sql('(').visit(precision).sql(')'); else ctx.visit(K_CURRENT).sql('_').visit(K_TIMESTAMP);