/** * @see OptimizerRule#execute(PlanNode, QueryMetadataInterface, RuleStack) */ public PlanNode execute(PlanNode plan, QueryMetadataInterface metadata, CapabilitiesFinder capFinder, RuleStack rules, AnalysisRecord analysisRecord, CommandContext context) throws QueryPlannerException, TeiidComponentException { boolean pushRaiseNull = false; pushRaiseNull = clean(plan, !rules.contains(RuleConstants.COPY_CRITERIA)); if (pushRaiseNull) { rules.push(RuleConstants.RAISE_NULL); } return plan; }
/** * @see OptimizerRule#execute(PlanNode, QueryMetadataInterface, RuleStack) */ public PlanNode execute(PlanNode plan, QueryMetadataInterface metadata, CapabilitiesFinder capFinder, RuleStack rules, AnalysisRecord analysisRecord, CommandContext context) throws QueryPlannerException, TeiidComponentException { boolean pushRaiseNull = false; pushRaiseNull = clean(plan, !rules.contains(RuleConstants.COPY_CRITERIA)); if (pushRaiseNull) { rules.push(RuleConstants.RAISE_NULL); } return plan; }
/** * @see OptimizerRule#execute(PlanNode, QueryMetadataInterface, RuleStack) */ public PlanNode execute(PlanNode plan, QueryMetadataInterface metadata, CapabilitiesFinder capFinder, RuleStack rules, AnalysisRecord analysisRecord, CommandContext context) throws QueryPlannerException, TeiidComponentException { boolean pushRaiseNull = false; pushRaiseNull = clean(plan, !rules.contains(RuleConstants.COPY_CRITERIA)); if (pushRaiseNull) { rules.push(RuleConstants.RAISE_NULL); } return plan; }
@Override public PlanNode execute(PlanNode plan, QueryMetadataInterface metadata, CapabilitiesFinder capabilitiesFinder, RuleStack rules, AnalysisRecord analysisRecord, CommandContext context) throws QueryPlannerException, QueryMetadataException, TeiidComponentException { boolean beforeJoinPlanning = rules.contains(RuleConstants.PLAN_JOINS); while (beforeJoinPlanning? planLeftOuterJoinAssociativityBeforePlanning(plan, metadata, capabilitiesFinder, analysisRecord, context): planLeftOuterJoinAssociativity(plan, metadata, capabilitiesFinder, analysisRecord, context)) { //repeat } return plan; }
public PlanNode execute(PlanNode plan, QueryMetadataInterface metadata, CapabilitiesFinder capFinder, RuleStack rules, AnalysisRecord analysisRecord, CommandContext context) throws QueryPlannerException, QueryMetadataException, TeiidComponentException { boolean afterJoinPlanning = !rules.contains(RuleConstants.PLAN_JOINS); for (PlanNode accessNode : NodeEditor.findAllNodes(plan, NodeConstants.Types.ACCESS)) { while (true) { PlanNode newRoot = raiseAccessNode(plan, accessNode, metadata, capFinder, afterJoinPlanning, analysisRecord, context); if (newRoot == null) { break; } plan = newRoot; } } return plan; }
@Override public PlanNode execute(PlanNode plan, QueryMetadataInterface metadata, CapabilitiesFinder capabilitiesFinder, RuleStack rules, AnalysisRecord analysisRecord, CommandContext context) throws QueryPlannerException, QueryMetadataException, TeiidComponentException { boolean beforeJoinPlanning = rules.contains(RuleConstants.PLAN_JOINS); while (beforeJoinPlanning? planLeftOuterJoinAssociativityBeforePlanning(plan, metadata, capabilitiesFinder, analysisRecord, context): planLeftOuterJoinAssociativity(plan, metadata, capabilitiesFinder, analysisRecord, context)) { //repeat } return plan; }
public PlanNode execute(PlanNode plan, QueryMetadataInterface metadata, CapabilitiesFinder capFinder, RuleStack rules, AnalysisRecord analysisRecord, CommandContext context) throws QueryPlannerException, QueryMetadataException, TeiidComponentException { boolean afterJoinPlanning = !rules.contains(RuleConstants.PLAN_JOINS); for (PlanNode accessNode : NodeEditor.findAllNodes(plan, NodeConstants.Types.ACCESS)) { while (true) { PlanNode newRoot = raiseAccessNode(plan, accessNode, metadata, capFinder, afterJoinPlanning, analysisRecord, context); if (newRoot == null) { break; } plan = newRoot; } } return plan; }
public PlanNode execute(PlanNode plan, QueryMetadataInterface metadata, CapabilitiesFinder capFinder, RuleStack rules, AnalysisRecord analysisRecord, CommandContext context) throws QueryPlannerException, QueryMetadataException, TeiidComponentException { boolean afterJoinPlanning = !rules.contains(RuleConstants.PLAN_JOINS); for (PlanNode accessNode : NodeEditor.findAllNodes(plan, NodeConstants.Types.ACCESS)) { while (true) { PlanNode newRoot = raiseAccessNode(plan, accessNode, metadata, capFinder, afterJoinPlanning, analysisRecord, context); if (newRoot == null) { break; } plan = newRoot; } } return plan; }
public PlanNode execute(PlanNode plan, QueryMetadataInterface metadata, CapabilitiesFinder capFinder, RuleStack rules, AnalysisRecord analysisRecord, CommandContext context) throws QueryPlannerException, QueryMetadataException, TeiidComponentException { boolean beforeDecomposeJoin = rules.contains(RuleConstants.DECOMPOSE_JOIN); for (PlanNode sourceNode : NodeEditor.findAllNodes(plan, NodeConstants.Types.SOURCE)) { if (sourceNode.getChildCount() > 0) { plan = doMerge(sourceNode, plan, beforeDecomposeJoin, metadata, capFinder); } } return plan; }
public PlanNode execute(PlanNode plan, QueryMetadataInterface metadata, CapabilitiesFinder capFinder, RuleStack rules, AnalysisRecord analysisRecord, CommandContext context) throws QueryPlannerException, QueryMetadataException, TeiidComponentException { boolean beforeDecomposeJoin = rules.contains(RuleConstants.DECOMPOSE_JOIN); for (PlanNode sourceNode : NodeEditor.findAllNodes(plan, NodeConstants.Types.SOURCE)) { if (sourceNode.getChildCount() > 0) { plan = doMerge(sourceNode, plan, beforeDecomposeJoin, metadata, capFinder); } } return plan; }
public PlanNode execute(PlanNode plan, QueryMetadataInterface metadata, CapabilitiesFinder capFinder, RuleStack rules, AnalysisRecord analysisRecord, CommandContext context) throws QueryPlannerException, QueryMetadataException, TeiidComponentException { boolean beforeDecomposeJoin = rules.contains(RuleConstants.DECOMPOSE_JOIN); for (PlanNode sourceNode : NodeEditor.findAllNodes(plan, NodeConstants.Types.SOURCE)) { if (sourceNode.getChildCount() > 0) { plan = doMerge(sourceNode, plan, beforeDecomposeJoin, metadata, capFinder); } } return plan; }
public void testContains() { // Set up RuleStack stack = new RuleStack(); stack.push(RuleConstants.ACCESS_PATTERN_VALIDATION); stack.push(RuleConstants.COLLAPSE_SOURCE); assertEquals(true, stack.contains(RuleConstants.ACCESS_PATTERN_VALIDATION)); assertEquals(false, stack.contains(RuleConstants.PLACE_ACCESS)); }
private boolean addLimit(RuleStack rules, PlanNode parent, QueryMetadataInterface metadata, CapabilitiesFinder capabilitiesFinder) throws QueryMetadataException, TeiidComponentException { PlanNode accessNode = NodeEditor.findParent(parent.getFirstChild(), NodeConstants.Types.ACCESS); if (accessNode != null) { Object mid = RuleRaiseAccess.getModelIDFromAccess(accessNode, metadata); if (!CapabilitiesUtil.supports(Capability.ROW_LIMIT, mid, metadata, capabilitiesFinder)) { if (NodeEditor.findParent(parent, NodeConstants.Types.SET_OP | NodeConstants.Types.JOIN, NodeConstants.Types.ACCESS) != null) { return false; //access node is too high } parent = accessNode; } } PlanNode limit = NodeFactory.getNewNode(NodeConstants.Types.TUPLE_LIMIT); limit.setProperty(Info.MAX_TUPLE_LIMIT, new Constant(1)); if (!rules.contains(RuleConstants.PUSH_LIMIT)) { rules.push(RuleConstants.PUSH_LIMIT); } if (parent.getParent() == null) { if (parent.getType() == NodeConstants.Types.ACCESS) { return false; } parent = parent.getFirstChild(); } parent.addAsParent(limit); return true; }
private boolean addLimit(RuleStack rules, PlanNode parent, QueryMetadataInterface metadata, CapabilitiesFinder capabilitiesFinder) throws QueryMetadataException, TeiidComponentException { PlanNode accessNode = NodeEditor.findParent(parent.getFirstChild(), NodeConstants.Types.ACCESS); if (accessNode != null) { Object mid = RuleRaiseAccess.getModelIDFromAccess(accessNode, metadata); if (!CapabilitiesUtil.supports(Capability.ROW_LIMIT, mid, metadata, capabilitiesFinder)) { if (NodeEditor.findParent(parent, NodeConstants.Types.SET_OP | NodeConstants.Types.JOIN, NodeConstants.Types.ACCESS) != null) { return false; //access node is too high } parent = accessNode; } } PlanNode limit = NodeFactory.getNewNode(NodeConstants.Types.TUPLE_LIMIT); limit.setProperty(Info.MAX_TUPLE_LIMIT, new Constant(1)); if (!rules.contains(RuleConstants.PUSH_LIMIT)) { rules.push(RuleConstants.PUSH_LIMIT); } if (parent.getParent() == null) { if (parent.getType() == NodeConstants.Types.ACCESS) { return false; } parent = parent.getFirstChild(); } parent.addAsParent(limit); return true; }
private boolean addLimit(RuleStack rules, PlanNode parent, QueryMetadataInterface metadata, CapabilitiesFinder capabilitiesFinder) throws QueryMetadataException, TeiidComponentException { PlanNode accessNode = NodeEditor.findParent(parent.getFirstChild(), NodeConstants.Types.ACCESS); if (accessNode != null) { Object mid = RuleRaiseAccess.getModelIDFromAccess(accessNode, metadata); if (!CapabilitiesUtil.supports(Capability.ROW_LIMIT, mid, metadata, capabilitiesFinder)) { if (NodeEditor.findParent(parent, NodeConstants.Types.SET_OP | NodeConstants.Types.JOIN, NodeConstants.Types.ACCESS) != null) { return false; //access node is too high } parent = accessNode; } } PlanNode limit = NodeFactory.getNewNode(NodeConstants.Types.TUPLE_LIMIT); limit.setProperty(Info.MAX_TUPLE_LIMIT, new Constant(1)); if (!rules.contains(RuleConstants.PUSH_LIMIT)) { rules.push(RuleConstants.PUSH_LIMIT); } if (parent.getParent() == null) { if (parent.getType() == NodeConstants.Types.ACCESS) { return false; } parent = parent.getFirstChild(); } parent.addAsParent(limit); return true; }