private List<AliasedNode> fixAliasedNodes(List<AliasedNode> nodes, boolean addSelectOne) { List<AliasedNode> normNodes = Lists.<AliasedNode> newArrayListWithExpectedSize(nodes.size() + (addSelectOne ? 1 : 0)); if (addSelectOne) { normNodes.add(NODE_FACTORY.aliasedNode(ParseNodeFactory.createTempAlias(), LiteralParseNode.ONE)); } for (int i = 0; i < nodes.size(); i++) { AliasedNode aliasedNode = nodes.get(i); normNodes.add(NODE_FACTORY.aliasedNode( ParseNodeFactory.createTempAlias(), aliasedNode.getNode())); } return normNodes; }
alias = SchemaUtil.normalizeIdentifier(aliasedNode.getNode().getAlias()); aliases.add(alias == null ? createTempAlias() : alias);
private SelectStatement fixSubqueryStatement(SelectStatement select) { if (!select.isUnion()) return select; // Wrap as a derived table. return NODE_FACTORY.select(NODE_FACTORY.derivedTable(ParseNodeFactory.createTempAlias(), select), HintNode.EMPTY_HINT_NODE, false, select.getSelect(), null, null, null, null, null, null, select.getBindCount(), false, false, Collections.<SelectStatement> emptyList(), select.getUdfParseNodes()); }
private ProjectedTableColumnResolver(PTable projectedTable, PhoenixConnection conn, Map<String, UDFParseNode> udfParseNodes) throws SQLException { super(conn, 0, udfParseNodes, null); Preconditions.checkArgument(projectedTable.getType() == PTableType.PROJECTED); this.isLocalIndex = projectedTable.getIndexType() == IndexType.LOCAL; this.columnRefMap = new HashMap<ColumnRef, Integer>(); long ts = Long.MAX_VALUE; for (int i = projectedTable.getBucketNum() == null ? 0 : 1; i < projectedTable.getColumns().size(); i++) { PColumn column = projectedTable.getColumns().get(i); ColumnRef colRef = ((ProjectedColumn) column).getSourceColumnRef(); TableRef tableRef = colRef.getTableRef(); if (!tables.contains(tableRef)) { String alias = tableRef.getTableAlias(); if (alias != null) { this.tableMap.put(alias, tableRef); } String name = tableRef.getTable().getName().getString(); if (alias == null || !alias.equals(name)) { tableMap.put(name, tableRef); } tables.add(tableRef); if (tableRef.getLowerBoundTimeStamp() < ts) { ts = tableRef.getLowerBoundTimeStamp(); } } this.columnRefMap.put(new ColumnRef(tableRef, colRef.getColumnPosition()), column.getPosition()); } this.theTableRefs = ImmutableList.of(new TableRef(ParseNodeFactory.createTempAlias(), projectedTable, ts, false)); }
String rhsTableAlias = ParseNodeFactory.createTempAlias(); JoinConditionExtractor conditionExtractor = new JoinConditionExtractor(subquery, resolver, connection, rhsTableAlias); ParseNode where = subquery.getWhere() == null ? null : subquery.getWhere().accept(conditionExtractor); String derivedTableAlias = null; if (!subquery.getGroupBy().isEmpty()) { derivedTableAlias = ParseNodeFactory.createTempAlias(); aliasedNodes = fixAliasedNodes(aliasedNodes, false); selectNodes.add(NODE_FACTORY.aliasedNode(ParseNodeFactory.createTempAlias(), rhsNode)); selectNodes.addAll(additionalSelectNodes); List<ParseNode> groupbyNodes = Lists.newArrayListWithExpectedSize(additionalSelectNodes.size()); for (int i = 1; i < selectNodes.size(); i++) { AliasedNode aliasedNode = selectNodes.get(i); String alias = ParseNodeFactory.createTempAlias(); derivedTableSelect.add(NODE_FACTORY.aliasedNode(alias, aliasedNode.getNode())); aliasedNode = NODE_FACTORY.aliasedNode(aliasedNode.getAlias(), NODE_FACTORY.column(NODE_FACTORY.table(null, derivedTableAlias), alias, null));
String rhsTableAlias = ParseNodeFactory.createTempAlias(); JoinConditionExtractor conditionExtractor = new JoinConditionExtractor(subquery, resolver, connection, rhsTableAlias); ParseNode where = subquery.getWhere() == null ? null : subquery.getWhere().accept(conditionExtractor); selectNodes.add(NODE_FACTORY.aliasedNode(ParseNodeFactory.createTempAlias(), rhsNode)); selectNodes.addAll(additionalSelectNodes);
String alias = ParseNodeFactory.createTempAlias(); this.additionalSelectNodes.add(NODE_FACTORY.aliasedNode(alias, node.getLHS())); ParseNode lhsNode = NODE_FACTORY.column(tableName, alias, null); String alias = ParseNodeFactory.createTempAlias(); this.additionalSelectNodes.add(NODE_FACTORY.aliasedNode(alias, node.getRHS())); ParseNode rhsNode = NODE_FACTORY.column(tableName, alias, null);
String rhsTableAlias = ParseNodeFactory.createTempAlias(); JoinConditionExtractor conditionExtractor = new JoinConditionExtractor(subquery, resolver, connection, rhsTableAlias); ParseNode where = subquery.getWhere() == null ? null : subquery.getWhere().accept(conditionExtractor); selectNodes.add(NODE_FACTORY.aliasedNode(ParseNodeFactory.createTempAlias(), LiteralParseNode.ONE)); selectNodes.addAll(additionalSelectNodes);
@Override public ParseNode visitLeave(InParseNode node, List<ParseNode> l) throws SQLException { boolean isTopNode = topNode == node; if (isTopNode) { topNode = null; } SubqueryParseNode subqueryNode = (SubqueryParseNode) l.get(1); SelectStatement subquery = fixSubqueryStatement(subqueryNode.getSelectNode()); String rhsTableAlias = ParseNodeFactory.createTempAlias(); List<AliasedNode> selectNodes = fixAliasedNodes(subquery.getSelect(), true); subquery = NODE_FACTORY.select(subquery, !node.isSubqueryDistinct(), selectNodes); ParseNode onNode = getJoinConditionNode(l.get(0), selectNodes, rhsTableAlias); TableNode rhsTable = NODE_FACTORY.derivedTable(rhsTableAlias, subquery); JoinType joinType = isTopNode ? (node.isNegate() ? JoinType.Anti : JoinType.Semi) : JoinType.Left; ParseNode ret = isTopNode ? null : NODE_FACTORY.isNull(NODE_FACTORY.column(NODE_FACTORY.table(null, rhsTableAlias), selectNodes.get(0).getAlias(), null), !node.isNegate()); tableNode = NODE_FACTORY.join(joinType, tableNode, rhsTable, onNode, false); return ret; }
private List<AliasedNode> fixAliasedNodes(List<AliasedNode> nodes, boolean addSelectOne) { List<AliasedNode> normNodes = Lists.<AliasedNode> newArrayListWithExpectedSize(nodes.size() + (addSelectOne ? 1 : 0)); if (addSelectOne) { normNodes.add(NODE_FACTORY.aliasedNode(ParseNodeFactory.createTempAlias(), LiteralParseNode.ONE)); } for (int i = 0; i < nodes.size(); i++) { AliasedNode aliasedNode = nodes.get(i); normNodes.add(NODE_FACTORY.aliasedNode( ParseNodeFactory.createTempAlias(), aliasedNode.getNode())); } return normNodes; }
private List<AliasedNode> fixAliasedNodes(List<AliasedNode> nodes, boolean addSelectOne) { List<AliasedNode> normNodes = Lists.<AliasedNode> newArrayListWithExpectedSize(nodes.size() + (addSelectOne ? 1 : 0)); if (addSelectOne) { normNodes.add(NODE_FACTORY.aliasedNode(ParseNodeFactory.createTempAlias(), LiteralParseNode.ONE)); } for (int i = 0; i < nodes.size(); i++) { AliasedNode aliasedNode = nodes.get(i); normNodes.add(NODE_FACTORY.aliasedNode( ParseNodeFactory.createTempAlias(), aliasedNode.getNode())); } return normNodes; }
private TableRef createProjectedTableFromLiterals(Object[] row) { List<PColumn> columns = Lists.<PColumn>newArrayList(); for (int i = 0; i < row.length; i++) { String name = ParseNodeFactory.createTempAlias(); Expression expr = LiteralExpression.newConstant(row[i]); PName colName = PNameFactory.newName(name);
private TableRef createProjectedTableFromLiterals(Object[] row) { List<PColumn> columns = Lists.<PColumn> newArrayList(); for (int i = 0; i < row.length; i++) { String name = ParseNodeFactory.createTempAlias(); Expression expr = LiteralExpression.newConstant(row[i]); PName colName = PNameFactory.newName(name);
private SelectStatement fixSubqueryStatement(SelectStatement select) { if (!select.isUnion()) return select; // Wrap as a derived table. return NODE_FACTORY.select(NODE_FACTORY.derivedTable(ParseNodeFactory.createTempAlias(), select), HintNode.EMPTY_HINT_NODE, false, select.getSelect(), null, null, null, null, null, null, select.getBindCount(), false, false, Collections.<SelectStatement> emptyList(), select.getUdfParseNodes()); }
private SelectStatement fixSubqueryStatement(SelectStatement select) { if (!select.isUnion()) return select; // Wrap as a derived table. return NODE_FACTORY.select(NODE_FACTORY.derivedTable(ParseNodeFactory.createTempAlias(), select), HintNode.EMPTY_HINT_NODE, false, select.getSelect(), null, null, null, null, null, null, select.getBindCount(), false, false, Collections.<SelectStatement> emptyList(), select.getUdfParseNodes()); }
private ProjectedTableColumnResolver(PTable projectedTable, PhoenixConnection conn, Map<String, UDFParseNode> udfParseNodes) throws SQLException { super(conn, 0, udfParseNodes, null); Preconditions.checkArgument(projectedTable.getType() == PTableType.PROJECTED); this.isLocalIndex = projectedTable.getIndexType() == IndexType.LOCAL; this.columnRefMap = new HashMap<ColumnRef, Integer>(); long ts = Long.MAX_VALUE; for (int i = projectedTable.getBucketNum() == null ? 0 : 1; i < projectedTable.getColumns().size(); i++) { PColumn column = projectedTable.getColumns().get(i); ColumnRef colRef = ((ProjectedColumn) column).getSourceColumnRef(); TableRef tableRef = colRef.getTableRef(); if (!tables.contains(tableRef)) { String alias = tableRef.getTableAlias(); if (alias != null) { this.tableMap.put(alias, tableRef); } String name = tableRef.getTable().getName().getString(); if (alias == null || !alias.equals(name)) { tableMap.put(name, tableRef); } tables.add(tableRef); if (tableRef.getLowerBoundTimeStamp() < ts) { ts = tableRef.getLowerBoundTimeStamp(); } } this.columnRefMap.put(new ColumnRef(tableRef, colRef.getColumnPosition()), column.getPosition()); } this.theTableRefs = ImmutableList.of(new TableRef(ParseNodeFactory.createTempAlias(), projectedTable, ts, false)); }
String alias = ParseNodeFactory.createTempAlias(); this.additionalSelectNodes.add(NODE_FACTORY.aliasedNode(alias, node.getLHS())); ParseNode lhsNode = NODE_FACTORY.column(tableName, alias, null); String alias = ParseNodeFactory.createTempAlias(); this.additionalSelectNodes.add(NODE_FACTORY.aliasedNode(alias, node.getRHS())); ParseNode rhsNode = NODE_FACTORY.column(tableName, alias, null);
String rhsTableAlias = ParseNodeFactory.createTempAlias(); JoinConditionExtractor conditionExtractor = new JoinConditionExtractor(subquery, resolver, connection, rhsTableAlias); ParseNode where = subquery.getWhere() == null ? null : subquery.getWhere().accept(conditionExtractor); selectNodes.add(NODE_FACTORY.aliasedNode(ParseNodeFactory.createTempAlias(), LiteralParseNode.ONE)); selectNodes.addAll(additionalSelectNodes);
@Override public ParseNode visitLeave(InParseNode node, List<ParseNode> l) throws SQLException { boolean isTopNode = topNode == node; if (isTopNode) { topNode = null; } SubqueryParseNode subqueryNode = (SubqueryParseNode) l.get(1); SelectStatement subquery = fixSubqueryStatement(subqueryNode.getSelectNode()); String rhsTableAlias = ParseNodeFactory.createTempAlias(); List<AliasedNode> selectNodes = fixAliasedNodes(subquery.getSelect(), true); subquery = NODE_FACTORY.select(subquery, !node.isSubqueryDistinct(), selectNodes); ParseNode onNode = getJoinConditionNode(l.get(0), selectNodes, rhsTableAlias); TableNode rhsTable = NODE_FACTORY.derivedTable(rhsTableAlias, subquery); JoinType joinType = isTopNode ? (node.isNegate() ? JoinType.Anti : JoinType.Semi) : JoinType.Left; ParseNode ret = isTopNode ? null : NODE_FACTORY.isNull(NODE_FACTORY.column(NODE_FACTORY.table(null, rhsTableAlias), selectNodes.get(0).getAlias(), null), !node.isNegate()); tableNode = NODE_FACTORY.join(joinType, tableNode, rhsTable, onNode, false); return ret; }
@Override public ParseNode visitLeave(InParseNode node, List<ParseNode> l) throws SQLException { boolean isTopNode = topNode == node; if (isTopNode) { topNode = null; } SubqueryParseNode subqueryNode = (SubqueryParseNode) l.get(1); SelectStatement subquery = fixSubqueryStatement(subqueryNode.getSelectNode()); String rhsTableAlias = ParseNodeFactory.createTempAlias(); List<AliasedNode> selectNodes = fixAliasedNodes(subquery.getSelect(), true); subquery = NODE_FACTORY.select(subquery, !node.isSubqueryDistinct(), selectNodes); ParseNode onNode = getJoinConditionNode(l.get(0), selectNodes, rhsTableAlias); TableNode rhsTable = NODE_FACTORY.derivedTable(rhsTableAlias, subquery); JoinType joinType = isTopNode ? (node.isNegate() ? JoinType.Anti : JoinType.Semi) : JoinType.Left; ParseNode ret = isTopNode ? null : NODE_FACTORY.isNull(NODE_FACTORY.column(NODE_FACTORY.table(null, rhsTableAlias), selectNodes.get(0).getAlias(), null), !node.isNegate()); tableNode = NODE_FACTORY.join(joinType, tableNode, rhsTable, onNode, false); return ret; }