[jOOQ/jOOQ#11535] Parser parses incorrect FOR UPDATE OF syntax,

depending on dialect
This commit is contained in:
Lukas Eder 2021-02-26 10:54:02 +01:00
parent 6e41431bc6
commit 13b24ba365
3 changed files with 7 additions and 3 deletions

View File

@ -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");

View File

@ -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();

View File

@ -293,6 +293,7 @@ final class SelectQueryImpl<R extends Record> extends AbstractResultQuery<R> imp
private static final Set<SQLDialect> SUPPORT_FULL_WITH_TIES = SQLDialect.supportedBy(H2, POSTGRES);
private static final Set<SQLDialect> EMULATE_DISTINCT_ON = SQLDialect.supportedBy(DERBY, FIREBIRD, HSQLDB, MARIADB, MYSQL, SQLITE);
static final Set<SQLDialect> NO_SUPPORT_FOR_UPDATE_OF_FIELDS = SQLDialect.supportedBy(MYSQL, POSTGRES);