@Override public List<TableName> visit(JoinTableNode joinNode) throws SQLException { List<TableName> lhs = joinNode.getLHS().accept(this); List<TableName> rhs = joinNode.getType() == JoinType.Semi || joinNode.getType() == JoinType.Anti ? Collections.<TableName> emptyList() : joinNode.getRHS().accept(this); List<TableName> ret = Lists.<TableName>newArrayListWithExpectedSize(lhs.size() + rhs.size()); ret.addAll(lhs); ret.addAll(rhs); return ret; }
@Override public TableNode visit(JoinTableNode joinNode) throws SQLException { TableNode lhs = joinNode.getLHS(); TableNode rhs = joinNode.getRHS(); TableNode lhsReplace = lhs.accept(this); TableNode rhsReplace = rhs.accept(this); if (lhs == lhsReplace && rhs == rhsReplace) return joinNode; return FACTORY.join(joinNode.getType(), lhsReplace, rhsReplace, joinNode.getOnNode(), joinNode.isSingleValueOnly()); }
@Override public TableNode visit(JoinTableNode joinNode) throws SQLException { TableNode lhsNode = joinNode.getLHS(); TableNode rhsNode = joinNode.getRHS(); ParseNode onNode = joinNode.getOnNode(); TableNode normLhsNode = lhsNode.accept(this); TableNode normRhsNode = rhsNode.accept(this); parseNodeRewriter.reset(); ParseNode normOnNode = onNode == null ? null : onNode.accept(parseNodeRewriter); if (lhsNode == normLhsNode && rhsNode == normRhsNode && onNode == normOnNode) return joinNode; return NODE_FACTORY.join(joinNode.getType(), normLhsNode, normRhsNode, normOnNode, joinNode.isSingleValueOnly()); }
@Override public Pair<Table, List<JoinSpec>> visit(JoinTableNode joinNode) throws SQLException { Pair<Table, List<JoinSpec>> lhs = joinNode.getLHS().accept(this); Pair<Table, List<JoinSpec>> rhs = joinNode.getRHS().accept(this); JoinTable joinTable = rhs.getSecond() == null ? new JoinTable(rhs.getFirst()) : new JoinTable(rhs.getFirst(), rhs.getSecond()); List<JoinSpec> joinSpecs = lhs.getSecond(); if (joinSpecs == null) { joinSpecs = new ArrayList<JoinSpec>(); } joinSpecs.add(new JoinSpec(joinNode.getType(), joinNode.getOnNode(), joinTable, joinNode.isSingleValueOnly(), origResolver)); return new Pair<Table, List<JoinSpec>>(lhs.getFirst(), joinSpecs); }
/** * Iterate through the nodes in the FROM clause to build a column resolver used to lookup a column given the name * and alias. * * @param statement * the select statement * @return the column resolver * @throws SQLException * @throws SQLFeatureNotSupportedException * if unsupported constructs appear in the FROM clause * @throws TableNotFoundException * if table name not found in schema */ public static ColumnResolver getResolverForQuery(SelectStatement statement, PhoenixConnection connection, boolean alwaysHitServer, TableName mutatingTableName) throws SQLException { TableNode fromNode = statement.getFrom(); if (fromNode == null) return EMPTY_TABLE_RESOLVER; if (fromNode instanceof NamedTableNode) return new SingleTableColumnResolver(connection, (NamedTableNode) fromNode, true, 1, statement.getUdfParseNodes(), alwaysHitServer, mutatingTableName); MultiTableColumnResolver visitor = new MultiTableColumnResolver(connection, 1, statement.getUdfParseNodes(), mutatingTableName); fromNode.accept(visitor); return visitor; }
Map<String,ParseNode> aliasMap = rewriter.getAliasMap(); TableNode from = statement.getFrom(); TableNode normFrom = from == null ? null : from.accept(new TableNodeRewriter(rewriter)); ParseNode where = statement.getWhere(); ParseNode normWhere = where;
normSelectNodes = Lists.newArrayList(selectNodes.subList(0, i)); List<TableName> tableNames = statement.getFrom().accept(new TableNameVisitor()); for (TableName tableName : tableNames) { TableWildcardParseNode node = NODE_FACTORY.tableWildcard(tableName);
final SelectStatement select, final Map<TableRef, TableRef> replacement) throws SQLException { TableNode from = select.getFrom(); TableNode newFrom = from.accept(new TableNodeVisitor<TableNode>() { private TableRef resolveTable(String alias, TableName name) throws SQLException { if (alias != null)
public static JoinTable compile(PhoenixStatement statement, SelectStatement select, ColumnResolver resolver) throws SQLException { JoinCompiler compiler = new JoinCompiler(statement, select, resolver); JoinTableConstructor constructor = compiler.new JoinTableConstructor(); Pair<Table, List<JoinSpec>> res = select.getFrom().accept(constructor); JoinTable joinTable = res.getSecond() == null ? compiler.new JoinTable(res.getFirst()) : compiler.new JoinTable(res.getFirst(), res.getSecond()); if (select.getWhere() != null) {
@Override public List<TableName> visit(JoinTableNode joinNode) throws SQLException { List<TableName> lhs = joinNode.getLHS().accept(this); List<TableName> rhs = joinNode.getType() == JoinType.Semi || joinNode.getType() == JoinType.Anti ? Collections.<TableName> emptyList() : joinNode.getRHS().accept(this); List<TableName> ret = Lists.<TableName>newArrayListWithExpectedSize(lhs.size() + rhs.size()); ret.addAll(lhs); ret.addAll(rhs); return ret; }
@Override public List<TableName> visit(JoinTableNode joinNode) throws SQLException { List<TableName> lhs = joinNode.getLHS().accept(this); List<TableName> rhs = joinNode.getType() == JoinType.Semi || joinNode.getType() == JoinType.Anti ? Collections.<TableName> emptyList() : joinNode.getRHS().accept(this); List<TableName> ret = Lists.<TableName>newArrayListWithExpectedSize(lhs.size() + rhs.size()); ret.addAll(lhs); ret.addAll(rhs); return ret; }
@Override public TableNode visit(JoinTableNode joinNode) throws SQLException { TableNode lhs = joinNode.getLHS(); TableNode rhs = joinNode.getRHS(); TableNode lhsReplace = lhs.accept(this); TableNode rhsReplace = rhs.accept(this); if (lhs == lhsReplace && rhs == rhsReplace) return joinNode; return FACTORY.join(joinNode.getType(), lhsReplace, rhsReplace, joinNode.getOnNode(), joinNode.isSingleValueOnly()); }
@Override public TableNode visit(JoinTableNode joinNode) throws SQLException { TableNode lhs = joinNode.getLHS(); TableNode rhs = joinNode.getRHS(); TableNode lhsReplace = lhs.accept(this); TableNode rhsReplace = rhs.accept(this); if (lhs == lhsReplace && rhs == rhsReplace) return joinNode; return FACTORY.join(joinNode.getType(), lhsReplace, rhsReplace, joinNode.getOnNode(), joinNode.isSingleValueOnly()); }
@Override public TableNode visit(JoinTableNode joinNode) throws SQLException { TableNode lhsNode = joinNode.getLHS(); TableNode rhsNode = joinNode.getRHS(); ParseNode onNode = joinNode.getOnNode(); TableNode normLhsNode = lhsNode.accept(this); TableNode normRhsNode = rhsNode.accept(this); parseNodeRewriter.reset(); ParseNode normOnNode = onNode == null ? null : onNode.accept(parseNodeRewriter); if (lhsNode == normLhsNode && rhsNode == normRhsNode && onNode == normOnNode) return joinNode; return NODE_FACTORY.join(joinNode.getType(), normLhsNode, normRhsNode, normOnNode, joinNode.isSingleValueOnly()); }
@Override public TableNode visit(JoinTableNode joinNode) throws SQLException { TableNode lhsNode = joinNode.getLHS(); TableNode rhsNode = joinNode.getRHS(); ParseNode onNode = joinNode.getOnNode(); TableNode normLhsNode = lhsNode.accept(this); TableNode normRhsNode = rhsNode.accept(this); parseNodeRewriter.reset(); ParseNode normOnNode = onNode == null ? null : onNode.accept(parseNodeRewriter); if (lhsNode == normLhsNode && rhsNode == normRhsNode && onNode == normOnNode) return joinNode; return NODE_FACTORY.join(joinNode.getType(), normLhsNode, normRhsNode, normOnNode, joinNode.isSingleValueOnly()); }
@Override public Pair<Table, List<JoinSpec>> visit(JoinTableNode joinNode) throws SQLException { Pair<Table, List<JoinSpec>> lhs = joinNode.getLHS().accept(this); Pair<Table, List<JoinSpec>> rhs = joinNode.getRHS().accept(this); JoinTable joinTable = rhs.getSecond() == null ? new JoinTable(rhs.getFirst()) : new JoinTable(rhs.getFirst(), rhs.getSecond()); List<JoinSpec> joinSpecs = lhs.getSecond(); if (joinSpecs == null) { joinSpecs = new ArrayList<JoinSpec>(); } joinSpecs.add(new JoinSpec(joinNode.getType(), joinNode.getOnNode(), joinTable, joinNode.isSingleValueOnly(), origResolver)); return new Pair<Table, List<JoinSpec>>(lhs.getFirst(), joinSpecs); }
@Override public Pair<Table, List<JoinSpec>> visit(JoinTableNode joinNode) throws SQLException { Pair<Table, List<JoinSpec>> lhs = joinNode.getLHS().accept(this); Pair<Table, List<JoinSpec>> rhs = joinNode.getRHS().accept(this); JoinTable joinTable = rhs.getSecond() == null ? new JoinTable(rhs.getFirst()) : new JoinTable(rhs.getFirst(), rhs.getSecond()); List<JoinSpec> joinSpecs = lhs.getSecond(); if (joinSpecs == null) { joinSpecs = new ArrayList<JoinSpec>(); } joinSpecs.add(new JoinSpec(joinNode.getType(), joinNode.getOnNode(), joinTable, joinNode.isSingleValueOnly(), origResolver)); return new Pair<Table, List<JoinSpec>>(lhs.getFirst(), joinSpecs); }