protected AST lookupProperty(AST dot, boolean root, boolean inSelect) throws SemanticException { DotNode dotNode = (DotNode) dot; FromReferenceNode lhs = dotNode.getLhs(); AST rhs = lhs.getNextSibling(); switch (rhs.getType()) { case SqlTokenTypes.ELEMENTS: case SqlTokenTypes.INDICES: if (log.isDebugEnabled()) { log.debug( "lookupProperty() " + dotNode.getPath() + " => " + rhs.getText() + "(" + lhs.getPath() + ")"); } CollectionFunction f = (CollectionFunction) rhs; // Re-arrange the tree so that the collection function is the root and the lhs is the path. f.setFirstChild(lhs); lhs.setNextSibling(null); dotNode.setFirstChild(f); resolve(lhs); // Don't forget to resolve the argument! f.resolve(inSelect); // Resolve the collection function now. return f; default: // Resolve everything up to this dot, but don't resolve the placeholders yet. dotNode.resolveFirstChild(); return dotNode; } }
protected void resolveSelectExpression(AST node) throws SemanticException { // This is called when it's time to fully resolve a path expression. int type = node.getType(); switch (type) { case DOT: DotNode dot = (DotNode) node; dot.resolveSelectExpression(); break; case ALIAS_REF: // Notify the FROM element that it is being referenced by the select. FromReferenceNode aliasRefNode = (FromReferenceNode) node; // aliasRefNode.resolve( false, false, aliasRefNode.getText() ); //TODO: is it kosher to do // it here? aliasRefNode.resolve(false, false); // TODO: is it kosher to do it here? FromElement fromElement = aliasRefNode.getFromElement(); if (fromElement != null) { fromElement.setIncludeSubclasses(true); } default: break; } }
protected void lookupAlias(AST aliasRef) throws SemanticException { FromElement alias = currentFromClause.getFromElement(aliasRef.getText()); FromReferenceNode aliasRefNode = (FromReferenceNode) aliasRef; aliasRefNode.setFromElement(alias); }