private void addInputNode(Reference param) { params.add(param.getExpression()); conjuncts.add(crit); NodeEditor.removeChildNode(currentNode.getParent(), currentNode); }
private void addInputNode(Reference param) { params.add(param.getExpression()); conjuncts.add(crit); NodeEditor.removeChildNode(currentNode.getParent(), currentNode); }
private void addInputNode(Reference param) { params.add(param.getExpression()); conjuncts.add(crit); NodeEditor.removeChildNode(currentNode.getParent(), currentNode); }
static PlanNode performRaise(PlanNode rootNode, PlanNode accessNode, PlanNode parentNode) { if (!checkConformedSubqueries(accessNode, parentNode, true)) { return rootNode; } accessNode.removeProperty(NodeConstants.Info.EST_CARDINALITY); combineSourceHints(accessNode, parentNode); NodeEditor.removeChildNode(parentNode, accessNode); parentNode.addAsParent(accessNode); PlanNode grandparentNode = accessNode.getParent(); if(grandparentNode != null) { return rootNode; } return accessNode; }
static PlanNode performRaise(PlanNode rootNode, PlanNode accessNode, PlanNode parentNode) { if (!checkConformedSubqueries(accessNode, parentNode, true)) { return rootNode; } accessNode.removeProperty(NodeConstants.Info.EST_CARDINALITY); combineSourceHints(accessNode, parentNode); NodeEditor.removeChildNode(parentNode, accessNode); parentNode.addAsParent(accessNode); PlanNode grandparentNode = accessNode.getParent(); if(grandparentNode != null) { return rootNode; } return accessNode; }
static PlanNode performRaise(PlanNode rootNode, PlanNode accessNode, PlanNode parentNode) { if (!checkConformedSubqueries(accessNode, parentNode, true)) { return rootNode; } accessNode.removeProperty(NodeConstants.Info.EST_CARDINALITY); combineSourceHints(accessNode, parentNode); NodeEditor.removeChildNode(parentNode, accessNode); parentNode.addAsParent(accessNode); PlanNode grandparentNode = accessNode.getParent(); if(grandparentNode != null) { return rootNode; } return accessNode; }
static PlanNode removeGroupBy(PlanNode root, QueryMetadataInterface metadata) throws QueryPlannerException { PlanNode next = root.getFirstChild(); NodeEditor.removeChildNode(root.getParent(), root); SymbolMap symbolMap = (SymbolMap) root.getProperty(NodeConstants.Info.SYMBOL_MAP); if (!symbolMap.asMap().isEmpty()) { FrameUtil.convertFrame(next.getParent(), symbolMap.asMap().keySet().iterator().next().getGroupSymbol(), null, symbolMap.asMap(), metadata); } PlanNode parent = next.getParent(); while (parent.getParent() != null && parent.getParent().getType() != NodeConstants.Types.SOURCE && parent.getParent().getType() != NodeConstants.Types.SET_OP) { parent = parent.getParent(); } return parent; }
static PlanNode removeGroupBy(PlanNode root, QueryMetadataInterface metadata) throws QueryPlannerException { PlanNode next = root.getFirstChild(); NodeEditor.removeChildNode(root.getParent(), root); SymbolMap symbolMap = (SymbolMap) root.getProperty(NodeConstants.Info.SYMBOL_MAP); if (!symbolMap.asMap().isEmpty()) { FrameUtil.convertFrame(next.getParent(), symbolMap.asMap().keySet().iterator().next().getGroupSymbol(), null, symbolMap.asMap(), metadata); } PlanNode parent = next.getParent(); while (parent.getParent() != null && parent.getParent().getType() != NodeConstants.Types.SOURCE && parent.getParent().getType() != NodeConstants.Types.SET_OP) { parent = parent.getParent(); } return parent; }
static PlanNode removeGroupBy(PlanNode root, QueryMetadataInterface metadata) throws QueryPlannerException { PlanNode next = root.getFirstChild(); NodeEditor.removeChildNode(root.getParent(), root); SymbolMap symbolMap = (SymbolMap) root.getProperty(NodeConstants.Info.SYMBOL_MAP); if (!symbolMap.asMap().isEmpty()) { FrameUtil.convertFrame(next.getParent(), symbolMap.asMap().keySet().iterator().next().getGroupSymbol(), null, symbolMap.asMap(), metadata); } PlanNode parent = next.getParent(); while (parent.getParent() != null && parent.getParent().getType() != NodeConstants.Types.SOURCE && parent.getParent().getType() != NodeConstants.Types.SET_OP) { parent = parent.getParent(); } return parent; }
public void visit(DependentSetCriteria obj) { if (obj.isNegated()) { return; //just a sanity check } if (obj.hasMultipleAttributes()) { for (AttributeComparison comp : obj.getAttributes()) { if (!checkForInput(comp.dep)) { return; } } for (AttributeComparison comp : obj.getAttributes()) { params.add(((Reference)comp.dep).getExpression()); } conjuncts.add(crit); NodeEditor.removeChildNode(currentNode.getParent(), currentNode); } else if (checkForInput(obj.getExpression())) { addInputNode((Reference)obj.getExpression()); } }
public void visit(DependentSetCriteria obj) { if (obj.isNegated()) { return; //just a sanity check } if (obj.hasMultipleAttributes()) { for (AttributeComparison comp : obj.getAttributes()) { if (!checkForInput(comp.dep)) { return; } } for (AttributeComparison comp : obj.getAttributes()) { params.add(((Reference)comp.dep).getExpression()); } conjuncts.add(crit); NodeEditor.removeChildNode(currentNode.getParent(), currentNode); } else if (checkForInput(obj.getExpression())) { addInputNode((Reference)obj.getExpression()); } }
public void visit(DependentSetCriteria obj) { if (obj.isNegated()) { return; //just a sanity check } if (obj.hasMultipleAttributes()) { for (AttributeComparison comp : obj.getAttributes()) { if (!checkForInput(comp.dep)) { return; } } for (AttributeComparison comp : obj.getAttributes()) { params.add(((Reference)comp.dep).getExpression()); } conjuncts.add(crit); NodeEditor.removeChildNode(currentNode.getParent(), currentNode); } else if (checkForInput(obj.getExpression())) { addInputNode((Reference)obj.getExpression()); } }
NodeEditor.removeChildNode(joinNode, nullNode); NodeEditor.removeChildNode(joinNode.getParent(), joinNode);
public void testRemoveLastChildNode() { PlanNode tree = exampleTree1(); List expectedChildren = new ArrayList(); expectedChildren.add(tree.getFirstChild()); expectedChildren.addAll(tree.getLastChild().getChildren()); NodeEditor.removeChildNode(tree, tree.getLastChild()); List actualChildren = tree.getChildren(); assertEquals("Didn't get expected children after removing last child", expectedChildren, actualChildren); //$NON-NLS-1$ }
NodeEditor.removeChildNode(joinNode, nullNode); NodeEditor.removeChildNode(joinNode.getParent(), joinNode);
NodeEditor.removeChildNode(joinNode, nullNode); NodeEditor.removeChildNode(joinNode.getParent(), joinNode);
private void pushOrderByAndLimit(PlanNode limitNode, List<PlanNode> limitNodes, QueryMetadataInterface metadata, CapabilitiesFinder capFinder, CommandContext context, PlanNode child, Expression parentLimit, Expression parentOffset, PlanNode branch) throws QueryMetadataException, TeiidComponentException { //push both the limit and order by OrderBy parentOrderBy = (OrderBy) child.getProperty(NodeConstants.Info.SORT_ORDER); PlanNode newSort = NodeFactory.getNewNode(NodeConstants.Types.SORT); OrderBy newOrderBy = parentOrderBy.clone(); newSort.setProperty(Info.SORT_ORDER, newOrderBy); newSort.addGroups(child.getGroups()); newSort.setProperty(NodeConstants.Info.OUTPUT_COLS, branch.getProperty(NodeConstants.Info.OUTPUT_COLS)); branch.addAsParent(newSort); addBranchLimit(limitNode, limitNodes, metadata, parentLimit, parentOffset, newSort); if (limitNode.hasBooleanProperty(Info.IS_PUSHED)) { //remove the intermediate ordering/limit NodeEditor.removeChildNode(limitNode, limitNode.getFirstChild()); NodeEditor.removeChildNode(limitNode.getParent(), limitNode); } }
private void pushOrderByAndLimit(PlanNode limitNode, List<PlanNode> limitNodes, QueryMetadataInterface metadata, CapabilitiesFinder capFinder, CommandContext context, PlanNode child, Expression parentLimit, Expression parentOffset, PlanNode branch) throws QueryMetadataException, TeiidComponentException { //push both the limit and order by OrderBy parentOrderBy = (OrderBy) child.getProperty(NodeConstants.Info.SORT_ORDER); PlanNode newSort = NodeFactory.getNewNode(NodeConstants.Types.SORT); OrderBy newOrderBy = parentOrderBy.clone(); newSort.setProperty(Info.SORT_ORDER, newOrderBy); newSort.addGroups(child.getGroups()); newSort.setProperty(NodeConstants.Info.OUTPUT_COLS, branch.getProperty(NodeConstants.Info.OUTPUT_COLS)); branch.addAsParent(newSort); addBranchLimit(limitNode, limitNodes, metadata, parentLimit, parentOffset, newSort); if (limitNode.hasBooleanProperty(Info.IS_PUSHED)) { //remove the intermediate ordering/limit NodeEditor.removeChildNode(limitNode, limitNode.getFirstChild()); NodeEditor.removeChildNode(limitNode.getParent(), limitNode); } }
private void pushOrderByAndLimit(PlanNode limitNode, List<PlanNode> limitNodes, QueryMetadataInterface metadata, CapabilitiesFinder capFinder, CommandContext context, PlanNode child, Expression parentLimit, Expression parentOffset, PlanNode branch) throws QueryMetadataException, TeiidComponentException { //push both the limit and order by OrderBy parentOrderBy = (OrderBy) child.getProperty(NodeConstants.Info.SORT_ORDER); PlanNode newSort = NodeFactory.getNewNode(NodeConstants.Types.SORT); OrderBy newOrderBy = parentOrderBy.clone(); newSort.setProperty(Info.SORT_ORDER, newOrderBy); newSort.addGroups(child.getGroups()); newSort.setProperty(NodeConstants.Info.OUTPUT_COLS, branch.getProperty(NodeConstants.Info.OUTPUT_COLS)); branch.addAsParent(newSort); addBranchLimit(limitNode, limitNodes, metadata, parentLimit, parentOffset, newSort); if (limitNode.hasBooleanProperty(Info.IS_PUSHED)) { //remove the intermediate ordering/limit NodeEditor.removeChildNode(limitNode, limitNode.getFirstChild()); NodeEditor.removeChildNode(limitNode.getParent(), limitNode); } }
private boolean mergeSortWithDupRemoval(PlanNode node) { if (node.getFirstChild() == null) { return false; } switch (node.getFirstChild().getType()) { case NodeConstants.Types.SET_OP: if (node.getFirstChild().getProperty(NodeConstants.Info.SET_OPERATION) == SetQuery.Operation.UNION && !node.getFirstChild().hasBooleanProperty(NodeConstants.Info.USE_ALL)) { node.getFirstChild().setProperty(NodeConstants.Info.USE_ALL, true); return true; } break; case NodeConstants.Types.DUP_REMOVE: NodeEditor.removeChildNode(node, node.getFirstChild()); return true; } if (node.hasBooleanProperty(Info.UNRELATED_SORT)) { PlanNode source = NodeEditor.findNodePreOrder(node, NodeConstants.Types.SOURCE); if (source != null) { PlanNode parentProject = NodeEditor.findParent(source, NodeConstants.Types.PROJECT); if (parentProject != null && parentProject.getProperty(Info.PROJECT_COLS).equals(source.getProperty(Info.OUTPUT_COLS))) { //can't sort on a derived expression return mergeSortWithDupRemoval(source); } } } return false; }