@Override public TupleExpression visitColumn(ColumnTupleExpression colExpr) { if (decorator != null) { colExpr = new ColumnTupleExpression(decorator.mapCol(colExpr.getColumn())); } serializeExpression(0, colExpr, buffer, cs); return colExpr; }
public static Set<TblColRef> collectFilterColumns(TupleExpression tupleExpression) { ExpressionColCollector collector = new ExpressionColCollector(); collector.ifMCols = false; tupleExpression.accept(collector); return collector.filterColumns; }
@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)); }
@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 TblColRef translateRexNode(TupleExpression tupleExpr, String fieldName) { if (tupleExpr instanceof ColumnTupleExpression) { return ((ColumnTupleExpression) tupleExpr).getColumn(); } else if (tupleExpr instanceof NumberTupleExpression) { Object value = ((NumberTupleExpression) tupleExpr).getValue(); return TblColRef.newInnerColumn(value == null ? "null" : value.toString(), InnerDataTypeEnum.LITERAL); } else if (tupleExpr instanceof StringTupleExpression) { Object value = ((StringTupleExpression) tupleExpr).getValue(); return TblColRef.newInnerColumn(value == null ? "null" : value.toString(), InnerDataTypeEnum.LITERAL); } return TblColRef.newInnerColumn(fieldName, InnerDataTypeEnum.LITERAL, tupleExpr.getDigest()); }
@Override public TupleExpression visitColumn(ColumnTupleExpression colExpr) { return new ColumnTupleExpression(colExpr.getColumn()); }
@Override public TupleExpression visitRexCall(RexCallTupleExpression rexCallExpr) { for (TupleExpression child : rexCallExpr.getChildren()) { child.accept(this); } return rexCallExpr; }
@Override public TupleExpression visitString(StringTupleExpression strExpr) { return new StringTupleExpression(strExpr.getValue()); }
private static void serializeExpression(int flag, TupleExpression expr, ByteBuffer buffer, IFilterCodeSystem<?> cs) { if (flag < 0) { BytesUtil.writeVInt(-1, buffer); } else { int opVal = expr.getOperator().getValue(); BytesUtil.writeVInt(opVal, buffer); expr.serialize(cs, buffer); BytesUtil.writeVInt(flag, buffer); } }
private TupleExpression visitIndependent(TupleExpression expression) { boolean ifToCntO = ifToCnt; boolean ifCntSetO = ifCntSet; TupleExpression ret = expression.accept(this); ifToCnt = ifToCntO; ifCntSet = ifCntSetO; return ret; }
private void verifyDivide() { if (ExpressionColCollector.collectMeasureColumns(getRight()).size() > 0) { throw new IllegalArgumentException( "That the right side of the BinaryTupleExpression owns columns is not supported for " + operator.toString()); } }
@Override public void verify() { switch (operator) { case MULTIPLE: verifyMultiply(); break; case DIVIDE: verifyDivide(); break; default: } }
@Override public boolean ifForDynamicColumn() { return ifAbleToPushDown(); }
@Override public TupleExpression accept(ExpressionVisitor visitor) { return visitor.visitString(this); }
@Override public TupleExpression accept(ExpressionVisitor visitor) { return visitor.visitNumber(this); }
@Override public boolean ifForDynamicColumn() { return ifAbleToPushDown(); }
@Override public TupleExpression accept(ExpressionVisitor visitor) { return visitor.visitBinary(this); }
public static Set<TblColRef> collectMeasureColumns(TupleExpression tupleExpression) { ExpressionColCollector collector = new ExpressionColCollector(); collector.ifFCols = false; tupleExpression.accept(collector); return collector.measureColumns; }
public static Pair<Set<TblColRef>, Set<TblColRef>> collectColumnsPair(TupleExpression tupleExpression) { ExpressionColCollector collector = new ExpressionColCollector(); tupleExpression.accept(collector); return new Pair<>(collector.filterColumns, collector.measureColumns); }