@Override public EvalNode visitBinaryEval(LogicalPlanner.PlanContext context, Stack<EvalNode> stack, BinaryEval binaryEval) { stack.push(binaryEval); EvalNode lhs = visit(context, binaryEval.getLeftExpr(), stack); EvalNode rhs = visit(context, binaryEval.getRightExpr(), stack); stack.pop(); if (!binaryEval.getLeftExpr().equals(lhs)) { binaryEval.setLeftExpr(lhs); } if (!binaryEval.getRightExpr().equals(rhs)) { binaryEval.setRightExpr(rhs); } if (lhs.getType() == EvalType.CONST && rhs.getType() == EvalType.CONST) { binaryEval.bind(null, null); return new ConstEval(binaryEval.eval(null)); } return binaryEval; }
@Override public EvalNode visitBinaryEval(LogicalPlanner.PlanContext context, Stack<EvalNode> stack, BinaryEval binaryEval) { stack.push(binaryEval); EvalNode lhs = visit(context, binaryEval.getLeftExpr(), stack); EvalNode rhs = visit(context, binaryEval.getRightExpr(), stack); stack.pop(); if (!binaryEval.getLeftExpr().equals(lhs)) { binaryEval.setLeftExpr(lhs); } if (!binaryEval.getRightExpr().equals(rhs)) { binaryEval.setRightExpr(rhs); } if (lhs.getType() == EvalType.CONST && rhs.getType() == EvalType.CONST) { binaryEval.bind(null, null); return new ConstEval(binaryEval.eval(null)); } return binaryEval; }
@Test public void testOrTest() { MockTrueEval trueExpr = new MockTrueEval(); MockFalseExpr falseExpr = new MockFalseExpr(); BinaryEval orExpr = new BinaryEval(EvalType.OR, trueExpr, trueExpr); orExpr.bind(null, null); assertTrue(orExpr.eval(null).asBool()); orExpr = new BinaryEval(EvalType.OR, falseExpr, trueExpr); orExpr.bind(null, null); assertTrue(orExpr.eval(null).asBool()); orExpr = new BinaryEval(EvalType.OR, trueExpr, falseExpr); orExpr.bind(null, null); assertTrue(orExpr.eval(null).asBool()); orExpr = new BinaryEval(EvalType.OR, falseExpr, falseExpr); orExpr.bind(null, null); assertFalse(orExpr.eval(null).asBool()); }
@Test public void testAndTest() { MockTrueEval trueExpr = new MockTrueEval(); MockFalseExpr falseExpr = new MockFalseExpr(); BinaryEval andExpr = new BinaryEval(EvalType.AND, trueExpr, trueExpr); andExpr.bind(null, null); assertTrue(andExpr.eval(null).asBool()); andExpr = new BinaryEval(EvalType.AND, falseExpr, trueExpr); andExpr.bind(null, null); assertFalse(andExpr.eval(null).asBool()); andExpr = new BinaryEval(EvalType.AND, trueExpr, falseExpr); andExpr.bind(null, null); assertFalse(andExpr.eval(null).asBool()); andExpr = new BinaryEval(EvalType.AND, falseExpr, falseExpr); andExpr.bind(null, null); assertFalse(andExpr.eval(null).asBool()); }
@Test public void testTupleEval() throws CloneNotSupportedException { ConstEval e1 = new ConstEval(DatumFactory.createInt4(1)); assertCloneEqual(e1); FieldEval e2 = new FieldEval("table1.score", CatalogUtil.newSimpleDataType(INT4)); // it indicates assertCloneEqual(e2); Schema schema1 = SchemaBuilder.builder() .add("table1.id", INT4) .add("table1.score", INT4) .build(); BinaryEval expr = new BinaryEval(EvalType.PLUS, e1, e2); expr.bind(null, schema1); assertCloneEqual(expr); VTuple tuple = new VTuple(2); tuple.put(0, DatumFactory.createInt4(1)); // put 0th field tuple.put(1, DatumFactory.createInt4(99)); // put 1th field // the result of evaluation must be 100. assertEquals(expr.eval(tuple).asInt4(), 100); }
binEval = new BinaryEval(EvalType.LTH, e1, e2); try { binEval.eval(null); fail("EvalNode is not binded"); } catch (IllegalStateException e) {