[feature](decimal) support decimal256 (#25386)
This commit is contained in:
@ -54,6 +54,7 @@ public enum PrimitiveType {
|
||||
DECIMAL32("DECIMAL32", 4, TPrimitiveType.DECIMAL32, true),
|
||||
DECIMAL64("DECIMAL64", 8, TPrimitiveType.DECIMAL64, true),
|
||||
DECIMAL128("DECIMAL128", 16, TPrimitiveType.DECIMAL128I, true),
|
||||
DECIMAL256("DECIMAL256", 32, TPrimitiveType.DECIMAL256, false),
|
||||
TIME("TIME", 8, TPrimitiveType.TIME, false),
|
||||
// these following types are stored as object binary in BE.
|
||||
HLL("HLL", 16, TPrimitiveType.HLL, true),
|
||||
@ -94,6 +95,7 @@ public enum PrimitiveType {
|
||||
builder.add(DECIMAL32);
|
||||
builder.add(DECIMAL64);
|
||||
builder.add(DECIMAL128);
|
||||
builder.add(DECIMAL256);
|
||||
builder.add(DATETIMEV2);
|
||||
typeWithPrecision = builder.build();
|
||||
}
|
||||
@ -123,6 +125,7 @@ public enum PrimitiveType {
|
||||
builder.put(NULL_TYPE, DECIMAL32);
|
||||
builder.put(NULL_TYPE, DECIMAL64);
|
||||
builder.put(NULL_TYPE, DECIMAL128);
|
||||
builder.put(NULL_TYPE, DECIMAL256);
|
||||
builder.put(NULL_TYPE, CHAR);
|
||||
builder.put(NULL_TYPE, VARCHAR);
|
||||
builder.put(NULL_TYPE, STRING);
|
||||
@ -148,6 +151,7 @@ public enum PrimitiveType {
|
||||
builder.put(BOOLEAN, DECIMAL32);
|
||||
builder.put(BOOLEAN, DECIMAL64);
|
||||
builder.put(BOOLEAN, DECIMAL128);
|
||||
builder.put(BOOLEAN, DECIMAL256);
|
||||
builder.put(BOOLEAN, VARCHAR);
|
||||
builder.put(BOOLEAN, STRING);
|
||||
// Tinyint
|
||||
@ -167,6 +171,7 @@ public enum PrimitiveType {
|
||||
builder.put(TINYINT, DECIMAL32);
|
||||
builder.put(TINYINT, DECIMAL64);
|
||||
builder.put(TINYINT, DECIMAL128);
|
||||
builder.put(TINYINT, DECIMAL256);
|
||||
builder.put(TINYINT, VARCHAR);
|
||||
builder.put(TINYINT, STRING);
|
||||
builder.put(TINYINT, TIME);
|
||||
@ -188,6 +193,7 @@ public enum PrimitiveType {
|
||||
builder.put(SMALLINT, DECIMAL32);
|
||||
builder.put(SMALLINT, DECIMAL64);
|
||||
builder.put(SMALLINT, DECIMAL128);
|
||||
builder.put(SMALLINT, DECIMAL256);
|
||||
builder.put(SMALLINT, VARCHAR);
|
||||
builder.put(SMALLINT, STRING);
|
||||
builder.put(SMALLINT, TIME);
|
||||
@ -209,6 +215,7 @@ public enum PrimitiveType {
|
||||
builder.put(INT, DECIMAL32);
|
||||
builder.put(INT, DECIMAL64);
|
||||
builder.put(INT, DECIMAL128);
|
||||
builder.put(INT, DECIMAL256);
|
||||
builder.put(INT, VARCHAR);
|
||||
builder.put(INT, STRING);
|
||||
builder.put(INT, TIME);
|
||||
@ -230,6 +237,7 @@ public enum PrimitiveType {
|
||||
builder.put(BIGINT, DECIMAL32);
|
||||
builder.put(BIGINT, DECIMAL64);
|
||||
builder.put(BIGINT, DECIMAL128);
|
||||
builder.put(BIGINT, DECIMAL256);
|
||||
builder.put(BIGINT, VARCHAR);
|
||||
builder.put(BIGINT, STRING);
|
||||
builder.put(BIGINT, TIME);
|
||||
@ -251,6 +259,7 @@ public enum PrimitiveType {
|
||||
builder.put(LARGEINT, DECIMAL32);
|
||||
builder.put(LARGEINT, DECIMAL64);
|
||||
builder.put(LARGEINT, DECIMAL128);
|
||||
builder.put(LARGEINT, DECIMAL256);
|
||||
builder.put(LARGEINT, VARCHAR);
|
||||
builder.put(LARGEINT, STRING);
|
||||
builder.put(LARGEINT, TIME);
|
||||
@ -272,6 +281,7 @@ public enum PrimitiveType {
|
||||
builder.put(FLOAT, DECIMAL32);
|
||||
builder.put(FLOAT, DECIMAL64);
|
||||
builder.put(FLOAT, DECIMAL128);
|
||||
builder.put(FLOAT, DECIMAL256);
|
||||
builder.put(FLOAT, VARCHAR);
|
||||
builder.put(FLOAT, STRING);
|
||||
builder.put(FLOAT, TIME);
|
||||
@ -293,6 +303,7 @@ public enum PrimitiveType {
|
||||
builder.put(DOUBLE, DECIMAL32);
|
||||
builder.put(DOUBLE, DECIMAL64);
|
||||
builder.put(DOUBLE, DECIMAL128);
|
||||
builder.put(DOUBLE, DECIMAL256);
|
||||
builder.put(DOUBLE, VARCHAR);
|
||||
builder.put(DOUBLE, STRING);
|
||||
builder.put(DOUBLE, TIME);
|
||||
@ -314,6 +325,7 @@ public enum PrimitiveType {
|
||||
builder.put(DATE, DECIMAL32);
|
||||
builder.put(DATE, DECIMAL64);
|
||||
builder.put(DATE, DECIMAL128);
|
||||
builder.put(DATE, DECIMAL256);
|
||||
builder.put(DATE, VARCHAR);
|
||||
builder.put(DATE, STRING);
|
||||
// Datetime
|
||||
@ -333,6 +345,7 @@ public enum PrimitiveType {
|
||||
builder.put(DATETIME, DECIMAL32);
|
||||
builder.put(DATETIME, DECIMAL64);
|
||||
builder.put(DATETIME, DECIMAL128);
|
||||
builder.put(DATETIME, DECIMAL256);
|
||||
builder.put(DATETIME, VARCHAR);
|
||||
builder.put(DATETIME, STRING);
|
||||
// DateV2
|
||||
@ -352,6 +365,7 @@ public enum PrimitiveType {
|
||||
builder.put(DATEV2, DECIMAL32);
|
||||
builder.put(DATEV2, DECIMAL64);
|
||||
builder.put(DATEV2, DECIMAL128);
|
||||
builder.put(DATEV2, DECIMAL256);
|
||||
builder.put(DATEV2, VARCHAR);
|
||||
builder.put(DATEV2, STRING);
|
||||
// DatetimeV2
|
||||
@ -371,6 +385,7 @@ public enum PrimitiveType {
|
||||
builder.put(DATETIMEV2, DECIMAL32);
|
||||
builder.put(DATETIMEV2, DECIMAL64);
|
||||
builder.put(DATETIMEV2, DECIMAL128);
|
||||
builder.put(DATETIMEV2, DECIMAL256);
|
||||
builder.put(DATETIMEV2, VARCHAR);
|
||||
builder.put(DATETIMEV2, STRING);
|
||||
// Char
|
||||
@ -391,6 +406,7 @@ public enum PrimitiveType {
|
||||
builder.put(CHAR, DECIMAL32);
|
||||
builder.put(CHAR, DECIMAL64);
|
||||
builder.put(CHAR, DECIMAL128);
|
||||
builder.put(CHAR, DECIMAL256);
|
||||
builder.put(CHAR, VARCHAR);
|
||||
builder.put(CHAR, STRING);
|
||||
builder.put(CHAR, TIME);
|
||||
@ -412,6 +428,7 @@ public enum PrimitiveType {
|
||||
builder.put(VARCHAR, DECIMAL32);
|
||||
builder.put(VARCHAR, DECIMAL64);
|
||||
builder.put(VARCHAR, DECIMAL128);
|
||||
builder.put(VARCHAR, DECIMAL256);
|
||||
builder.put(VARCHAR, VARCHAR);
|
||||
builder.put(VARCHAR, JSONB);
|
||||
builder.put(VARCHAR, VARIANT);
|
||||
@ -436,6 +453,7 @@ public enum PrimitiveType {
|
||||
builder.put(STRING, DECIMAL32);
|
||||
builder.put(STRING, DECIMAL64);
|
||||
builder.put(STRING, DECIMAL128);
|
||||
builder.put(STRING, DECIMAL256);
|
||||
builder.put(STRING, VARCHAR);
|
||||
builder.put(STRING, JSONB);
|
||||
builder.put(STRING, VARIANT);
|
||||
@ -456,6 +474,7 @@ public enum PrimitiveType {
|
||||
builder.put(DECIMALV2, DECIMAL32);
|
||||
builder.put(DECIMALV2, DECIMAL64);
|
||||
builder.put(DECIMALV2, DECIMAL128);
|
||||
builder.put(DECIMALV2, DECIMAL256);
|
||||
builder.put(DECIMALV2, VARCHAR);
|
||||
builder.put(DECIMALV2, STRING);
|
||||
|
||||
@ -471,6 +490,7 @@ public enum PrimitiveType {
|
||||
builder.put(DECIMAL32, DECIMAL32);
|
||||
builder.put(DECIMAL32, DECIMAL64);
|
||||
builder.put(DECIMAL32, DECIMAL128);
|
||||
builder.put(DECIMAL32, DECIMAL256);
|
||||
builder.put(DECIMAL32, VARCHAR);
|
||||
builder.put(DECIMAL32, STRING);
|
||||
|
||||
@ -486,6 +506,7 @@ public enum PrimitiveType {
|
||||
builder.put(DECIMAL64, DECIMAL32);
|
||||
builder.put(DECIMAL64, DECIMAL64);
|
||||
builder.put(DECIMAL64, DECIMAL128);
|
||||
builder.put(DECIMAL64, DECIMAL256);
|
||||
builder.put(DECIMAL64, VARCHAR);
|
||||
builder.put(DECIMAL64, STRING);
|
||||
|
||||
@ -501,9 +522,27 @@ public enum PrimitiveType {
|
||||
builder.put(DECIMAL128, DECIMAL32);
|
||||
builder.put(DECIMAL128, DECIMAL64);
|
||||
builder.put(DECIMAL128, DECIMAL128);
|
||||
builder.put(DECIMAL128, DECIMAL256);
|
||||
builder.put(DECIMAL128, VARCHAR);
|
||||
builder.put(DECIMAL128, STRING);
|
||||
|
||||
// decimal256
|
||||
builder.put(DECIMAL256, BOOLEAN);
|
||||
builder.put(DECIMAL256, TINYINT);
|
||||
builder.put(DECIMAL256, SMALLINT);
|
||||
builder.put(DECIMAL256, INT);
|
||||
builder.put(DECIMAL256, BIGINT);
|
||||
builder.put(DECIMAL256, LARGEINT);
|
||||
builder.put(DECIMAL256, FLOAT);
|
||||
builder.put(DECIMAL256, DOUBLE);
|
||||
builder.put(DECIMAL256, DECIMALV2);
|
||||
builder.put(DECIMAL256, DECIMAL32);
|
||||
builder.put(DECIMAL256, DECIMAL64);
|
||||
builder.put(DECIMAL256, DECIMAL128);
|
||||
builder.put(DECIMAL256, DECIMAL256);
|
||||
builder.put(DECIMAL256, VARCHAR);
|
||||
builder.put(DECIMAL256, STRING);
|
||||
|
||||
// JSONB
|
||||
builder.put(JSONB, BOOLEAN);
|
||||
builder.put(JSONB, TINYINT);
|
||||
@ -517,6 +556,8 @@ public enum PrimitiveType {
|
||||
builder.put(JSONB, DECIMAL32);
|
||||
builder.put(JSONB, DECIMAL64);
|
||||
builder.put(JSONB, DECIMAL128);
|
||||
// TODO: support and test decimal256?
|
||||
// builder.put(JSONB, DECIMAL256);
|
||||
builder.put(JSONB, VARCHAR);
|
||||
builder.put(JSONB, STRING);
|
||||
builder.put(JSONB, VARIANT);
|
||||
@ -575,6 +616,7 @@ public enum PrimitiveType {
|
||||
numericTypes.add(DECIMAL32);
|
||||
numericTypes.add(DECIMAL64);
|
||||
numericTypes.add(DECIMAL128);
|
||||
numericTypes.add(DECIMAL256);
|
||||
|
||||
supportedTypes = Lists.newArrayList();
|
||||
supportedTypes.add(NULL_TYPE);
|
||||
@ -602,6 +644,7 @@ public enum PrimitiveType {
|
||||
supportedTypes.add(DECIMAL32);
|
||||
supportedTypes.add(DECIMAL64);
|
||||
supportedTypes.add(DECIMAL128);
|
||||
supportedTypes.add(DECIMAL256);
|
||||
supportedTypes.add(BITMAP);
|
||||
supportedTypes.add(ARRAY);
|
||||
supportedTypes.add(MAP);
|
||||
@ -685,6 +728,8 @@ public enum PrimitiveType {
|
||||
return DECIMAL64;
|
||||
case DECIMAL128I:
|
||||
return DECIMAL128;
|
||||
case DECIMAL256:
|
||||
return DECIMAL256;
|
||||
case TIME:
|
||||
return TIME;
|
||||
case TIMEV2:
|
||||
@ -767,7 +812,7 @@ public enum PrimitiveType {
|
||||
}
|
||||
|
||||
public boolean isDecimalV3Type() {
|
||||
return this == DECIMAL32 || this == DECIMAL64 || this == DECIMAL128;
|
||||
return this == DECIMAL32 || this == DECIMAL64 || this == DECIMAL128 || this == DECIMAL256;
|
||||
}
|
||||
|
||||
public boolean isNumericType() {
|
||||
@ -876,6 +921,7 @@ public enum PrimitiveType {
|
||||
case DECIMAL32:
|
||||
case DECIMAL64:
|
||||
case DECIMAL128:
|
||||
case DECIMAL256:
|
||||
return MysqlColType.MYSQL_TYPE_NEWDECIMAL;
|
||||
case STRING:
|
||||
return MysqlColType.MYSQL_TYPE_BLOB;
|
||||
@ -913,6 +959,8 @@ public enum PrimitiveType {
|
||||
return 8;
|
||||
case DECIMAL128:
|
||||
return 16;
|
||||
case DECIMAL256:
|
||||
return 32;
|
||||
default:
|
||||
return this.getSlotSize();
|
||||
}
|
||||
|
||||
@ -72,14 +72,15 @@ public class ScalarType extends Type {
|
||||
public static final int MAX_JSONB_LENGTH = 0x7fffffff - 4;
|
||||
|
||||
// Hive, mysql, sql server standard.
|
||||
public static final int MAX_PRECISION = 38;
|
||||
public static final int MAX_DECIMALV2_PRECISION = 27;
|
||||
public static final int MAX_DECIMALV2_SCALE = 9;
|
||||
public static final int MAX_DECIMAL32_PRECISION = 9;
|
||||
public static final int MAX_DECIMAL64_PRECISION = 18;
|
||||
public static final int MAX_DECIMAL128_PRECISION = 38;
|
||||
public static final int MAX_DECIMAL256_PRECISION = 76;
|
||||
public static final int DEFAULT_MIN_AVG_DECIMAL128_SCALE = 4;
|
||||
public static final int MAX_DATETIMEV2_SCALE = 6;
|
||||
public static final int MAX_PRECISION = MAX_DECIMAL256_PRECISION;
|
||||
|
||||
private long byteSize = -1;
|
||||
|
||||
@ -138,6 +139,7 @@ public class ScalarType extends Type {
|
||||
case DECIMAL32:
|
||||
case DECIMAL64:
|
||||
case DECIMAL128:
|
||||
case DECIMAL256:
|
||||
return createDecimalV3Type(precision, scale);
|
||||
case DECIMALV2:
|
||||
return createDecimalType(precision, scale);
|
||||
@ -210,6 +212,8 @@ public class ScalarType extends Type {
|
||||
return DEFAULT_DECIMAL64;
|
||||
case DECIMAL128:
|
||||
return DEFAULT_DECIMAL128;
|
||||
case DECIMAL256:
|
||||
return DEFAULT_DECIMAL256;
|
||||
case DECIMALV2:
|
||||
return DEFAULT_DECIMALV2;
|
||||
case LARGEINT:
|
||||
@ -385,8 +389,10 @@ public class ScalarType extends Type {
|
||||
return PrimitiveType.DECIMAL32;
|
||||
} else if (precision <= MAX_DECIMAL64_PRECISION) {
|
||||
return PrimitiveType.DECIMAL64;
|
||||
} else {
|
||||
} else if (precision <= MAX_DECIMAL128_PRECISION) {
|
||||
return PrimitiveType.DECIMAL128;
|
||||
} else {
|
||||
return PrimitiveType.DECIMAL256;
|
||||
}
|
||||
}
|
||||
|
||||
@ -469,22 +475,6 @@ public class ScalarType extends Type {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* create a wider decimal type.
|
||||
*/
|
||||
public static ScalarType createWiderDecimalV3Type(int precision, int scale) {
|
||||
ScalarType type = new ScalarType(getSuitableDecimalType(precision, false));
|
||||
if (precision <= MAX_DECIMAL32_PRECISION) {
|
||||
type.precision = MAX_DECIMAL32_PRECISION;
|
||||
} else if (precision <= MAX_DECIMAL64_PRECISION) {
|
||||
type.precision = MAX_DECIMAL64_PRECISION;
|
||||
} else {
|
||||
type.precision = MAX_DECIMAL128_PRECISION;
|
||||
}
|
||||
type.scale = scale;
|
||||
return type;
|
||||
}
|
||||
|
||||
public static ScalarType createVarcharType(int len) {
|
||||
// length checked in analysis
|
||||
ScalarType type = new ScalarType(PrimitiveType.VARCHAR);
|
||||
@ -611,6 +601,7 @@ public class ScalarType extends Type {
|
||||
case DECIMAL32:
|
||||
case DECIMAL64:
|
||||
case DECIMAL128:
|
||||
case DECIMAL256:
|
||||
String typeName = "decimalv3";
|
||||
if (Strings.isNullOrEmpty(precisionStr)) {
|
||||
stringBuilder.append(typeName).append("(").append(precision)
|
||||
@ -701,6 +692,7 @@ public class ScalarType extends Type {
|
||||
case DECIMAL32:
|
||||
case DECIMAL64:
|
||||
case DECIMAL128:
|
||||
case DECIMAL256:
|
||||
case DATETIMEV2: {
|
||||
Preconditions.checkArgument(precision >= scale,
|
||||
String.format("given precision %d is out of scale bound %d", precision, scale));
|
||||
@ -724,14 +716,16 @@ public class ScalarType extends Type {
|
||||
public int decimalPrecision() {
|
||||
Preconditions.checkState(type == PrimitiveType.DECIMALV2 || type == PrimitiveType.DATETIMEV2
|
||||
|| type == PrimitiveType.TIMEV2 || type == PrimitiveType.DECIMAL32
|
||||
|| type == PrimitiveType.DECIMAL64 || type == PrimitiveType.DECIMAL128);
|
||||
|| type == PrimitiveType.DECIMAL64 || type == PrimitiveType.DECIMAL128
|
||||
|| type == PrimitiveType.DECIMAL256);
|
||||
return precision;
|
||||
}
|
||||
|
||||
public int decimalScale() {
|
||||
Preconditions.checkState(type == PrimitiveType.DECIMALV2 || type == PrimitiveType.DATETIMEV2
|
||||
|| type == PrimitiveType.TIMEV2 || type == PrimitiveType.DECIMAL32
|
||||
|| type == PrimitiveType.DECIMAL64 || type == PrimitiveType.DECIMAL128);
|
||||
|| type == PrimitiveType.DECIMAL64 || type == PrimitiveType.DECIMAL128
|
||||
|| type == PrimitiveType.DECIMAL256);
|
||||
return scale;
|
||||
}
|
||||
|
||||
@ -923,53 +917,6 @@ public class ScalarType extends Type {
|
||||
return true;
|
||||
}
|
||||
|
||||
public Type getMaxResolutionType() {
|
||||
if (isIntegerType()) {
|
||||
return ScalarType.BIGINT;
|
||||
// Timestamps get summed as DOUBLE for AVG.
|
||||
} else if (isFloatingPointType()) {
|
||||
return ScalarType.DOUBLE;
|
||||
} else if (isNull()) {
|
||||
return ScalarType.NULL;
|
||||
} else if (isDecimalV2()) {
|
||||
return createDecimalTypeInternal(MAX_PRECISION, scale, true);
|
||||
} else if (getPrimitiveType() == PrimitiveType.DECIMAL32) {
|
||||
return createDecimalTypeInternal(MAX_DECIMAL32_PRECISION, scale, false);
|
||||
} else if (getPrimitiveType() == PrimitiveType.DECIMAL64) {
|
||||
return createDecimalTypeInternal(MAX_DECIMAL64_PRECISION, scale, false);
|
||||
} else if (getPrimitiveType() == PrimitiveType.DECIMAL128) {
|
||||
return createDecimalTypeInternal(MAX_DECIMAL128_PRECISION, scale, false);
|
||||
} else if (isLargeIntType()) {
|
||||
return ScalarType.LARGEINT;
|
||||
} else if (isDatetimeV2()) {
|
||||
return createDatetimeV2Type(6);
|
||||
} else if (isTimeV2()) {
|
||||
return createTimeV2Type(6);
|
||||
} else {
|
||||
return ScalarType.INVALID;
|
||||
}
|
||||
}
|
||||
|
||||
public ScalarType getNextResolutionType() {
|
||||
Preconditions.checkState(isNumericType() || isNull());
|
||||
if (type == PrimitiveType.DOUBLE || type == PrimitiveType.BIGINT || isNull()) {
|
||||
return this;
|
||||
} else if (type == PrimitiveType.DECIMALV2) {
|
||||
return createDecimalTypeInternal(MAX_PRECISION, scale, true);
|
||||
} else if (type == PrimitiveType.DECIMAL32) {
|
||||
return createDecimalTypeInternal(MAX_DECIMAL64_PRECISION, scale, false);
|
||||
} else if (type == PrimitiveType.DECIMAL64) {
|
||||
return createDecimalTypeInternal(MAX_DECIMAL128_PRECISION, scale, false);
|
||||
} else if (type == PrimitiveType.DECIMAL128) {
|
||||
return createDecimalTypeInternal(MAX_DECIMAL128_PRECISION, scale, false);
|
||||
} else if (type == PrimitiveType.DATETIMEV2) {
|
||||
return createDatetimeV2Type(6);
|
||||
} else if (type == PrimitiveType.TIMEV2) {
|
||||
return createTimeV2Type(6);
|
||||
}
|
||||
return createType(PrimitiveType.values()[type.ordinal() + 1]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the smallest decimal type that can safely store this type. Returns
|
||||
* INVALID if this type cannot be stored as a decimal.
|
||||
@ -989,9 +936,9 @@ public class ScalarType extends Type {
|
||||
case BIGINT:
|
||||
return createDecimalType(19);
|
||||
case FLOAT:
|
||||
return createDecimalTypeInternal(MAX_PRECISION, 9, false);
|
||||
return createDecimalTypeInternal(MAX_DECIMAL128_PRECISION, 9, false);
|
||||
case DOUBLE:
|
||||
return createDecimalTypeInternal(MAX_PRECISION, 17, false);
|
||||
return createDecimalTypeInternal(MAX_DECIMAL128_PRECISION, 17, false);
|
||||
default:
|
||||
return ScalarType.INVALID;
|
||||
}
|
||||
|
||||
@ -87,6 +87,10 @@ public abstract class Type {
|
||||
public static final ScalarType DEFAULT_DECIMAL128 =
|
||||
ScalarType.createDecimalType(PrimitiveType.DECIMAL128, ScalarType.MAX_DECIMAL128_PRECISION,
|
||||
ScalarType.DEFAULT_SCALE);
|
||||
|
||||
public static final ScalarType DEFAULT_DECIMAL256 =
|
||||
ScalarType.createDecimalType(PrimitiveType.DECIMAL256, ScalarType.MAX_DECIMAL256_PRECISION,
|
||||
ScalarType.DEFAULT_SCALE);
|
||||
public static final ScalarType DEFAULT_DECIMALV3 = DEFAULT_DECIMAL32;
|
||||
public static final ScalarType DEFAULT_DATETIMEV2 = ScalarType.createDatetimeV2Type(0);
|
||||
public static final ScalarType DATETIMEV2 = DEFAULT_DATETIMEV2;
|
||||
@ -96,6 +100,7 @@ public abstract class Type {
|
||||
public static final ScalarType DECIMAL32 = DEFAULT_DECIMAL32;
|
||||
public static final ScalarType DECIMAL64 = DEFAULT_DECIMAL64;
|
||||
public static final ScalarType DECIMAL128 = DEFAULT_DECIMAL128;
|
||||
public static final ScalarType DECIMAL256 = DEFAULT_DECIMAL256;
|
||||
public static final ScalarType JSONB = new ScalarType(PrimitiveType.JSONB);
|
||||
// (ScalarType) ScalarType.createDecimalTypeInternal(-1, -1);
|
||||
public static final ScalarType DEFAULT_VARCHAR = ScalarType.createVarcharType(-1);
|
||||
@ -149,6 +154,7 @@ public abstract class Type {
|
||||
numericTypes.add(DECIMAL32);
|
||||
numericTypes.add(DECIMAL64);
|
||||
numericTypes.add(DECIMAL128);
|
||||
numericTypes.add(DECIMAL256);
|
||||
|
||||
numericDateTimeTypes = Lists.newArrayList();
|
||||
numericDateTimeTypes.add(DATE);
|
||||
@ -391,7 +397,7 @@ public abstract class Type {
|
||||
|
||||
public boolean isDecimalV3() {
|
||||
return isScalarType(PrimitiveType.DECIMAL32) || isScalarType(PrimitiveType.DECIMAL64)
|
||||
|| isScalarType(PrimitiveType.DECIMAL128);
|
||||
|| isScalarType(PrimitiveType.DECIMAL128) || isScalarType(PrimitiveType.DECIMAL256);
|
||||
}
|
||||
|
||||
public boolean isDatetimeV2() {
|
||||
@ -975,7 +981,8 @@ public abstract class Type {
|
||||
scalarType.getScale());
|
||||
} else if (scalarType.getType() == TPrimitiveType.DECIMAL32
|
||||
|| scalarType.getType() == TPrimitiveType.DECIMAL64
|
||||
|| scalarType.getType() == TPrimitiveType.DECIMAL128I) {
|
||||
|| scalarType.getType() == TPrimitiveType.DECIMAL128I
|
||||
|| scalarType.getType() == TPrimitiveType.DECIMAL256) {
|
||||
Preconditions.checkState(scalarType.isSetPrecision()
|
||||
&& scalarType.isSetScale());
|
||||
type = ScalarType.createDecimalV3Type(scalarType.getPrecision(),
|
||||
@ -1130,6 +1137,7 @@ public abstract class Type {
|
||||
case DECIMAL32:
|
||||
case DECIMAL64:
|
||||
case DECIMAL128:
|
||||
case DECIMAL256:
|
||||
case DATETIMEV2:
|
||||
case TIMEV2:
|
||||
return t.decimalPrecision();
|
||||
@ -1166,6 +1174,7 @@ public abstract class Type {
|
||||
case DECIMAL32:
|
||||
case DECIMAL64:
|
||||
case DECIMAL128:
|
||||
case DECIMAL256:
|
||||
return t.decimalScale();
|
||||
default:
|
||||
return null;
|
||||
@ -1200,6 +1209,7 @@ public abstract class Type {
|
||||
case DECIMAL32:
|
||||
case DECIMAL64:
|
||||
case DECIMAL128:
|
||||
case DECIMAL256:
|
||||
return 10;
|
||||
default:
|
||||
// everything else (including boolean and string) is null
|
||||
@ -1267,6 +1277,7 @@ public abstract class Type {
|
||||
compatibilityMatrix[BOOLEAN.ordinal()][DECIMAL32.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[BOOLEAN.ordinal()][DECIMAL64.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[BOOLEAN.ordinal()][DECIMAL128.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[BOOLEAN.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[BOOLEAN.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
|
||||
// TINYINT
|
||||
@ -1288,6 +1299,7 @@ public abstract class Type {
|
||||
compatibilityMatrix[TINYINT.ordinal()][DECIMAL32.ordinal()] = PrimitiveType.DECIMAL32;
|
||||
compatibilityMatrix[TINYINT.ordinal()][DECIMAL64.ordinal()] = PrimitiveType.DECIMAL64;
|
||||
compatibilityMatrix[TINYINT.ordinal()][DECIMAL128.ordinal()] = PrimitiveType.DECIMAL128;
|
||||
compatibilityMatrix[TINYINT.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.DECIMAL256;
|
||||
compatibilityMatrix[TINYINT.ordinal()][HLL.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[TINYINT.ordinal()][TIME.ordinal()] = PrimitiveType.DOUBLE;
|
||||
compatibilityMatrix[TINYINT.ordinal()][BITMAP.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
@ -1315,6 +1327,7 @@ public abstract class Type {
|
||||
compatibilityMatrix[SMALLINT.ordinal()][DECIMAL32.ordinal()] = PrimitiveType.DECIMAL32;
|
||||
compatibilityMatrix[SMALLINT.ordinal()][DECIMAL64.ordinal()] = PrimitiveType.DECIMAL64;
|
||||
compatibilityMatrix[SMALLINT.ordinal()][DECIMAL128.ordinal()] = PrimitiveType.DECIMAL128;
|
||||
compatibilityMatrix[SMALLINT.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.DECIMAL256;
|
||||
compatibilityMatrix[SMALLINT.ordinal()][HLL.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[SMALLINT.ordinal()][TIME.ordinal()] = PrimitiveType.DOUBLE;
|
||||
compatibilityMatrix[SMALLINT.ordinal()][BITMAP.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
@ -1345,6 +1358,7 @@ public abstract class Type {
|
||||
compatibilityMatrix[INT.ordinal()][DECIMAL32.ordinal()] = PrimitiveType.DECIMAL32;
|
||||
compatibilityMatrix[INT.ordinal()][DECIMAL64.ordinal()] = PrimitiveType.DECIMAL64;
|
||||
compatibilityMatrix[INT.ordinal()][DECIMAL128.ordinal()] = PrimitiveType.DECIMAL128;
|
||||
compatibilityMatrix[INT.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.DECIMAL256;
|
||||
compatibilityMatrix[INT.ordinal()][HLL.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[INT.ordinal()][TIME.ordinal()] = PrimitiveType.DOUBLE;
|
||||
compatibilityMatrix[INT.ordinal()][BITMAP.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
@ -1376,6 +1390,7 @@ public abstract class Type {
|
||||
compatibilityMatrix[BIGINT.ordinal()][DECIMAL32.ordinal()] = PrimitiveType.DECIMAL64;
|
||||
compatibilityMatrix[BIGINT.ordinal()][DECIMAL64.ordinal()] = PrimitiveType.DECIMAL64;
|
||||
compatibilityMatrix[BIGINT.ordinal()][DECIMAL128.ordinal()] = PrimitiveType.DECIMAL128;
|
||||
compatibilityMatrix[BIGINT.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.DECIMAL256;
|
||||
compatibilityMatrix[BIGINT.ordinal()][HLL.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[BIGINT.ordinal()][TIME.ordinal()] = PrimitiveType.DOUBLE;
|
||||
compatibilityMatrix[BIGINT.ordinal()][BITMAP.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
@ -1399,6 +1414,7 @@ public abstract class Type {
|
||||
compatibilityMatrix[LARGEINT.ordinal()][DECIMAL32.ordinal()] = PrimitiveType.DECIMAL128;
|
||||
compatibilityMatrix[LARGEINT.ordinal()][DECIMAL64.ordinal()] = PrimitiveType.DECIMAL128;
|
||||
compatibilityMatrix[LARGEINT.ordinal()][DECIMAL128.ordinal()] = PrimitiveType.DECIMAL128;
|
||||
compatibilityMatrix[LARGEINT.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.DECIMAL256;
|
||||
compatibilityMatrix[LARGEINT.ordinal()][HLL.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[LARGEINT.ordinal()][TIME.ordinal()] = PrimitiveType.DOUBLE;
|
||||
compatibilityMatrix[LARGEINT.ordinal()][BITMAP.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
@ -1421,6 +1437,7 @@ public abstract class Type {
|
||||
compatibilityMatrix[FLOAT.ordinal()][DECIMAL32.ordinal()] = PrimitiveType.DECIMAL128;
|
||||
compatibilityMatrix[FLOAT.ordinal()][DECIMAL64.ordinal()] = PrimitiveType.DECIMAL128;
|
||||
compatibilityMatrix[FLOAT.ordinal()][DECIMAL128.ordinal()] = PrimitiveType.DECIMAL128;
|
||||
compatibilityMatrix[FLOAT.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.DECIMAL256;
|
||||
compatibilityMatrix[FLOAT.ordinal()][HLL.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[FLOAT.ordinal()][TIME.ordinal()] = PrimitiveType.DOUBLE;
|
||||
compatibilityMatrix[FLOAT.ordinal()][BITMAP.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
@ -1439,6 +1456,7 @@ public abstract class Type {
|
||||
compatibilityMatrix[DOUBLE.ordinal()][DECIMAL32.ordinal()] = PrimitiveType.DECIMAL128;
|
||||
compatibilityMatrix[DOUBLE.ordinal()][DECIMAL64.ordinal()] = PrimitiveType.DECIMAL128;
|
||||
compatibilityMatrix[DOUBLE.ordinal()][DECIMAL128.ordinal()] = PrimitiveType.DECIMAL128;
|
||||
compatibilityMatrix[DOUBLE.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.DECIMAL256;
|
||||
compatibilityMatrix[DOUBLE.ordinal()][HLL.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[DOUBLE.ordinal()][TIME.ordinal()] = PrimitiveType.DOUBLE;
|
||||
compatibilityMatrix[DOUBLE.ordinal()][BITMAP.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
@ -1461,6 +1479,7 @@ public abstract class Type {
|
||||
compatibilityMatrix[DATE.ordinal()][DECIMAL32.ordinal()] = PrimitiveType.DECIMAL32;
|
||||
compatibilityMatrix[DATE.ordinal()][DECIMAL64.ordinal()] = PrimitiveType.DECIMAL64;
|
||||
compatibilityMatrix[DATE.ordinal()][DECIMAL128.ordinal()] = PrimitiveType.DECIMAL128;
|
||||
compatibilityMatrix[DATE.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.DECIMAL256;
|
||||
compatibilityMatrix[DATE.ordinal()][HLL.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[DATE.ordinal()][TIME.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[DATE.ordinal()][TIMEV2.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
@ -1481,6 +1500,7 @@ public abstract class Type {
|
||||
compatibilityMatrix[DATEV2.ordinal()][DECIMAL32.ordinal()] = PrimitiveType.DECIMAL32;
|
||||
compatibilityMatrix[DATEV2.ordinal()][DECIMAL64.ordinal()] = PrimitiveType.DECIMAL64;
|
||||
compatibilityMatrix[DATEV2.ordinal()][DECIMAL128.ordinal()] = PrimitiveType.DECIMAL128;
|
||||
compatibilityMatrix[DATEV2.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.DECIMAL256;
|
||||
compatibilityMatrix[DATEV2.ordinal()][HLL.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[DATEV2.ordinal()][TIME.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[DATEV2.ordinal()][TIMEV2.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
@ -1500,6 +1520,7 @@ public abstract class Type {
|
||||
compatibilityMatrix[DATETIME.ordinal()][DECIMAL32.ordinal()] = PrimitiveType.DECIMAL64;
|
||||
compatibilityMatrix[DATETIME.ordinal()][DECIMAL64.ordinal()] = PrimitiveType.DECIMAL64;
|
||||
compatibilityMatrix[DATETIME.ordinal()][DECIMAL128.ordinal()] = PrimitiveType.DECIMAL128;
|
||||
compatibilityMatrix[DATETIME.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.DECIMAL256;
|
||||
compatibilityMatrix[DATETIME.ordinal()][HLL.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[DATETIME.ordinal()][TIME.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[DATETIME.ordinal()][TIMEV2.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
@ -1519,6 +1540,7 @@ public abstract class Type {
|
||||
compatibilityMatrix[DATETIMEV2.ordinal()][DECIMAL32.ordinal()] = PrimitiveType.DECIMAL64;
|
||||
compatibilityMatrix[DATETIMEV2.ordinal()][DECIMAL64.ordinal()] = PrimitiveType.DECIMAL64;
|
||||
compatibilityMatrix[DATETIMEV2.ordinal()][DECIMAL128.ordinal()] = PrimitiveType.DECIMAL128;
|
||||
compatibilityMatrix[DATETIMEV2.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.DECIMAL256;
|
||||
compatibilityMatrix[DATETIMEV2.ordinal()][HLL.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[DATETIMEV2.ordinal()][TIME.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[DATETIMEV2.ordinal()][TIMEV2.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
@ -1538,6 +1560,7 @@ public abstract class Type {
|
||||
compatibilityMatrix[CHAR.ordinal()][DECIMAL32.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[CHAR.ordinal()][DECIMAL64.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[CHAR.ordinal()][DECIMAL128.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[CHAR.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[CHAR.ordinal()][HLL.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[CHAR.ordinal()][TIME.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[CHAR.ordinal()][TIMEV2.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
@ -1553,6 +1576,7 @@ public abstract class Type {
|
||||
compatibilityMatrix[VARCHAR.ordinal()][DECIMAL32.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[VARCHAR.ordinal()][DECIMAL64.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[VARCHAR.ordinal()][DECIMAL128.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[VARCHAR.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[VARCHAR.ordinal()][HLL.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[VARCHAR.ordinal()][TIME.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[VARCHAR.ordinal()][TIMEV2.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
@ -1576,6 +1600,7 @@ public abstract class Type {
|
||||
compatibilityMatrix[STRING.ordinal()][DECIMAL32.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[STRING.ordinal()][DECIMAL64.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[STRING.ordinal()][DECIMAL128.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[STRING.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[STRING.ordinal()][JSONB.ordinal()] = PrimitiveType.STRING;
|
||||
compatibilityMatrix[STRING.ordinal()][VARIANT.ordinal()] = PrimitiveType.STRING;
|
||||
compatibilityMatrix[STRING.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
@ -1585,6 +1610,7 @@ public abstract class Type {
|
||||
compatibilityMatrix[JSONB.ordinal()][DECIMAL32.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[JSONB.ordinal()][DECIMAL64.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[JSONB.ordinal()][DECIMAL128.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[JSONB.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[JSONB.ordinal()][HLL.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[JSONB.ordinal()][TIME.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[JSONB.ordinal()][TIMEV2.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
@ -1601,6 +1627,7 @@ public abstract class Type {
|
||||
compatibilityMatrix[VARIANT.ordinal()][DECIMAL32.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[VARIANT.ordinal()][DECIMAL64.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[VARIANT.ordinal()][DECIMAL128.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[VARIANT.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[VARIANT.ordinal()][HLL.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[VARIANT.ordinal()][TIME.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[VARIANT.ordinal()][TIMEV2.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
@ -1627,6 +1654,7 @@ public abstract class Type {
|
||||
compatibilityMatrix[DECIMALV2.ordinal()][DECIMAL32.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[DECIMALV2.ordinal()][DECIMAL64.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[DECIMALV2.ordinal()][DECIMAL128.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[DECIMALV2.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[DECIMALV2.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
|
||||
// DECIMAL32
|
||||
@ -1642,6 +1670,7 @@ public abstract class Type {
|
||||
compatibilityMatrix[DECIMAL32.ordinal()][DECIMALV2.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[DECIMAL32.ordinal()][DECIMAL64.ordinal()] = PrimitiveType.DECIMAL64;
|
||||
compatibilityMatrix[DECIMAL32.ordinal()][DECIMAL128.ordinal()] = PrimitiveType.DECIMAL128;
|
||||
compatibilityMatrix[DECIMAL32.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.DECIMAL256;
|
||||
compatibilityMatrix[DECIMAL32.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
|
||||
// DECIMAL64
|
||||
@ -1657,6 +1686,7 @@ public abstract class Type {
|
||||
compatibilityMatrix[DECIMAL64.ordinal()][DECIMALV2.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[DECIMAL64.ordinal()][DECIMAL32.ordinal()] = PrimitiveType.DECIMAL64;
|
||||
compatibilityMatrix[DECIMAL64.ordinal()][DECIMAL128.ordinal()] = PrimitiveType.DECIMAL128;
|
||||
compatibilityMatrix[DECIMAL64.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.DECIMAL256;
|
||||
compatibilityMatrix[DECIMAL64.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
|
||||
// DECIMAL128
|
||||
@ -1672,8 +1702,24 @@ public abstract class Type {
|
||||
compatibilityMatrix[DECIMAL128.ordinal()][DECIMALV2.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[DECIMAL128.ordinal()][DECIMAL32.ordinal()] = PrimitiveType.DECIMAL128;
|
||||
compatibilityMatrix[DECIMAL128.ordinal()][DECIMAL64.ordinal()] = PrimitiveType.DECIMAL128;
|
||||
compatibilityMatrix[DECIMAL128.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.DECIMAL256;
|
||||
compatibilityMatrix[DECIMAL128.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
|
||||
// DECIMAL256
|
||||
compatibilityMatrix[DECIMAL256.ordinal()][HLL.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[DECIMAL256.ordinal()][TIME.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[DECIMAL256.ordinal()][TIMEV2.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[DECIMAL256.ordinal()][DATEV2.ordinal()] = PrimitiveType.DECIMAL256;
|
||||
compatibilityMatrix[DECIMAL256.ordinal()][DATETIMEV2.ordinal()] = PrimitiveType.DECIMAL256;
|
||||
compatibilityMatrix[DECIMAL256.ordinal()][BITMAP.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[DECIMAL256.ordinal()][STRING.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[DECIMAL256.ordinal()][QUANTILE_STATE.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[DECIMAL256.ordinal()][DECIMALV2.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[DECIMAL256.ordinal()][DECIMAL32.ordinal()] = PrimitiveType.DECIMAL256;
|
||||
compatibilityMatrix[DECIMAL256.ordinal()][DECIMAL64.ordinal()] = PrimitiveType.DECIMAL256;
|
||||
compatibilityMatrix[DECIMAL256.ordinal()][DECIMAL128.ordinal()] = PrimitiveType.DECIMAL256;
|
||||
compatibilityMatrix[DECIMAL256.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
|
||||
// HLL
|
||||
compatibilityMatrix[HLL.ordinal()][TIME.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[HLL.ordinal()][TIMEV2.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
@ -1687,6 +1733,7 @@ public abstract class Type {
|
||||
compatibilityMatrix[HLL.ordinal()][DECIMAL32.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[HLL.ordinal()][DECIMAL64.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[HLL.ordinal()][DECIMAL128.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[HLL.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[HLL.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
|
||||
|
||||
@ -1702,6 +1749,7 @@ public abstract class Type {
|
||||
compatibilityMatrix[BITMAP.ordinal()][DECIMAL32.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[BITMAP.ordinal()][DECIMAL64.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[BITMAP.ordinal()][DECIMAL128.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[BITMAP.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[BITMAP.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
|
||||
//QUANTILE_STATE
|
||||
@ -1713,6 +1761,7 @@ public abstract class Type {
|
||||
compatibilityMatrix[QUANTILE_STATE.ordinal()][DECIMAL32.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[QUANTILE_STATE.ordinal()][DECIMAL64.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[QUANTILE_STATE.ordinal()][DECIMAL128.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[QUANTILE_STATE.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[QUANTILE_STATE.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
|
||||
//AGG_STATE
|
||||
@ -1724,6 +1773,7 @@ public abstract class Type {
|
||||
compatibilityMatrix[AGG_STATE.ordinal()][DECIMAL32.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[AGG_STATE.ordinal()][DECIMAL64.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[AGG_STATE.ordinal()][DECIMAL128.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[AGG_STATE.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
|
||||
// TIME why here not???
|
||||
compatibilityMatrix[TIME.ordinal()][TIME.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
@ -1731,6 +1781,7 @@ public abstract class Type {
|
||||
compatibilityMatrix[TIME.ordinal()][DECIMAL32.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[TIME.ordinal()][DECIMAL64.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[TIME.ordinal()][DECIMAL128.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[TIME.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[TIME.ordinal()][DATEV2.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[TIME.ordinal()][DATETIMEV2.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[TIME.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
@ -1740,6 +1791,7 @@ public abstract class Type {
|
||||
compatibilityMatrix[TIMEV2.ordinal()][DECIMAL32.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[TIMEV2.ordinal()][DECIMAL64.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[TIMEV2.ordinal()][DECIMAL128.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[TIMEV2.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
compatibilityMatrix[TIMEV2.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE;
|
||||
|
||||
// Check all of the necessary entries that should be filled.
|
||||
@ -1801,6 +1853,8 @@ public abstract class Type {
|
||||
return DECIMAL64;
|
||||
case DECIMAL128:
|
||||
return DECIMAL128;
|
||||
case DECIMAL256:
|
||||
return DECIMAL256;
|
||||
case STRING:
|
||||
return STRING;
|
||||
case JSONB:
|
||||
@ -1948,11 +2002,6 @@ public abstract class Type {
|
||||
}
|
||||
}
|
||||
|
||||
public Type getMaxResolutionType() {
|
||||
Preconditions.checkState(true, "must implemented");
|
||||
return null;
|
||||
}
|
||||
|
||||
public Type getNumResultType() {
|
||||
switch (getPrimitiveType()) {
|
||||
case BOOLEAN:
|
||||
@ -1984,6 +2033,8 @@ public abstract class Type {
|
||||
return Type.DECIMAL64;
|
||||
case DECIMAL128:
|
||||
return Type.DECIMAL128;
|
||||
case DECIMAL256:
|
||||
return Type.DECIMAL256;
|
||||
default:
|
||||
return Type.INVALID;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user