private Optional<ResolvedField> resolveField(Expression node, QualifiedName name, int fieldIndexOffset, boolean local)
{
List<Field> matches = relation.resolveFields(name);
if (matches.size() > 1) {
throw ambiguousAttributeException(node, name);
}
else if (matches.size() == 1) {
return Optional.of(asResolvedField(getOnlyElement(matches), fieldIndexOffset, local));
}
else {
if (isColumnReference(name, relation)) {
return Optional.empty();
}
if (parent.isPresent()) {
return parent.get().resolveField(node, name, fieldIndexOffset + relation.getAllFieldCount(), local && !queryBoundary);
}
return Optional.empty();
}
}