public static BinaryEval create(EvalType type, EvalNode e1, EvalNode e2) { return new BinaryEval(type, e1, e2); } }
public static BinaryEval create(EvalType type, EvalNode e1, EvalNode e2) { return new BinaryEval(type, e1, e2); } }
private static EvalNode createSingletonExprFromDNFRecursive(EvalNode[] evalNode, int idx) { if (idx == evalNode.length - 2) { return new BinaryEval(EvalType.OR, evalNode[idx], evalNode[idx + 1]); } else { return new BinaryEval(EvalType.OR, evalNode[idx], createSingletonExprFromDNFRecursive(evalNode, idx + 1)); } }
private static EvalNode createSingletonExprFromDNFRecursive(EvalNode[] evalNode, int idx) { if (idx == evalNode.length - 2) { return new BinaryEval(EvalType.OR, evalNode[idx], evalNode[idx + 1]); } else { return new BinaryEval(EvalType.OR, evalNode[idx], createSingletonExprFromDNFRecursive(evalNode, idx + 1)); } }
private static EvalNode createSingletonExprFromCNFRecursive(EvalNode[] evalNode, int idx) { if (idx >= evalNode.length) { throw new ArrayIndexOutOfBoundsException("index " + idx + " is exceeded the maximum length ("+ evalNode.length+") of EvalNode"); } if (idx == evalNode.length - 2) { return new BinaryEval(EvalType.AND, evalNode[idx], evalNode[idx + 1]); } else { return new BinaryEval(EvalType.AND, evalNode[idx], createSingletonExprFromCNFRecursive(evalNode, idx + 1)); } }
private static EvalNode createSingletonExprFromCNFRecursive(EvalNode[] evalNode, int idx) { if (idx >= evalNode.length) { throw new ArrayIndexOutOfBoundsException("index " + idx + " is exceeded the maximum length ("+ evalNode.length+") of EvalNode"); } if (idx == evalNode.length - 2) { return new BinaryEval(EvalType.AND, evalNode[idx], evalNode[idx + 1]); } else { return new BinaryEval(EvalType.AND, evalNode[idx], createSingletonExprFromCNFRecursive(evalNode, idx + 1)); } }
@Override public EvalNode visitOr(Context ctx, Stack<Expr> stack, BinaryOperator expr) throws TajoException { stack.push(expr); EvalNode left = visit(ctx, stack, expr.getLeft()); EvalNode right = visit(ctx, stack, expr.getRight()); stack.pop(); return new BinaryEval(EvalType.OR, left, right); }
@Override public EvalNode visitOr(Context ctx, Stack<Expr> stack, BinaryOperator expr) throws TajoException { stack.push(expr); EvalNode left = visit(ctx, stack, expr.getLeft()); EvalNode right = visit(ctx, stack, expr.getRight()); stack.pop(); return new BinaryEval(EvalType.OR, left, right); }
@Override public EvalNode visitAnd(Context ctx, Stack<Expr> stack, BinaryOperator expr) throws TajoException { stack.push(expr); EvalNode left = visit(ctx, stack, expr.getLeft()); EvalNode right = visit(ctx, stack, expr.getRight()); stack.pop(); return new BinaryEval(EvalType.AND, left, right); }
@Override public EvalNode visitAnd(Context ctx, Stack<Expr> stack, BinaryOperator expr) throws TajoException { stack.push(expr); EvalNode left = visit(ctx, stack, expr.getLeft()); EvalNode right = visit(ctx, stack, expr.getRight()); stack.pop(); return new BinaryEval(EvalType.AND, left, right); }
private static BinaryEval createBinaryNode(Context ctx, EvalType type, EvalNode lhs, EvalNode rhs) { Pair<EvalNode, EvalNode> pair = convertTypesIfNecessary(ctx, lhs, rhs); // implicit type conversion if necessary return new BinaryEval(type, pair.getFirst(), pair.getSecond()); }
private EvalNode buildJoinCondition(EvalNode leftField, TableSubQueryNode subQueryNode) { FieldEval rightField = new FieldEval(subQueryNode.getOutSchema().getColumn(0)); return new BinaryEval(EvalType.EQUAL, leftField, rightField); }
private static BinaryEval createBinaryNode(Context ctx, EvalType type, EvalNode lhs, EvalNode rhs) { Pair<EvalNode, EvalNode> pair = convertTypesIfNecessary(ctx, lhs, rhs); // implicit type conversion if necessary return new BinaryEval(type, pair.getFirst(), pair.getSecond()); }
private EvalNode buildJoinCondition(EvalNode leftField, TableSubQueryNode subQueryNode) { FieldEval rightField = new FieldEval(subQueryNode.getOutSchema().getColumn(0)); return new BinaryEval(EvalType.EQUAL, leftField, rightField); }
@Override public EvalNode visitConcatenate(Context ctx, Stack<Expr> stack, BinaryOperator expr) throws TajoException { stack.push(expr); EvalNode lhs = visit(ctx, stack, expr.getLeft()); EvalNode rhs = visit(ctx, stack, expr.getRight()); stack.pop(); if (lhs.getValueType().kind() != TajoDataTypes.Type.TEXT) { lhs = convertType(ctx, lhs, Text); } if (rhs.getValueType().kind() != TajoDataTypes.Type.TEXT) { rhs = convertType(ctx, rhs, Text); } return new BinaryEval(EvalType.CONCATENATE, lhs, rhs); }
@Override public EvalNode visitConcatenate(Context ctx, Stack<Expr> stack, BinaryOperator expr) throws TajoException { stack.push(expr); EvalNode lhs = visit(ctx, stack, expr.getLeft()); EvalNode rhs = visit(ctx, stack, expr.getRight()); stack.pop(); if (lhs.getValueType().getType() != Type.TEXT) { lhs = convertType(ctx, lhs, CatalogUtil.newSimpleDataType(Type.TEXT)); } if (rhs.getValueType().getType() != Type.TEXT) { rhs = convertType(ctx, rhs, CatalogUtil.newSimpleDataType(Type.TEXT)); } return new BinaryEval(EvalType.CONCATENATE, lhs, rhs); }
@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 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); }