From beee30a4df9fdb2b9f97dead9bb2da38f0a43195 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Fri, 2 Dec 2022 13:46:21 +0100 Subject: [PATCH] [jOOQ/jOOQ#14353] Parser meta lookups don't work correctly when using DELETE .. FROM with aliased tables --- .../main/java/org/jooq/impl/ParserImpl.java | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index 6a64d19168..a059fbc68a 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -2232,12 +2232,9 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { } parseKeywordIf("FROM"); - Table table = parseTable(() -> peekKeyword(KEYWORDS_IN_DELETE_FROM)); - - scope.scope(table); - + Table table = scope.scope(parseTable(() -> peekKeyword(KEYWORDS_IN_DELETE_FROM))); DeleteUsingStep s1 = with == null ? dsl.delete(table) : with.delete(table); - DeleteWhereStep s2 = parseKeywordIf("USING", "FROM") ? s1.using(parseList(',', t -> parseTable(() -> peekKeyword(KEYWORDS_IN_DELETE_FROM)))) : s1; + DeleteWhereStep s2 = parseKeywordIf("USING", "FROM") ? s1.using(parseList(',', t -> scope.scope(parseTable(() -> peekKeyword(KEYWORDS_IN_DELETE_FROM))))) : s1; DeleteOrderByStep s3 = parseKeywordIf("ALL") ? s2 : parseKeywordIf("WHERE") @@ -2428,12 +2425,9 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { // percent = parseKeywordIf("PERCENT") && requireProEdition(); } - Table table = parseTable(() -> peekKeyword(KEYWORDS_IN_UPDATE_FROM)); - - scope.scope(table); - + Table table = scope.scope(parseTable(() -> peekKeyword(KEYWORDS_IN_UPDATE_FROM))); UpdateSetFirstStep s1 = (with == null ? dsl.update(table) : with.update(table)); - List> from = parseKeywordIf("FROM") ? parseList(',', t -> parseTable(() -> peekKeyword(KEYWORDS_IN_UPDATE_FROM))) : null; + List> from = parseKeywordIf("FROM") ? parseList(',', t -> scope.scope(parseTable(() -> peekKeyword(KEYWORDS_IN_UPDATE_FROM)))) : null; parseKeyword("SET"); UpdateFromStep s2; @@ -14641,12 +14635,14 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { - private final void scope(Table table) { + private final Table scope(Table table) { tableScope.set(table.getQualifiedName(), table); + return table; } - private final void scope(Field field) { + private final Field scope(Field field) { fieldScope.set(field.getQualifiedName(), field); + return field; } private final void scopeResolve() {