[jOOQ/jOOQ#14353] Parser meta lookups don't work correctly when using

DELETE .. FROM with aliased tables
This commit is contained in:
Lukas Eder 2022-12-02 13:46:21 +01:00
parent e702a9f8f7
commit beee30a4df

View File

@ -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<Table<?>> from = parseKeywordIf("FROM") ? parseList(',', t -> parseTable(() -> peekKeyword(KEYWORDS_IN_UPDATE_FROM))) : null;
List<Table<?>> 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() {