@Override public TupleExpression visitNumber(NumberTupleExpression numExpr) { NumberTupleExpression copyExpr = new NumberTupleExpression(numExpr.getValue()); if (ifToCnt) { List<TupleExpression> children = Lists.newArrayList(cntExpr, copyExpr); ifCntSet = true; return new BinaryTupleExpression(TupleExpression.ExpressionOperatorEnum.MULTIPLE, children); } return copyExpr; }
private BinaryTupleExpression getBinaryTupleExpression(RexCall call, TupleExpression.ExpressionOperatorEnum op) { assert call.operands.size() == 2; TupleExpression left = call.operands.get(0).accept(this); TupleExpression right = call.operands.get(1).accept(this); BinaryTupleExpression tuple = new BinaryTupleExpression(op, Lists.newArrayList(left, right)); tuple.setDigest(call.toString()); return tuple; }
@Override public TupleExpression visitBinary(BinaryTupleExpression binaryExpr) { // serialize expression+true serializeExpression(1, binaryExpr, buffer, cs); // serialize children TupleExpression left = binaryExpr.getLeft().accept(this); TupleExpression right = binaryExpr.getRight().accept(this); // serialize none serializeExpression(-1, binaryExpr, buffer, cs); return decorator == null ? binaryExpr : new BinaryTupleExpression(binaryExpr.getOperator(), Lists.newArrayList(left, right)); }
case MULTIPLE: case DIVIDE: tuple = new BinaryTupleExpression(op); break; case NUMBER:
ColumnTupleExpression colTuple2 = new ColumnTupleExpression(col2); BinaryTupleExpression biTuple1 = new BinaryTupleExpression(TupleExpression.ExpressionOperatorEnum.MULTIPLE, Lists.newArrayList(constTuple1, colTuple1)); biTuple1.verify(); BinaryTupleExpression biTuple2 = new BinaryTupleExpression(TupleExpression.ExpressionOperatorEnum.DIVIDE, Lists.newArrayList(constTuple2, colTuple2)); try { biTuple2 = new BinaryTupleExpression(TupleExpression.ExpressionOperatorEnum.DIVIDE, Lists.newArrayList(colTuple2, constTuple2)); biTuple2.verify(); BinaryTupleExpression biTuple = new BinaryTupleExpression(TupleExpression.ExpressionOperatorEnum.MULTIPLE, Lists.<TupleExpression> newArrayList(biTuple1, biTuple2)); try {
TupleExpression t14 = new NumberTupleExpression(5); TupleExpression b0 = new BinaryTupleExpression(ExpressionOperatorEnum.PLUS, Lists.newArrayList(t1, t2)); TupleExpression b1 = new BinaryTupleExpression(ExpressionOperatorEnum.MULTIPLE, Lists.newArrayList(t0, b0)); TupleExpression b2 = new BinaryTupleExpression(ExpressionOperatorEnum.PLUS, Lists.newArrayList(t3, t4)); TupleExpression b3 = new BinaryTupleExpression(ExpressionOperatorEnum.PLUS, Lists.newArrayList(t7, t8)); TupleExpression b4 = new BinaryTupleExpression(ExpressionOperatorEnum.PLUS, Lists.newArrayList(t9, t10)); TupleExpression b11 = new BinaryTupleExpression(ExpressionOperatorEnum.MULTIPLE, Lists.newArrayList(b1, b2)); TupleExpression b12 = new BinaryTupleExpression(ExpressionOperatorEnum.PLUS, Lists.newArrayList(t5, t6)); TupleExpression b13 = new BinaryTupleExpression(ExpressionOperatorEnum.MULTIPLE, Lists.newArrayList(b3, b4)); TupleExpression b14 = new BinaryTupleExpression(ExpressionOperatorEnum.PLUS, Lists.newArrayList(t11, t12)); TupleExpression b21 = new BinaryTupleExpression(ExpressionOperatorEnum.MULTIPLE, Lists.newArrayList(b11, b12)); TupleExpression b22 = new BinaryTupleExpression(ExpressionOperatorEnum.MULTIPLE, Lists.newArrayList(b13, b14)); TupleExpression b31 = new BinaryTupleExpression(ExpressionOperatorEnum.PLUS, Lists.newArrayList(b21, b22)); TupleExpression b41 = new BinaryTupleExpression(ExpressionOperatorEnum.MINUS, Lists.newArrayList(b31, t13)); TupleExpression b51 = new BinaryTupleExpression(ExpressionOperatorEnum.PLUS, Lists.newArrayList(b41, t14));
throw new IllegalArgumentException("Unsupported operator " + binaryExpr.getOperator()); return new BinaryTupleExpression(binaryExpr.getOperator(), Lists.newArrayList(leftCopy, rightCopy));
TupleExpression t14 = new NumberTupleExpression(1); TupleExpression b1 = new BinaryTupleExpression(ExpressionOperatorEnum.PLUS, Lists.newArrayList(t1, t2)); TupleExpression b2 = new BinaryTupleExpression(ExpressionOperatorEnum.PLUS, Lists.newArrayList(t3, t4)); TupleExpression b3 = new BinaryTupleExpression(ExpressionOperatorEnum.PLUS, Lists.newArrayList(t5, t6)); TupleExpression b4 = new BinaryTupleExpression(ExpressionOperatorEnum.PLUS, Lists.newArrayList(t8, t5)); TupleExpression b5 = new BinaryTupleExpression(ExpressionOperatorEnum.PLUS, Lists.newArrayList(t9, t10)); TupleExpression b6 = new BinaryTupleExpression(ExpressionOperatorEnum.MULTIPLE, Lists.newArrayList(t5, t13)); TupleExpression b11 = new BinaryTupleExpression(ExpressionOperatorEnum.MULTIPLE, Lists.newArrayList(b2, b3)); TupleExpression b12 = new BinaryTupleExpression(ExpressionOperatorEnum.MULTIPLE, Lists.newArrayList(b4, b5)); TupleExpression b21 = new BinaryTupleExpression(ExpressionOperatorEnum.PLUS, Lists.newArrayList(b11, t7)); TupleExpression b22 = new BinaryTupleExpression(ExpressionOperatorEnum.PLUS, Lists.newArrayList(b12, t11)); TupleExpression b31 = new CaseTupleExpression(whenList, t12); TupleExpression b41 = new BinaryTupleExpression(ExpressionOperatorEnum.MULTIPLE, Lists.newArrayList(b1, b31)); TupleExpression b51 = new BinaryTupleExpression(ExpressionOperatorEnum.PLUS, Lists.newArrayList(b41, b6)); TupleExpression b61 = new BinaryTupleExpression(ExpressionOperatorEnum.PLUS, Lists.newArrayList(b51, t14));
TupleExpression constExpression1 = new NumberTupleExpression(1); TupleExpression constExpression2 = new NumberTupleExpression(2); TupleExpression biExpression = new BinaryTupleExpression(ExpressionOperatorEnum.MULTIPLE, Lists.newArrayList(colExpression, constExpression2)); TupleExpression thenExpression = new BinaryTupleExpression(ExpressionOperatorEnum.PLUS, Lists.newArrayList(biExpression, constExpression1));
@Override public TupleExpression visitNumber(NumberTupleExpression numExpr) { NumberTupleExpression copyExpr = new NumberTupleExpression(numExpr.getValue()); if (ifToCnt) { List<TupleExpression> children = Lists.newArrayList(cntExpr, copyExpr); ifCntSet = true; return new BinaryTupleExpression(TupleExpression.ExpressionOperatorEnum.MULTIPLE, children); } return copyExpr; }
private BinaryTupleExpression getBinaryTupleExpression(RexCall call, TupleExpression.ExpressionOperatorEnum op) { assert call.operands.size() == 2; TupleExpression left = call.operands.get(0).accept(this); TupleExpression right = call.operands.get(1).accept(this); BinaryTupleExpression tuple = new BinaryTupleExpression(op, Lists.newArrayList(left, right)); tuple.setDigest(call.toString()); return tuple; }
@Override public TupleExpression visitBinary(BinaryTupleExpression binaryExpr) { // serialize expression+true serializeExpression(1, binaryExpr, buffer, cs); // serialize children TupleExpression left = binaryExpr.getLeft().accept(this); TupleExpression right = binaryExpr.getRight().accept(this); // serialize none serializeExpression(-1, binaryExpr, buffer, cs); return decorator == null ? binaryExpr : new BinaryTupleExpression(binaryExpr.getOperator(), Lists.newArrayList(left, right)); }
case MULTIPLE: case DIVIDE: tuple = new BinaryTupleExpression(op); break; case NUMBER:
throw new IllegalArgumentException("Unsupported operator " + binaryExpr.getOperator()); return new BinaryTupleExpression(binaryExpr.getOperator(), Lists.newArrayList(leftCopy, rightCopy));