/** * Return all exprs to refer columns corresponding to the target. * * @param expr * @param target to be found * @return a list of exprs */ public static Collection<EvalNode> getContainExpr(EvalNode expr, Column target) { Set<EvalNode> exprSet = Sets.newHashSet(); getContainExpr(expr, target, exprSet); return exprSet; }
/** * Return all exprs to refer columns corresponding to the target. * * @param expr * @param target to be found * @return a list of exprs */ public static Collection<EvalNode> getContainExpr(EvalNode expr, Column target) { Set<EvalNode> exprSet = Sets.newHashSet(); getContainExpr(expr, target, exprSet); return exprSet; }
@Test public final void testGetContainExprs() throws CloneNotSupportedException, TajoException { Expr expr = analyzer.parse(QUERIES[1]); LogicalPlan plan = planner.createPlan(defaultContext, expr, true); List<Target> targets = plan.getRootBlock().getRawTargets(); Column col1 = new Column("default.people.score", TajoDataTypes.Type.INT4); Collection<EvalNode> exprs = EvalTreeUtil.getContainExpr(targets.get(0).getEvalTree(), col1); BinaryEval node = (BinaryEval) exprs.iterator().next(); assertEquals(EvalType.LTH, node.getType()); assertEquals(EvalType.PLUS, node.getLeftExpr().getType()); assertEquals(new ConstEval(DatumFactory.createInt4(4)), node.getRightExpr()); Column col2 = new Column("default.people.age", TajoDataTypes.Type.INT4); exprs = EvalTreeUtil.getContainExpr(targets.get(1).getEvalTree(), col2); node = (BinaryEval) exprs.iterator().next(); assertEquals(EvalType.GTH, node.getType()); assertEquals("default.people.age", node.getLeftExpr().getName()); assertEquals(new ConstEval(DatumFactory.createInt4(5)), node.getRightExpr()); }
@Test public final void testSimplify() throws TajoException { List<Target> targets = getRawTargets(QUERIES[0]); EvalNode node = AlgebraicUtil.eliminateConstantExprs(targets.get(0).getEvalTree()); assertEquals(EvalType.CONST, node.getType()); assertEquals(7, node.bind(null, null).eval(null).asInt4()); node = AlgebraicUtil.eliminateConstantExprs(targets.get(1).getEvalTree()); assertEquals(EvalType.CONST, node.getType()); assertTrue(7.0d == node.bind(null, null).eval(null).asFloat8()); Expr expr = analyzer.parse(QUERIES[1]); LogicalPlan plan = planner.createPlan(defaultContext, expr, true); targets = plan.getRootBlock().getRawTargets(); Column col1 = new Column("default.people.score", TajoDataTypes.Type.INT4); Collection<EvalNode> exprs = EvalTreeUtil.getContainExpr(targets.get(0).getEvalTree(), col1); node = exprs.iterator().next(); }