exprRules.put(new TypeRule(ExprNodeColumnDesc.class), getColumnProcessor()); exprRules.put(new TypeRule(ExprNodeFieldDesc.class), getFieldProcessor()); exprRules.put(new TypeRule(ExprNodeGenericFuncDesc.class), getGenericFuncProcessor()); Dispatcher disp = new DefaultRuleDispatcher(getDefaultExprProcessor(), exprRules, exprContext); GraphWalker egw = new DefaultGraphWalker(disp); extractFinalCandidates(pred, exprContext, conf);
public static ExprWalkerInfo extractPushdownPreds(OpWalkerInfo opContext, Operator<? extends OperatorDesc> op, ExprNodeDesc pred) throws SemanticException { List<ExprNodeDesc> preds = new ArrayList<ExprNodeDesc>(); preds.add(pred); return extractPushdownPreds(opContext, op, preds); }
/** * * @param funcDesc function descriptor * @return true if the function is deterministic false otherwise */ public static boolean isDeterministic(ExprNodeGenericFuncDesc funcDesc) { if (FunctionRegistry.isConsistentWithinQuery(funcDesc.getGenericUDF())) { // check whether the children or deterministic for (ExprNodeDesc exprNodeDesc : funcDesc.getChildren()) { if (exprNodeDesc instanceof ExprNodeGenericFuncDesc) { if (!isDeterministic((ExprNodeGenericFuncDesc) exprNodeDesc)) { // some child is not deterministic - return false return false; } } } // all children are deterministic - return true return true; } // function is not deterministic - return false return false; }
expr.getChildren().get(i), ctx.getNewToOldExprMap().get(expr).getChildren().get(i)); extractFinalCandidates(expr.getChildren().get(i), ctx, conf);
expr.getChildren().get(i), ctx.getNewToOldExprMap().get(expr).getChildren().get(i)); extractFinalCandidates(expr.getChildren().get(i), ctx, conf);
exprRules.put(new TypeRule(ExprNodeColumnDesc.class), getColumnProcessor()); exprRules.put(new TypeRule(ExprNodeFieldDesc.class), getFieldProcessor()); exprRules.put(new TypeRule(ExprNodeGenericFuncDesc.class), getGenericFuncProcessor()); Dispatcher disp = new DefaultRuleDispatcher(getDefaultExprProcessor(), exprRules, exprContext); GraphWalker egw = new DefaultGraphWalker(disp); extractFinalCandidates(pred, exprContext, conf);
public static ExprWalkerInfo extractPushdownPreds(OpWalkerInfo opContext, Operator<? extends OperatorDesc> op, ExprNodeDesc pred) throws SemanticException { List<ExprNodeDesc> preds = new ArrayList<ExprNodeDesc>(); preds.add(pred); return extractPushdownPreds(opContext, op, preds); }
/** * Walks through the top AND nodes and determine which of them are final * candidates. */ private static void extractFinalCandidates(ExprNodeDesc expr, ExprWalkerInfo ctx) { if (ctx.isCandidate(expr)) { ctx.addFinalCandidate(expr); return; } if (FunctionRegistry.isOpAnd(expr)) { // If the operator is AND, we need to determine if any of the children are // final candidates. for (Node ch : expr.getChildren()) { extractFinalCandidates((ExprNodeDesc) ch, ctx); } } }
} else { if (exp instanceof ExprNodeGenericFuncDesc) { if (isDeterministic((ExprNodeGenericFuncDesc) exp)) { isCandidate = true; } else {
exprRules.put( new RuleRegExp("R1", ExprNodeColumnDesc.class.getName() + "%"), getColumnProcessor()); exprRules.put( new RuleRegExp("R2", ExprNodeFieldDesc.class.getName() + "%"), getFieldProcessor()); exprRules.put(new RuleRegExp("R3", ExprNodeGenericFuncDesc.class.getName() + "%"), getGenericFuncProcessor()); Dispatcher disp = new DefaultRuleDispatcher(getDefaultExprProcessor(), exprRules, exprContext); GraphWalker egw = new DefaultGraphWalker(disp); extractFinalCandidates(pred, exprContext);
.extractPushdownPreds(owi, op, e.getValue()); if (!extractPushdownPreds.getNonFinalCandidates().isEmpty()) { hasUnpushedPredicates = true;
(ExprNodeDesc) expr.getChildren().get(i), ctx.getNewToOldExprMap().get(expr).getChildren().get(i)); extractFinalCandidates((ExprNodeDesc) expr.getChildren().get(i), ctx, conf);
exprRules.put( new RuleRegExp("R1", ExprNodeColumnDesc.class.getName() + "%"), getColumnProcessor()); exprRules.put( new RuleRegExp("R2", ExprNodeFieldDesc.class.getName() + "%"), getFieldProcessor()); exprRules.put(new RuleRegExp("R3", ExprNodeGenericFuncDesc.class.getName() + "%"), getGenericFuncProcessor()); Dispatcher disp = new DefaultRuleDispatcher(getDefaultExprProcessor(), exprRules, exprContext); GraphWalker egw = new DefaultGraphWalker(disp); extractFinalCandidates(pred, exprContext, conf);
.extractPushdownPreds(owi, op, e.getValue()); if (!extractPushdownPreds.getNonFinalCandidates().isEmpty()) { hasUnpushedPredicates = true;
ewi = ExprWalkerProcFactory.extractPushdownPreds(owi, op, predicate); if (!ewi.isDeterministic()) {
ewi = ExprWalkerProcFactory.extractPushdownPreds(owi, op, predicate); if (!ewi.isDeterministic()) {
public static ExprWalkerInfo extractPushdownPreds(OpWalkerInfo opContext, Operator<? extends OperatorDesc> op, ExprNodeDesc pred) throws SemanticException { List<ExprNodeDesc> preds = new ArrayList<ExprNodeDesc>(); preds.add(pred); return extractPushdownPreds(opContext, op, preds); }
public static ExprWalkerInfo extractPushdownPreds(OpWalkerInfo opContext, Operator<? extends Serializable> op, ExprNodeDesc pred) throws SemanticException { List<ExprNodeDesc> preds = new ArrayList<ExprNodeDesc>(); preds.add(pred); return extractPushdownPreds(opContext, op, preds); }
.extractPushdownPreds(owi, op, e.getValue()); if (!extractPushdownPreds.getNonFinalCandidates().isEmpty()) { hasUnpushedPredicates = true;
.extractPushdownPreds(owi, op, e.getValue()); ewi.merge(extractPushdownPreds); logExpr(nd, extractPushdownPreds);