From ca5fb47c5b1d9bfed3443107a07faf5a98e9ca18 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 6 Dec 2022 14:59:10 +0100 Subject: [PATCH] [jOOQ/jOOQ#14372] Parser reports wrong Ambiguous field identifier error when derived tables share column names --- jOOQ/src/main/java/org/jooq/impl/ParserImpl.java | 3 ++- jOOQ/src/main/java/org/jooq/impl/ScopeStack.java | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index 95e12a8bc7..fbc265d344 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -14703,7 +14703,8 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { private final void scopeEnd(Query scopeOwner) { List> retain = new ArrayList<>(); - for (FieldProxy lookup : scope.lookupFields) { + // [#14372] Avoid looking up fields at a higher scope level + for (FieldProxy lookup : scope.lookupFields.iterableAtScopeLevel()) { Value> found = null; for (Field f : scope.fieldScope) { diff --git a/jOOQ/src/main/java/org/jooq/impl/ScopeStack.java b/jOOQ/src/main/java/org/jooq/impl/ScopeStack.java index 0cba31c3aa..cae413dbad 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ScopeStack.java +++ b/jOOQ/src/main/java/org/jooq/impl/ScopeStack.java @@ -110,6 +110,10 @@ final class ScopeStack implements Iterable { return iterable(e -> true).iterator(); } + final Iterable iterableAtScopeLevel() { + return () -> new ScopeStackIterator<>(list -> list.size() == scopeLevel + 1 ? list.get(scopeLevel) : null, e -> true); + } + final Iterable iterable(Predicate filter) { return () -> new ScopeStackIterator<>(list -> list.get(list.size() - 1), filter); }