private static PlanNode createSortNode(List<Expression> orderSymbols, Collection<Expression> outputElements) { PlanNode sortNode = NodeFactory.getNewNode(NodeConstants.Types.SORT); OrderBy order = new OrderBy(orderSymbols); sortNode.setProperty(NodeConstants.Info.SORT_ORDER, order); sortNode.setProperty(NodeConstants.Info.OUTPUT_COLS, new ArrayList<Expression>(outputElements)); return sortNode; }
private static void correctOutputElements(PlanNode endNode, Collection<Expression> outputElements, PlanNode startNode) { while (startNode != endNode) { LinkedHashSet<Expression> outputSymbols = new LinkedHashSet<Expression>((List<Expression>)startNode.getProperty(NodeConstants.Info.OUTPUT_COLS)); outputSymbols.addAll(outputElements); startNode.setProperty(NodeConstants.Info.OUTPUT_COLS, new ArrayList<Expression>(outputSymbols)); startNode = startNode.getParent(); } }
private static void correctOutputElements(PlanNode endNode, Collection<Expression> outputElements, PlanNode startNode) { while (startNode != endNode) { LinkedHashSet<Expression> outputSymbols = new LinkedHashSet<Expression>((List<Expression>)startNode.getProperty(NodeConstants.Info.OUTPUT_COLS)); outputSymbols.addAll(outputElements); startNode.setProperty(NodeConstants.Info.OUTPUT_COLS, new ArrayList<Expression>(outputSymbols)); startNode = startNode.getParent(); } }
private static PlanNode createSortNode(List<Expression> orderSymbols, Collection<Expression> outputElements) { PlanNode sortNode = NodeFactory.getNewNode(NodeConstants.Types.SORT); OrderBy order = new OrderBy(orderSymbols); order.setUserOrdering(false); sortNode.setProperty(NodeConstants.Info.SORT_ORDER, order); sortNode.setProperty(NodeConstants.Info.OUTPUT_COLS, new ArrayList<Expression>(outputElements)); return sortNode; }
private void addEmptyFilter(Collection<AggregateSymbol> aggregates, PlanNode stageGroup, QueryMetadataInterface metadata, CapabilitiesFinder capFinder, Object modelId) throws QueryMetadataException, TeiidComponentException { PlanNode selectNode = NodeFactory.getNewNode(NodeConstants.Types.SELECT); AggregateSymbol count = new AggregateSymbol(NonReserved.COUNT, false, null); aggregates.add(count); //consider the count aggregate for the push down call below Criteria crit = new CompareCriteria(count, CompareCriteria.GT, new Constant(new Integer(0))); selectNode.setProperty(NodeConstants.Info.SELECT_CRITERIA, crit); selectNode.setProperty(NodeConstants.Info.IS_HAVING, Boolean.TRUE); stageGroup.addAsParent(selectNode); }
private void addEmptyFilter(Collection<AggregateSymbol> aggregates, PlanNode stageGroup, QueryMetadataInterface metadata, CapabilitiesFinder capFinder, Object modelId) throws QueryMetadataException, TeiidComponentException { PlanNode selectNode = NodeFactory.getNewNode(NodeConstants.Types.SELECT); AggregateSymbol count = new AggregateSymbol(NonReserved.COUNT, false, null); aggregates.add(count); //consider the count aggregate for the push down call below Criteria crit = new CompareCriteria(count, CompareCriteria.GT, new Constant(new Integer(0))); selectNode.setProperty(NodeConstants.Info.SELECT_CRITERIA, crit); selectNode.setProperty(NodeConstants.Info.IS_HAVING, Boolean.TRUE); stageGroup.addAsParent(selectNode); }
private void addEmptyFilter(Collection<AggregateSymbol> aggregates, PlanNode stageGroup, QueryMetadataInterface metadata, CapabilitiesFinder capFinder, Object modelId) throws QueryMetadataException, TeiidComponentException { PlanNode selectNode = NodeFactory.getNewNode(NodeConstants.Types.SELECT); AggregateSymbol count = new AggregateSymbol(NonReserved.COUNT, false, null); aggregates.add(count); //consider the count aggregate for the push down call below Criteria crit = new CompareCriteria(count, CompareCriteria.GT, new Constant(new Integer(0))); selectNode.setProperty(NodeConstants.Info.SELECT_CRITERIA, crit); selectNode.setProperty(NodeConstants.Info.IS_HAVING, Boolean.TRUE); stageGroup.addAsParent(selectNode); }
static PlanNode createDependentSetNode(String id, List<DependentSetCriteria.AttributeComparison> expressions) { DependentSetCriteria crit = createDependentSetCriteria(id, expressions); PlanNode selectNode = RelationalPlanner.createSelectNode(crit, false); selectNode.setProperty(NodeConstants.Info.IS_DEPENDENT_SET, Boolean.TRUE); return selectNode; }
private static PlanNode newLimit(PlanNode limitNode) { PlanNode newLimit = NodeFactory.getNewNode(NodeConstants.Types.TUPLE_LIMIT); if (limitNode.hasBooleanProperty(Info.IS_NON_STRICT)) { newLimit.setProperty(Info.IS_NON_STRICT, Boolean.TRUE); } return newLimit; }
private void setCriteria(DependentSetCriteria dsc, PlanNode copyNode) { copyNode.setProperty(NodeConstants.Info.SELECT_CRITERIA, dsc); copyNode.getGroups().clear(); copyNode.addGroups(GroupsUsedByElementsVisitor.getGroups(dsc)); }
private void setCriteria(DependentSetCriteria dsc, PlanNode copyNode) { copyNode.setProperty(NodeConstants.Info.SELECT_CRITERIA, dsc); copyNode.getGroups().clear(); copyNode.addGroups(GroupsUsedByElementsVisitor.getGroups(dsc)); }
private void setCriteria(DependentSetCriteria dsc, PlanNode copyNode) { copyNode.setProperty(NodeConstants.Info.SELECT_CRITERIA, dsc); copyNode.getGroups().clear(); copyNode.addGroups(GroupsUsedByElementsVisitor.getGroups(dsc)); }
private PlanNode createJoinNode(PlanNode accessNode1, PlanNode accessNode2, List<Criteria> joinCriteria, JoinType joinType) { PlanNode joinNode = createJoinNode(); joinNode.getGroups().addAll(accessNode1.getGroups()); joinNode.getGroups().addAll(accessNode2.getGroups()); joinNode.addFirstChild(accessNode2); joinNode.addLastChild(accessNode1); joinNode.setProperty(NodeConstants.Info.JOIN_TYPE, joinType); joinNode.setProperty(NodeConstants.Info.JOIN_CRITERIA, joinCriteria); return joinNode; }
public static PlanNode createProjectNode(List<? extends Expression> select) { PlanNode projectNode = NodeFactory.getNewNode(NodeConstants.Types.PROJECT); projectNode.setProperty(NodeConstants.Info.PROJECT_COLS, select); // Set groups projectNode.addGroups(GroupsUsedByElementsVisitor.getGroups(select)); return projectNode; }
public static PlanNode createProjectNode(List<? extends Expression> select) { PlanNode projectNode = NodeFactory.getNewNode(NodeConstants.Types.PROJECT); projectNode.setProperty(NodeConstants.Info.PROJECT_COLS, select); // Set groups projectNode.addGroups(GroupsUsedByElementsVisitor.getGroups(select)); return projectNode; }
private boolean clean(PlanNode plan, boolean removeAllPhantom) throws TeiidComponentException { boolean pushRaiseNull = false; plan.setProperty(Info.OUTPUT_COLS, null); for (PlanNode node : plan.getChildren()) { pushRaiseNull |= clean(node, removeAllPhantom); } if (plan.getType() == NodeConstants.Types.SELECT) { pushRaiseNull |= cleanCriteria(plan, removeAllPhantom); } return pushRaiseNull; }
private static PlanNode helpGetJoinNode(float childCost1, float childCost2, JoinType joinType){ PlanNode joinNode = NodeFactory.getNewNode(NodeConstants.Types.JOIN); PlanNode child1 = NodeFactory.getNewNode(NodeConstants.Types.ACCESS); PlanNode child2 = NodeFactory.getNewNode(NodeConstants.Types.ACCESS); joinNode.addLastChild(child1); joinNode.addLastChild(child2); child1.setProperty(NodeConstants.Info.EST_CARDINALITY, new Float(childCost1)); child2.setProperty(NodeConstants.Info.EST_CARDINALITY, new Float(childCost2)); joinNode.setProperty(NodeConstants.Info.JOIN_TYPE, joinType); return joinNode; }
private boolean clean(PlanNode plan, boolean removeAllPhantom) throws TeiidComponentException { boolean pushRaiseNull = false; plan.setProperty(Info.OUTPUT_COLS, null); for (PlanNode node : plan.getChildren()) { pushRaiseNull |= clean(node, removeAllPhantom); } if (plan.getType() == NodeConstants.Types.SELECT) { pushRaiseNull |= cleanCriteria(plan, removeAllPhantom); } return pushRaiseNull; }
static PlanNode createSource(GroupSymbol group, PlanNode child, List<ElementSymbol> newProject) { PlanNode branchSource = NodeFactory.getNewNode(NodeConstants.Types.SOURCE); branchSource.addGroup(group); PlanNode projectNode = NodeEditor.findNodePreOrder(child, NodeConstants.Types.PROJECT); branchSource.setProperty(Info.SYMBOL_MAP, SymbolMap.createSymbolMap(newProject, (List<? extends Expression>)projectNode.getProperty(Info.PROJECT_COLS))); child.addAsParent(branchSource); return branchSource; }
@Ignore("this logic needs to be refined to work better") @Test public void testEstimateJoinNodeCostOneUnknown() throws Exception { QueryMetadataInterface metadata = RealMetadataFactory.example4(); PlanNode joinNode = helpGetJoinNode(NewCalculateCostUtil.UNKNOWN_VALUE, 500, JoinType.JOIN_INNER); joinNode.setProperty(NodeConstants.Info.JOIN_CRITERIA, Arrays.asList(helpGetCriteria("pm1.g1.e1 = pm1.g2.e1", metadata))); float cost = NewCalculateCostUtil.computeCostForTree(joinNode, metadata); assertEquals(10000, cost, 0); }