From 13b24ba365d895fa3f0325d57f7df796cb0a8419 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Fri, 26 Feb 2021 10:54:02 +0100 Subject: [PATCH] [jOOQ/jOOQ#11535] Parser parses incorrect FOR UPDATE OF syntax, depending on dialect --- jOOQ/src/main/java/org/jooq/impl/Names.java | 2 -- jOOQ/src/main/java/org/jooq/impl/ParserImpl.java | 7 ++++++- jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java | 1 + 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/Names.java b/jOOQ/src/main/java/org/jooq/impl/Names.java index 8ff544b09a..abd096f5eb 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Names.java +++ b/jOOQ/src/main/java/org/jooq/impl/Names.java @@ -171,9 +171,7 @@ final class Names { static final Name N_JSON_VALUE = unquotedName("json_value"); static final Name N_JSONB_AGG = unquotedName("jsonb_agg"); static final Name N_JSONB_BUILD_ARRAY = unquotedName("jsonb_build_array"); - static final Name N_JSONB_OBJECT = unquotedName("jsonb_object"); static final Name N_JSONB_OBJECT_AGG = unquotedName("jsonb_object_agg"); - static final Name N_JSONB_OBJECTAGG = unquotedName("jsonb_objectagg"); static final Name N_JSONB_PATH_EXISTS = unquotedName("jsonb_path_exists"); static final Name N_JSONB_PATH_QUERY_FIRST = unquotedName("jsonb_path_query_first"); static final Name N_LCASE = unquotedName("lcase"); diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index 054bbabc9a..3033292c13 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -365,6 +365,7 @@ import static org.jooq.impl.SQLDataType.INTEGER; import static org.jooq.impl.SQLDataType.NVARCHAR; import static org.jooq.impl.SQLDataType.VARCHAR; import static org.jooq.impl.SelectQueryImpl.EMULATE_SELECT_INTO_AS_CTAS; +import static org.jooq.impl.SelectQueryImpl.NO_SUPPORT_FOR_UPDATE_OF_FIELDS; import static org.jooq.impl.Tools.EMPTY_BYTE; import static org.jooq.impl.Tools.EMPTY_COLLECTION; import static org.jooq.impl.Tools.EMPTY_COMMON_TABLE_EXPRESSION; @@ -374,6 +375,7 @@ import static org.jooq.impl.Tools.EMPTY_OBJECT; import static org.jooq.impl.Tools.EMPTY_QUERYPART; import static org.jooq.impl.Tools.EMPTY_ROW; import static org.jooq.impl.Tools.EMPTY_SORTFIELD; +import static org.jooq.impl.Tools.EMPTY_TABLE; import static org.jooq.impl.Tools.aliased; import static org.jooq.impl.Tools.normaliseNameCase; import static org.jooq.impl.XMLPassingMechanism.BY_REF; @@ -1326,7 +1328,10 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { throw expected("UPDATE", "NO KEY UPDATE", "SHARE", "KEY SHARE", "XML", "JSON"); if (parseKeywordIf("OF")) - result.setForUpdateOf(parseList(',', ParseContext::parseField)); + if (NO_SUPPORT_FOR_UPDATE_OF_FIELDS.contains(parseDialect())) + result.setForUpdateOf(parseList(',', ParseContext::parseTable).toArray(EMPTY_TABLE)); + else + result.setForUpdateOf(parseList(',', ParseContext::parseField)); if (parseKeywordIf("NOWAIT")) result.setForUpdateNoWait(); diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java index a51e7ca5e0..8743c73db8 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java @@ -293,6 +293,7 @@ final class SelectQueryImpl extends AbstractResultQuery imp private static final Set SUPPORT_FULL_WITH_TIES = SQLDialect.supportedBy(H2, POSTGRES); private static final Set EMULATE_DISTINCT_ON = SQLDialect.supportedBy(DERBY, FIREBIRD, HSQLDB, MARIADB, MYSQL, SQLITE); + static final Set NO_SUPPORT_FOR_UPDATE_OF_FIELDS = SQLDialect.supportedBy(MYSQL, POSTGRES);