@Override public EvalNode bind(EvalContext evalContext, Schema schema) { super.bind(evalContext, schema); compile(pattern); return this; }
@Override public EvalNode bind(EvalContext evalContext, Schema schema) { super.bind(evalContext, schema); compile(pattern); return this; }
@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(Object 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) { return new ConstEval(binaryEval.bind(null, null).eval(null)); } return binaryEval; }
@Override public EvalNode visitBinaryEval(Object 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) { return new ConstEval(binaryEval.bind(null, null).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 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 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()); }
e2 = new ConstEval(DatumFactory.createInt4(34)); expr = new BinaryEval(EvalType.LTH, e1, e2); assertTrue(expr.bind(null, null).eval(null).asBool()); expr = new BinaryEval(EvalType.LEQ, e1, e2); assertTrue(expr.bind(null, null).eval(null).asBool()); expr = new BinaryEval(EvalType.LTH, e2, e1); assertFalse(expr.bind(null, null).eval(null).asBool()); expr = new BinaryEval(EvalType.LEQ, e2, e1); assertFalse(expr.bind(null, null).eval(null).asBool()); assertTrue(expr.bind(null, null).eval(null).asBool()); expr = new BinaryEval(EvalType.GEQ, e2, e1); assertTrue(expr.bind(null, null).eval(null).asBool()); expr = new BinaryEval(EvalType.GTH, e1, e2); assertFalse(expr.bind(null, null).eval(null).asBool()); expr = new BinaryEval(EvalType.GEQ, e1, e2); assertFalse(expr.bind(null, null).eval(null).asBool()); assertTrue(expr.bind(null, null).eval(null).asBool()); expr = new BinaryEval(EvalType.LEQ, e1, plus); assertTrue(expr.bind(null, null).eval(null).asBool()); expr = new BinaryEval(EvalType.LTH, plus, e1); assertFalse(expr.bind(null, null).eval(null).asBool()); expr = new BinaryEval(EvalType.LEQ, plus, e1); assertFalse(expr.bind(null, null).eval(null).asBool()); assertTrue(expr.bind(null, null).eval(null).asBool()); expr = new BinaryEval(EvalType.GEQ, plus, e1); assertTrue(expr.bind(null, null).eval(null).asBool());
e2 = new ConstEval(DatumFactory.createInt4(34)); BinaryEval expr = new BinaryEval(EvalType.PLUS, e1, e2); assertEquals(expr.bind(null, null).eval(null).asInt4(), 43); assertCloneEqual(expr); e2 = new ConstEval(DatumFactory.createInt4(2)); expr = new BinaryEval(EvalType.MINUS, e1, e2); assertEquals(expr.bind(null, null).eval(null).asInt4(), 3); assertCloneEqual(expr); e2 = new ConstEval(DatumFactory.createInt4(2)); expr = new BinaryEval(EvalType.MULTIPLY, e1, e2); assertEquals(expr.bind(null, null).eval(null).asInt4(), 10); assertCloneEqual(expr); e2 = new ConstEval(DatumFactory.createInt4(5)); expr = new BinaryEval(EvalType.DIVIDE, e1, e2); assertEquals(expr.bind(null, null).eval(null).asInt4(), 2); assertCloneEqual(expr);
@Test public final void testGetReturnType() { ConstEval e1; ConstEval e2; // PLUS e1 = new ConstEval(DatumFactory.createInt4(9)); e2 = new ConstEval(DatumFactory.createInt4(34)); BinaryEval expr = new BinaryEval(EvalType.PLUS, e1, e2); assertEquals(Type.Int4, expr.getValueType()); expr = new BinaryEval(EvalType.LTH, e1, e2); assertTrue(expr.bind(null, null).eval(null).asBool()); assertEquals(Type.Bool, expr.getValueType()); e1 = new ConstEval(DatumFactory.createFloat8(9.3)); e2 = new ConstEval(DatumFactory.createFloat8(34.2)); expr = new BinaryEval(EvalType.PLUS, e1, e2); assertEquals(Type.Float8, expr.getValueType()); }
@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); }
fail("EvalNode is not binded"); } catch (IllegalStateException e) { assertTrue(binEval.bind(null, null).eval(null).asBool());