/** * Walk operator tree for pruner generation. * * @param pctx * @param opWalkerCtx * @param filterProc * @param defaultProc * @throws SemanticException */ public static void walkOperatorTree(ParseContext pctx, NodeProcessorCtx opWalkerCtx, NodeProcessor filterProc, NodeProcessor defaultProc) throws SemanticException { Map<Rule, NodeProcessor> opRules = new LinkedHashMap<Rule, NodeProcessor>(); // Build regular expression for operator rule. // "(TS%FIL%)|(TS%FIL%FIL%)" String tsOprName = TableScanOperator.getOperatorName(); String filtOprName = FilterOperator.getOperatorName(); opRules.put(new RuleExactMatch("R1", new String[] {tsOprName, filtOprName, filtOprName}), filterProc); opRules.put(new RuleExactMatch("R2", new String[] {tsOprName, filtOprName}), filterProc); // The dispatcher fires the processor corresponding to the closest matching // rule and passes the context along Dispatcher disp = new DefaultRuleDispatcher(defaultProc, opRules, opWalkerCtx); GraphWalker ogw = new DefaultGraphWalker(disp); // Create a list of topop nodes ArrayList<Node> topNodes = new ArrayList<Node>(); topNodes.addAll(pctx.getTopOps().values()); ogw.startWalking(topNodes, null); }
/** * Walk operator tree for pruner generation. * * @param pctx * @param opWalkerCtx * @param filterProc * @param defaultProc * @throws SemanticException */ public static void walkOperatorTree(ParseContext pctx, NodeProcessorCtx opWalkerCtx, NodeProcessor filterProc, NodeProcessor defaultProc) throws SemanticException { Map<Rule, NodeProcessor> opRules = new LinkedHashMap<Rule, NodeProcessor>(); // Build regular expression for operator rule. // "(TS%FIL%)|(TS%FIL%FIL%)" String tsOprName = TableScanOperator.getOperatorName(); String filtOprName = FilterOperator.getOperatorName(); opRules.put(new RuleExactMatch("R1", new String[] {tsOprName, filtOprName, filtOprName}), filterProc); opRules.put(new RuleExactMatch("R2", new String[] {tsOprName, filtOprName}), filterProc); // The dispatcher fires the processor corresponding to the closest matching // rule and passes the context along Dispatcher disp = new DefaultRuleDispatcher(defaultProc, opRules, opWalkerCtx); GraphWalker ogw = new DefaultGraphWalker(disp); // Create a list of topop nodes ArrayList<Node> topNodes = new ArrayList<Node>(); topNodes.addAll(pctx.getTopOps().values()); ogw.startWalking(topNodes, null); }
opRules.put(new RuleExactMatch("R2", new String[]{GroupByOperator.getOperatorName()}), BucketingSortingOpProcFactory.getGroupByProc()); opRules.put(new RuleExactMatch("R3", new String[]{JoinOperator.getOperatorName()}), BucketingSortingOpProcFactory.getJoinProc()); opRules.put(new RuleRegExp("R5", FileSinkOperator.getOperatorName() + "%"), opRules.put(new RuleExactMatch("R12",new String[]{ ForwardOperator.getOperatorName(), GroupByOperator.getOperatorName()}), BucketingSortingOpProcFactory.getMultiGroupByProc());
opRules.put(new RuleExactMatch("R2", new String[]{GroupByOperator.getOperatorName()}), BucketingSortingOpProcFactory.getGroupByProc()); opRules.put(new RuleExactMatch("R3", new String[]{JoinOperator.getOperatorName()}), BucketingSortingOpProcFactory.getJoinProc()); opRules.put(new RuleRegExp("R5", FileSinkOperator.getOperatorName() + "%"), opRules.put(new RuleExactMatch("R12",new String[]{ ForwardOperator.getOperatorName(), GroupByOperator.getOperatorName()}), BucketingSortingOpProcFactory.getMultiGroupByProc());
opRules.put(new RuleExactMatch("R2", GroupByOperator.getOperatorName() + "%"), BucketingSortingOpProcFactory.getGroupByProc()); opRules.put(new RuleExactMatch("R3", JoinOperator.getOperatorName() + "%"), BucketingSortingOpProcFactory.getJoinProc()); opRules.put(new RuleRegExp("R5", FileSinkOperator.getOperatorName() + "%"), opRules.put(new RuleExactMatch("R12", ForwardOperator.getOperatorName() + "%" + GroupByOperator.getOperatorName() + "%"), BucketingSortingOpProcFactory.getMultiGroupByProc());