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); }