@Test public void testReferDataType() { assertEquals(TupleExpression.referDataType(null, DataType.getType("int")), DataType.getType("bigint")); assertEquals(TupleExpression.referDataType(DataType.getType("int"), null), DataType.getType("bigint")); assertEquals(TupleExpression.referDataType(DataType.getType("int"), DataType.getType("bigint")), DataType.getType("bigint")); assertEquals(TupleExpression.referDataType(DataType.getType("int"), DataType.getType("double")), DataType.getType("double")); assertEquals(TupleExpression.referDataType(DataType.getType("decimal"), DataType.getType("bigint")), DataType.getType("decimal")); assertEquals(TupleExpression.referDataType(DataType.getType("decimal"), DataType.getType("double")), DataType.getType("decimal")); }
public static DataType referDataType(DataType dt1, DataType dt2) { if (dt1 == null || dt2 == null) { DataType dt = dt1 == null ? dt2 : dt1; if (dt == null) { return null; } if (dt.isNumberFamily()) { if (dt.isIntegerFamily()) { return DataType.getType("bigint"); } else if (dt.isDecimal()) { return DataType.getType("decimal"); } else { return DataType.getType("double"); } } else { return dt; } } if (dt1.isNumberFamily() && dt2.isNumberFamily()) { if (dt1.isIntegerFamily() && dt2.isIntegerFamily()) { return DataType.getType("bigint"); } else if (dt1.isDecimal() || dt2.isDecimal()) { return DataType.getType("decimal"); } else { return DataType.getType("double"); } } else { assert dt1.equals(dt2); return dt1; } }
TupleExpression { public static DataType referDataType(DataType dt1, DataType dt2) { if (dt1 == null || dt2 == null) { DataType dt = dt1 == null ? dt2 : dt1; if (dt == null) { return null; } if (dt.isNumberFamily()) { if (dt.isIntegerFamily()) { return DataType.getType("bigint"); } else if (dt.isDecimal()) { return DataType.getType("decimal"); } else { return DataType.getType("double"); } } else { return dt; } } if (dt1.isNumberFamily() && dt2.isNumberFamily()) { if (dt1.isIntegerFamily() && dt2.isIntegerFamily()) { return DataType.getType("bigint"); } else if (dt1.isDecimal() || dt2.isDecimal()) { return DataType.getType("decimal"); } else { return DataType.getType("double"); } } else { assert dt1.equals(dt2); return dt1; } } }
TupleExpression { public static DataType referDataType(DataType dt1, DataType dt2) { if (dt1 == null || dt2 == null) { DataType dt = dt1 == null ? dt2 : dt1; if (dt == null) { return null; } if (dt.isNumberFamily()) { if (dt.isIntegerFamily()) { return DataType.getType("bigint"); } else if (dt.isDecimal()) { return DataType.getType("decimal"); } else { return DataType.getType("double"); } } else { return dt; } } if (dt1.isNumberFamily() && dt2.isNumberFamily()) { if (dt1.isIntegerFamily() && dt2.isIntegerFamily()) { return DataType.getType("bigint"); } else if (dt1.isDecimal() || dt2.isDecimal()) { return DataType.getType("decimal"); } else { return DataType.getType("double"); } } else { assert dt1.equals(dt2); return dt1; } } protected  TupleExpression(DataType dataType, ExpressionOperatorEnum op, List<TupleExpression> exprs); }
TupleExpression { public static DataType referDataType(DataType dt1, DataType dt2) { if (dt1 == null || dt2 == null) { DataType dt = dt1 == null ? dt2 : dt1; if (dt == null) { return null; } if (dt.isNumberFamily()) { if (dt.isIntegerFamily()) { return DataType.getType("bigint"); } else if (dt.isDecimal()) { return DataType.getType("decimal"); } else { return DataType.getType("double"); } } else { return dt; } } if (dt1.isNumberFamily() && dt2.isNumberFamily()) { if (dt1.isIntegerFamily() && dt2.isIntegerFamily()) { return DataType.getType("bigint"); } else if (dt1.isDecimal() || dt2.isDecimal()) { return DataType.getType("decimal"); } else { return DataType.getType("double"); } } else { assert dt1.equals(dt2); return dt1; } } protected  TupleExpression(DataType dataType, ExpressionOperatorEnum op, List<TupleExpression> exprs); boolean ifForDynamicColumn(); abstract void verify(); abstract Object calculate(IEvaluatableTuple tuple, IFilterCodeSystem<?> cs); abstract TupleExpression accept(ExpressionVisitor visitor); abstract void serialize(IFilterCodeSystem<?> cs, ByteBuffer buffer); abstract void deserialize(IFilterCodeSystem<?> cs, ByteBuffer buffer); DataType getDataType(); ExpressionOperatorEnum getOperator(); void setDigest(String digest); String getDigest(); boolean hasChildren(); List<? extends TupleExpression> getChildren(); void addChild(TupleExpression child); Object referValue(Object value); static DataType referDataType(DataType dt1, DataType dt2); static Object referValue(Object value, DataType dt); }
TupleExpression { public static DataType referDataType(DataType dt1, DataType dt2) { if (dt1 == null || dt2 == null) { DataType dt = dt1 == null ? dt2 : dt1; if (dt == null) { return null; } if (dt.isNumberFamily()) { if (dt.isIntegerFamily()) { return DataType.getType("bigint"); } else if (dt.isDecimal()) { return DataType.getType("decimal"); } else { return DataType.getType("double"); } } else { return dt; } } if (dt1.isNumberFamily() && dt2.isNumberFamily()) { if (dt1.isIntegerFamily() && dt2.isIntegerFamily()) { return DataType.getType("bigint"); } else if (dt1.isDecimal() || dt2.isDecimal()) { return DataType.getType("decimal"); } else { return DataType.getType("double"); } } else { assert dt1.equals(dt2); return dt1; } } protected  TupleExpression(DataType dataType, ExpressionOperatorEnum op, List<TupleExpression> exprs); boolean ifForDynamicColumn(); abstract void verify(); abstract Object calculate(IEvaluatableTuple tuple, IFilterCodeSystem<?> cs); abstract TupleExpression accept(ExpressionVisitor visitor); abstract void serialize(IFilterCodeSystem<?> cs, ByteBuffer buffer); abstract void deserialize(IFilterCodeSystem<?> cs, ByteBuffer buffer); DataType getDataType(); ExpressionOperatorEnum getOperator(); void setDigest(String digest); String getDigest(); boolean hasChildren(); List<? extends TupleExpression> getChildren(); void addChild(TupleExpression child); Object referValue(Object value); static DataType referDataType(DataType dt1, DataType dt2); static Object referValue(Object value, DataType dt);  }