[minor](catalog) remove useless compatibilityMatrix in catalog PrimitiveType (#24999)
This commit is contained in:
@ -20,7 +20,6 @@ package org.apache.doris.catalog;
|
||||
import org.apache.doris.common.Config;
|
||||
import org.apache.doris.thrift.TPrimitiveType;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.ImmutableSetMultimap;
|
||||
import com.google.common.collect.Lists;
|
||||
@ -88,7 +87,7 @@ public enum PrimitiveType {
|
||||
private static final int STRING_INDEX_LEN = 20;
|
||||
private static final int DECIMAL_INDEX_LEN = 12;
|
||||
|
||||
public static ImmutableSet<PrimitiveType> typeWithPrecision;
|
||||
public static final ImmutableSet<PrimitiveType> typeWithPrecision;
|
||||
|
||||
static {
|
||||
ImmutableSet.Builder<PrimitiveType> builder = ImmutableSet.builder();
|
||||
@ -99,7 +98,7 @@ public enum PrimitiveType {
|
||||
typeWithPrecision = builder.build();
|
||||
}
|
||||
|
||||
private static ImmutableSetMultimap<PrimitiveType, PrimitiveType> implicitCastMap;
|
||||
private static final ImmutableSetMultimap<PrimitiveType, PrimitiveType> implicitCastMap;
|
||||
|
||||
public static ImmutableSetMultimap<PrimitiveType, PrimitiveType> getImplicitCastMap() {
|
||||
return implicitCastMap;
|
||||
@ -552,9 +551,9 @@ public enum PrimitiveType {
|
||||
implicitCastMap = builder.build();
|
||||
}
|
||||
|
||||
private static ArrayList<PrimitiveType> integerTypes;
|
||||
private static ArrayList<PrimitiveType> numericTypes;
|
||||
private static ArrayList<PrimitiveType> supportedTypes;
|
||||
private static final ArrayList<PrimitiveType> integerTypes;
|
||||
private static final ArrayList<PrimitiveType> numericTypes;
|
||||
private static final ArrayList<PrimitiveType> supportedTypes;
|
||||
|
||||
static {
|
||||
integerTypes = Lists.newArrayList();
|
||||
@ -627,379 +626,13 @@ public enum PrimitiveType {
|
||||
return implicitCastMap.get(type).contains(target);
|
||||
}
|
||||
|
||||
/**
|
||||
* Matrix that records "smallest" assignment-compatible type of two types
|
||||
* (INVALID_TYPE if no such type exists, ie, if the input types are fundamentally
|
||||
* incompatible). A value of any of the two types could be assigned to a slot
|
||||
* of the assignment-compatible type without loss of precision.
|
||||
* <p/>
|
||||
* We chose not to follow MySQL's type casting behavior as described here:
|
||||
* http://dev.mysql.com/doc/refman/5.0/en/type-conversion.html
|
||||
* for the following reasons:
|
||||
* conservative casting in arithmetic exprs: TINYINT + TINYINT -> BIGINT
|
||||
* comparison of many types as double: INT < FLOAT -> comparison as DOUBLE
|
||||
* special cases when dealing with dates and timestamps
|
||||
*/
|
||||
private static PrimitiveType[][] compatibilityMatrix;
|
||||
|
||||
static {
|
||||
compatibilityMatrix = new PrimitiveType[PrimitiveType.values().length][PrimitiveType.values().length];
|
||||
|
||||
// NULL_TYPE is compatible with any type and results in the non-null type.
|
||||
compatibilityMatrix[NULL_TYPE.ordinal()][NULL_TYPE.ordinal()] = NULL_TYPE;
|
||||
compatibilityMatrix[NULL_TYPE.ordinal()][BOOLEAN.ordinal()] = BOOLEAN;
|
||||
compatibilityMatrix[NULL_TYPE.ordinal()][TINYINT.ordinal()] = TINYINT;
|
||||
compatibilityMatrix[NULL_TYPE.ordinal()][SMALLINT.ordinal()] = SMALLINT;
|
||||
compatibilityMatrix[NULL_TYPE.ordinal()][INT.ordinal()] = INT;
|
||||
compatibilityMatrix[NULL_TYPE.ordinal()][BIGINT.ordinal()] = BIGINT;
|
||||
compatibilityMatrix[NULL_TYPE.ordinal()][LARGEINT.ordinal()] = LARGEINT;
|
||||
compatibilityMatrix[NULL_TYPE.ordinal()][FLOAT.ordinal()] = FLOAT;
|
||||
compatibilityMatrix[NULL_TYPE.ordinal()][DOUBLE.ordinal()] = DOUBLE;
|
||||
compatibilityMatrix[NULL_TYPE.ordinal()][DATE.ordinal()] = DATE;
|
||||
compatibilityMatrix[NULL_TYPE.ordinal()][DATETIME.ordinal()] = DATETIME;
|
||||
compatibilityMatrix[NULL_TYPE.ordinal()][DATEV2.ordinal()] = DATEV2;
|
||||
compatibilityMatrix[NULL_TYPE.ordinal()][DATETIMEV2.ordinal()] = DATETIMEV2;
|
||||
compatibilityMatrix[NULL_TYPE.ordinal()][CHAR.ordinal()] = CHAR;
|
||||
compatibilityMatrix[NULL_TYPE.ordinal()][VARCHAR.ordinal()] = VARCHAR;
|
||||
compatibilityMatrix[NULL_TYPE.ordinal()][JSONB.ordinal()] = JSONB;
|
||||
compatibilityMatrix[NULL_TYPE.ordinal()][VARIANT.ordinal()] = VARIANT;
|
||||
compatibilityMatrix[NULL_TYPE.ordinal()][STRING.ordinal()] = STRING;
|
||||
compatibilityMatrix[NULL_TYPE.ordinal()][DECIMALV2.ordinal()] = DECIMALV2;
|
||||
compatibilityMatrix[NULL_TYPE.ordinal()][DECIMAL32.ordinal()] = DECIMAL32;
|
||||
compatibilityMatrix[NULL_TYPE.ordinal()][DECIMAL64.ordinal()] = DECIMAL64;
|
||||
compatibilityMatrix[NULL_TYPE.ordinal()][DECIMAL128.ordinal()] = DECIMAL128;
|
||||
compatibilityMatrix[NULL_TYPE.ordinal()][TIME.ordinal()] = TIME;
|
||||
compatibilityMatrix[NULL_TYPE.ordinal()][TIMEV2.ordinal()] = TIMEV2;
|
||||
compatibilityMatrix[NULL_TYPE.ordinal()][BITMAP.ordinal()] = BITMAP;
|
||||
compatibilityMatrix[NULL_TYPE.ordinal()][QUANTILE_STATE.ordinal()] = QUANTILE_STATE;
|
||||
compatibilityMatrix[NULL_TYPE.ordinal()][AGG_STATE.ordinal()] = AGG_STATE;
|
||||
|
||||
compatibilityMatrix[BOOLEAN.ordinal()][BOOLEAN.ordinal()] = BOOLEAN;
|
||||
compatibilityMatrix[BOOLEAN.ordinal()][TINYINT.ordinal()] = TINYINT;
|
||||
compatibilityMatrix[BOOLEAN.ordinal()][SMALLINT.ordinal()] = SMALLINT;
|
||||
compatibilityMatrix[BOOLEAN.ordinal()][INT.ordinal()] = INT;
|
||||
compatibilityMatrix[BOOLEAN.ordinal()][BIGINT.ordinal()] = BIGINT;
|
||||
compatibilityMatrix[BOOLEAN.ordinal()][LARGEINT.ordinal()] = LARGEINT;
|
||||
compatibilityMatrix[BOOLEAN.ordinal()][FLOAT.ordinal()] = FLOAT;
|
||||
compatibilityMatrix[BOOLEAN.ordinal()][DOUBLE.ordinal()] = DOUBLE;
|
||||
compatibilityMatrix[BOOLEAN.ordinal()][DATE.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[BOOLEAN.ordinal()][DATETIME.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[BOOLEAN.ordinal()][DATEV2.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[BOOLEAN.ordinal()][DATETIMEV2.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[BOOLEAN.ordinal()][CHAR.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[BOOLEAN.ordinal()][VARCHAR.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[BOOLEAN.ordinal()][JSONB.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[BOOLEAN.ordinal()][VARIANT.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[BOOLEAN.ordinal()][STRING.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[BOOLEAN.ordinal()][DECIMALV2.ordinal()] = DECIMALV2;
|
||||
compatibilityMatrix[BOOLEAN.ordinal()][DECIMAL32.ordinal()] = DECIMAL32;
|
||||
compatibilityMatrix[BOOLEAN.ordinal()][DECIMAL64.ordinal()] = DECIMAL64;
|
||||
compatibilityMatrix[BOOLEAN.ordinal()][DECIMAL128.ordinal()] = DECIMAL128;
|
||||
compatibilityMatrix[BOOLEAN.ordinal()][TIME.ordinal()] = TIME;
|
||||
compatibilityMatrix[BOOLEAN.ordinal()][TIMEV2.ordinal()] = TIMEV2;
|
||||
|
||||
compatibilityMatrix[TINYINT.ordinal()][TINYINT.ordinal()] = TINYINT;
|
||||
compatibilityMatrix[TINYINT.ordinal()][SMALLINT.ordinal()] = SMALLINT;
|
||||
compatibilityMatrix[TINYINT.ordinal()][INT.ordinal()] = INT;
|
||||
compatibilityMatrix[TINYINT.ordinal()][BIGINT.ordinal()] = BIGINT;
|
||||
compatibilityMatrix[TINYINT.ordinal()][LARGEINT.ordinal()] = LARGEINT;
|
||||
compatibilityMatrix[TINYINT.ordinal()][FLOAT.ordinal()] = FLOAT;
|
||||
compatibilityMatrix[TINYINT.ordinal()][DOUBLE.ordinal()] = DOUBLE;
|
||||
compatibilityMatrix[TINYINT.ordinal()][DATE.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[TINYINT.ordinal()][DATETIME.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[TINYINT.ordinal()][DATEV2.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[TINYINT.ordinal()][DATETIMEV2.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[TINYINT.ordinal()][CHAR.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[TINYINT.ordinal()][VARCHAR.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[TINYINT.ordinal()][JSONB.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[TINYINT.ordinal()][VARIANT.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[TINYINT.ordinal()][STRING.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[TINYINT.ordinal()][DECIMALV2.ordinal()] = DECIMALV2;
|
||||
compatibilityMatrix[TINYINT.ordinal()][DECIMAL32.ordinal()] = DECIMAL32;
|
||||
compatibilityMatrix[TINYINT.ordinal()][DECIMAL64.ordinal()] = DECIMAL64;
|
||||
compatibilityMatrix[TINYINT.ordinal()][DECIMAL128.ordinal()] = DECIMAL128;
|
||||
compatibilityMatrix[TINYINT.ordinal()][TIME.ordinal()] = TIME;
|
||||
compatibilityMatrix[TINYINT.ordinal()][TIMEV2.ordinal()] = TIMEV2;
|
||||
|
||||
compatibilityMatrix[SMALLINT.ordinal()][SMALLINT.ordinal()] = SMALLINT;
|
||||
compatibilityMatrix[SMALLINT.ordinal()][INT.ordinal()] = INT;
|
||||
compatibilityMatrix[SMALLINT.ordinal()][BIGINT.ordinal()] = BIGINT;
|
||||
compatibilityMatrix[SMALLINT.ordinal()][LARGEINT.ordinal()] = LARGEINT;
|
||||
compatibilityMatrix[SMALLINT.ordinal()][FLOAT.ordinal()] = FLOAT;
|
||||
compatibilityMatrix[SMALLINT.ordinal()][DOUBLE.ordinal()] = DOUBLE;
|
||||
compatibilityMatrix[SMALLINT.ordinal()][DATE.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[SMALLINT.ordinal()][DATETIME.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[SMALLINT.ordinal()][DATEV2.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[SMALLINT.ordinal()][DATETIMEV2.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[SMALLINT.ordinal()][CHAR.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[SMALLINT.ordinal()][VARCHAR.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[SMALLINT.ordinal()][JSONB.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[SMALLINT.ordinal()][VARIANT.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[SMALLINT.ordinal()][STRING.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[SMALLINT.ordinal()][DECIMALV2.ordinal()] = DECIMALV2;
|
||||
compatibilityMatrix[SMALLINT.ordinal()][DECIMAL32.ordinal()] = DECIMAL32;
|
||||
compatibilityMatrix[SMALLINT.ordinal()][DECIMAL64.ordinal()] = DECIMAL64;
|
||||
compatibilityMatrix[SMALLINT.ordinal()][DECIMAL128.ordinal()] = DECIMAL128;
|
||||
compatibilityMatrix[SMALLINT.ordinal()][TIME.ordinal()] = TIME;
|
||||
compatibilityMatrix[SMALLINT.ordinal()][TIMEV2.ordinal()] = TIMEV2;
|
||||
|
||||
compatibilityMatrix[INT.ordinal()][INT.ordinal()] = INT;
|
||||
compatibilityMatrix[INT.ordinal()][BIGINT.ordinal()] = BIGINT;
|
||||
compatibilityMatrix[INT.ordinal()][LARGEINT.ordinal()] = LARGEINT;
|
||||
compatibilityMatrix[INT.ordinal()][FLOAT.ordinal()] = FLOAT;
|
||||
compatibilityMatrix[INT.ordinal()][DOUBLE.ordinal()] = DOUBLE;
|
||||
compatibilityMatrix[INT.ordinal()][DATE.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[INT.ordinal()][DATETIME.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[INT.ordinal()][DATEV2.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[INT.ordinal()][DATETIMEV2.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[INT.ordinal()][CHAR.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[INT.ordinal()][VARCHAR.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[INT.ordinal()][JSONB.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[INT.ordinal()][VARIANT.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[INT.ordinal()][STRING.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[INT.ordinal()][DECIMALV2.ordinal()] = DECIMALV2;
|
||||
compatibilityMatrix[INT.ordinal()][DECIMAL32.ordinal()] = DECIMAL32;
|
||||
compatibilityMatrix[INT.ordinal()][DECIMAL64.ordinal()] = DECIMAL64;
|
||||
compatibilityMatrix[INT.ordinal()][DECIMAL128.ordinal()] = DECIMAL128;
|
||||
compatibilityMatrix[INT.ordinal()][TIME.ordinal()] = TIME;
|
||||
compatibilityMatrix[INT.ordinal()][TIMEV2.ordinal()] = TIMEV2;
|
||||
|
||||
compatibilityMatrix[BIGINT.ordinal()][BIGINT.ordinal()] = BIGINT;
|
||||
compatibilityMatrix[BIGINT.ordinal()][LARGEINT.ordinal()] = LARGEINT;
|
||||
compatibilityMatrix[BIGINT.ordinal()][FLOAT.ordinal()] = DOUBLE;
|
||||
compatibilityMatrix[BIGINT.ordinal()][DOUBLE.ordinal()] = DOUBLE;
|
||||
compatibilityMatrix[BIGINT.ordinal()][DATE.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[BIGINT.ordinal()][DATETIME.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[BIGINT.ordinal()][DATEV2.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[BIGINT.ordinal()][DATETIMEV2.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[BIGINT.ordinal()][CHAR.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[BIGINT.ordinal()][VARCHAR.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[BIGINT.ordinal()][JSONB.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[BIGINT.ordinal()][VARIANT.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[BIGINT.ordinal()][STRING.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[BIGINT.ordinal()][DECIMALV2.ordinal()] = DECIMALV2;
|
||||
compatibilityMatrix[BIGINT.ordinal()][DECIMAL32.ordinal()] = DECIMAL32;
|
||||
compatibilityMatrix[BIGINT.ordinal()][DECIMAL64.ordinal()] = DECIMAL64;
|
||||
compatibilityMatrix[BIGINT.ordinal()][DECIMAL128.ordinal()] = DECIMAL128;
|
||||
compatibilityMatrix[BIGINT.ordinal()][TIME.ordinal()] = TIME;
|
||||
compatibilityMatrix[BIGINT.ordinal()][TIMEV2.ordinal()] = TIMEV2;
|
||||
|
||||
compatibilityMatrix[LARGEINT.ordinal()][LARGEINT.ordinal()] = LARGEINT;
|
||||
compatibilityMatrix[LARGEINT.ordinal()][FLOAT.ordinal()] = DOUBLE;
|
||||
compatibilityMatrix[LARGEINT.ordinal()][DOUBLE.ordinal()] = DOUBLE;
|
||||
compatibilityMatrix[LARGEINT.ordinal()][DATE.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[LARGEINT.ordinal()][DATETIME.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[LARGEINT.ordinal()][DATEV2.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[LARGEINT.ordinal()][DATETIMEV2.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[LARGEINT.ordinal()][CHAR.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[LARGEINT.ordinal()][VARCHAR.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[LARGEINT.ordinal()][JSONB.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[LARGEINT.ordinal()][VARIANT.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[LARGEINT.ordinal()][STRING.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[LARGEINT.ordinal()][DECIMALV2.ordinal()] = DECIMALV2;
|
||||
compatibilityMatrix[LARGEINT.ordinal()][DECIMAL32.ordinal()] = DECIMAL32;
|
||||
compatibilityMatrix[LARGEINT.ordinal()][DECIMAL64.ordinal()] = DECIMAL64;
|
||||
compatibilityMatrix[LARGEINT.ordinal()][DECIMAL128.ordinal()] = DECIMAL128;
|
||||
compatibilityMatrix[LARGEINT.ordinal()][TIME.ordinal()] = TIME;
|
||||
compatibilityMatrix[LARGEINT.ordinal()][TIMEV2.ordinal()] = TIMEV2;
|
||||
|
||||
compatibilityMatrix[FLOAT.ordinal()][FLOAT.ordinal()] = FLOAT;
|
||||
compatibilityMatrix[FLOAT.ordinal()][DOUBLE.ordinal()] = DOUBLE;
|
||||
compatibilityMatrix[FLOAT.ordinal()][DATE.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[FLOAT.ordinal()][DATETIME.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[FLOAT.ordinal()][DATEV2.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[FLOAT.ordinal()][DATETIMEV2.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[FLOAT.ordinal()][CHAR.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[FLOAT.ordinal()][VARCHAR.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[FLOAT.ordinal()][JSONB.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[FLOAT.ordinal()][VARIANT.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[FLOAT.ordinal()][STRING.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[FLOAT.ordinal()][DECIMALV2.ordinal()] = DECIMALV2;
|
||||
compatibilityMatrix[FLOAT.ordinal()][DECIMAL32.ordinal()] = DECIMAL32;
|
||||
compatibilityMatrix[FLOAT.ordinal()][DECIMAL64.ordinal()] = DECIMAL64;
|
||||
compatibilityMatrix[FLOAT.ordinal()][DECIMAL128.ordinal()] = DECIMAL128;
|
||||
compatibilityMatrix[FLOAT.ordinal()][TIME.ordinal()] = TIME;
|
||||
compatibilityMatrix[FLOAT.ordinal()][TIMEV2.ordinal()] = TIMEV2;
|
||||
|
||||
compatibilityMatrix[DOUBLE.ordinal()][DOUBLE.ordinal()] = DOUBLE;
|
||||
compatibilityMatrix[DOUBLE.ordinal()][DATE.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DOUBLE.ordinal()][DATETIME.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DOUBLE.ordinal()][DATEV2.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DOUBLE.ordinal()][DATETIMEV2.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DOUBLE.ordinal()][CHAR.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DOUBLE.ordinal()][VARCHAR.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DOUBLE.ordinal()][JSONB.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DOUBLE.ordinal()][VARIANT.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DOUBLE.ordinal()][STRING.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DOUBLE.ordinal()][DECIMALV2.ordinal()] = DECIMALV2;
|
||||
compatibilityMatrix[DOUBLE.ordinal()][DECIMAL32.ordinal()] = DECIMAL32;
|
||||
compatibilityMatrix[DOUBLE.ordinal()][DECIMAL64.ordinal()] = DECIMAL64;
|
||||
compatibilityMatrix[DOUBLE.ordinal()][DECIMAL128.ordinal()] = DECIMAL128;
|
||||
compatibilityMatrix[DOUBLE.ordinal()][TIME.ordinal()] = TIME;
|
||||
compatibilityMatrix[DOUBLE.ordinal()][TIMEV2.ordinal()] = TIMEV2;
|
||||
|
||||
compatibilityMatrix[DATE.ordinal()][DATE.ordinal()] = DATE;
|
||||
compatibilityMatrix[DATE.ordinal()][DATETIME.ordinal()] = DATETIME;
|
||||
compatibilityMatrix[DATE.ordinal()][DATEV2.ordinal()] = DATEV2;
|
||||
compatibilityMatrix[DATE.ordinal()][DATETIMEV2.ordinal()] = DATETIMEV2;
|
||||
compatibilityMatrix[DATE.ordinal()][CHAR.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATE.ordinal()][VARCHAR.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATE.ordinal()][STRING.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATE.ordinal()][JSONB.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATE.ordinal()][VARIANT.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATE.ordinal()][DECIMALV2.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATE.ordinal()][DECIMAL32.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATE.ordinal()][DECIMAL64.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATE.ordinal()][DECIMAL128.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATE.ordinal()][TIME.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATE.ordinal()][TIMEV2.ordinal()] = INVALID_TYPE;
|
||||
|
||||
compatibilityMatrix[DATEV2.ordinal()][DATE.ordinal()] = DATEV2;
|
||||
compatibilityMatrix[DATEV2.ordinal()][DATETIME.ordinal()] = DATETIMEV2;
|
||||
compatibilityMatrix[DATEV2.ordinal()][DATEV2.ordinal()] = DATEV2;
|
||||
compatibilityMatrix[DATEV2.ordinal()][DATETIMEV2.ordinal()] = DATETIMEV2;
|
||||
compatibilityMatrix[DATEV2.ordinal()][CHAR.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATEV2.ordinal()][VARCHAR.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATEV2.ordinal()][STRING.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATEV2.ordinal()][DECIMALV2.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATEV2.ordinal()][DECIMAL32.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATEV2.ordinal()][DECIMAL64.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATEV2.ordinal()][DECIMAL128.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATEV2.ordinal()][TIME.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATEV2.ordinal()][TIMEV2.ordinal()] = INVALID_TYPE;
|
||||
|
||||
compatibilityMatrix[DATETIME.ordinal()][DATETIME.ordinal()] = DATETIME;
|
||||
compatibilityMatrix[DATETIME.ordinal()][DATETIMEV2.ordinal()] = DATETIMEV2;
|
||||
compatibilityMatrix[DATETIME.ordinal()][CHAR.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATETIME.ordinal()][VARCHAR.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATETIME.ordinal()][JSONB.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATETIME.ordinal()][VARIANT.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATETIME.ordinal()][STRING.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATETIME.ordinal()][DECIMALV2.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATETIME.ordinal()][DECIMAL32.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATETIME.ordinal()][DECIMAL64.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATETIME.ordinal()][DECIMAL128.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATETIME.ordinal()][TIME.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATETIME.ordinal()][TIMEV2.ordinal()] = INVALID_TYPE;
|
||||
|
||||
compatibilityMatrix[DATETIMEV2.ordinal()][DATETIME.ordinal()] = DATETIMEV2;
|
||||
compatibilityMatrix[DATETIMEV2.ordinal()][DATETIMEV2.ordinal()] = DATETIMEV2;
|
||||
compatibilityMatrix[DATETIMEV2.ordinal()][CHAR.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATETIMEV2.ordinal()][VARCHAR.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATETIMEV2.ordinal()][STRING.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATETIMEV2.ordinal()][DECIMALV2.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATETIMEV2.ordinal()][DECIMAL32.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATETIMEV2.ordinal()][DECIMAL64.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATETIMEV2.ordinal()][DECIMAL128.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATETIMEV2.ordinal()][TIME.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DATETIMEV2.ordinal()][TIMEV2.ordinal()] = INVALID_TYPE;
|
||||
|
||||
compatibilityMatrix[CHAR.ordinal()][CHAR.ordinal()] = CHAR;
|
||||
compatibilityMatrix[CHAR.ordinal()][VARCHAR.ordinal()] = VARCHAR;
|
||||
compatibilityMatrix[CHAR.ordinal()][JSONB.ordinal()] = CHAR;
|
||||
compatibilityMatrix[CHAR.ordinal()][VARIANT.ordinal()] = CHAR;
|
||||
compatibilityMatrix[CHAR.ordinal()][STRING.ordinal()] = STRING;
|
||||
compatibilityMatrix[CHAR.ordinal()][DECIMALV2.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[CHAR.ordinal()][DECIMAL32.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[CHAR.ordinal()][DECIMAL64.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[CHAR.ordinal()][DECIMAL128.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[CHAR.ordinal()][TIME.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[CHAR.ordinal()][TIMEV2.ordinal()] = INVALID_TYPE;
|
||||
|
||||
compatibilityMatrix[VARCHAR.ordinal()][VARCHAR.ordinal()] = VARCHAR;
|
||||
compatibilityMatrix[VARCHAR.ordinal()][STRING.ordinal()] = STRING;
|
||||
compatibilityMatrix[VARCHAR.ordinal()][JSONB.ordinal()] = VARCHAR;
|
||||
compatibilityMatrix[VARCHAR.ordinal()][VARIANT.ordinal()] = VARCHAR;
|
||||
compatibilityMatrix[VARCHAR.ordinal()][DECIMALV2.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[VARCHAR.ordinal()][DECIMAL32.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[VARCHAR.ordinal()][DECIMAL64.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[VARCHAR.ordinal()][DECIMAL128.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[VARCHAR.ordinal()][TIME.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[VARCHAR.ordinal()][TIMEV2.ordinal()] = INVALID_TYPE;
|
||||
|
||||
compatibilityMatrix[STRING.ordinal()][STRING.ordinal()] = STRING;
|
||||
compatibilityMatrix[STRING.ordinal()][DECIMALV2.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[STRING.ordinal()][DECIMAL32.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[STRING.ordinal()][DECIMAL64.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[STRING.ordinal()][DECIMAL128.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[STRING.ordinal()][JSONB.ordinal()] = STRING;
|
||||
compatibilityMatrix[STRING.ordinal()][VARIANT.ordinal()] = STRING;
|
||||
compatibilityMatrix[STRING.ordinal()][TIME.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[STRING.ordinal()][TIMEV2.ordinal()] = INVALID_TYPE;
|
||||
|
||||
compatibilityMatrix[JSONB.ordinal()][JSONB.ordinal()] = JSONB;
|
||||
compatibilityMatrix[JSONB.ordinal()][STRING.ordinal()] = STRING;
|
||||
compatibilityMatrix[JSONB.ordinal()][VARCHAR.ordinal()] = VARCHAR;
|
||||
compatibilityMatrix[JSONB.ordinal()][CHAR.ordinal()] = CHAR;
|
||||
compatibilityMatrix[JSONB.ordinal()][VARIANT.ordinal()] = VARIANT;
|
||||
|
||||
compatibilityMatrix[VARIANT.ordinal()][VARIANT.ordinal()] = VARIANT;
|
||||
compatibilityMatrix[VARIANT.ordinal()][STRING.ordinal()] = STRING;
|
||||
compatibilityMatrix[VARIANT.ordinal()][VARCHAR.ordinal()] = VARCHAR;
|
||||
compatibilityMatrix[VARIANT.ordinal()][CHAR.ordinal()] = CHAR;
|
||||
compatibilityMatrix[VARIANT.ordinal()][JSONB.ordinal()] = JSONB;
|
||||
|
||||
compatibilityMatrix[DECIMALV2.ordinal()][DECIMALV2.ordinal()] = DECIMALV2;
|
||||
compatibilityMatrix[DECIMALV2.ordinal()][DECIMAL32.ordinal()] = DECIMALV2;
|
||||
compatibilityMatrix[DECIMALV2.ordinal()][DECIMAL64.ordinal()] = DECIMALV2;
|
||||
compatibilityMatrix[DECIMALV2.ordinal()][DECIMAL128.ordinal()] = DECIMAL128;
|
||||
compatibilityMatrix[DECIMALV2.ordinal()][TIME.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DECIMALV2.ordinal()][TIMEV2.ordinal()] = INVALID_TYPE;
|
||||
|
||||
compatibilityMatrix[DECIMAL32.ordinal()][DECIMALV2.ordinal()] = DECIMALV2;
|
||||
compatibilityMatrix[DECIMAL32.ordinal()][DECIMAL32.ordinal()] = DECIMAL32;
|
||||
compatibilityMatrix[DECIMAL32.ordinal()][DECIMAL64.ordinal()] = DECIMAL64;
|
||||
compatibilityMatrix[DECIMAL32.ordinal()][DECIMAL128.ordinal()] = DECIMAL128;
|
||||
compatibilityMatrix[DECIMAL32.ordinal()][TIME.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DECIMAL32.ordinal()][TIMEV2.ordinal()] = INVALID_TYPE;
|
||||
|
||||
compatibilityMatrix[DECIMAL64.ordinal()][DECIMALV2.ordinal()] = DECIMALV2;
|
||||
compatibilityMatrix[DECIMAL64.ordinal()][DECIMAL32.ordinal()] = DECIMAL64;
|
||||
compatibilityMatrix[DECIMAL64.ordinal()][DECIMAL64.ordinal()] = DECIMAL64;
|
||||
compatibilityMatrix[DECIMAL64.ordinal()][DECIMAL128.ordinal()] = DECIMAL128;
|
||||
compatibilityMatrix[DECIMAL64.ordinal()][TIME.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DECIMAL64.ordinal()][TIMEV2.ordinal()] = INVALID_TYPE;
|
||||
|
||||
compatibilityMatrix[DECIMAL128.ordinal()][DECIMALV2.ordinal()] = DECIMAL128;
|
||||
compatibilityMatrix[DECIMAL128.ordinal()][DECIMAL32.ordinal()] = DECIMAL128;
|
||||
compatibilityMatrix[DECIMAL128.ordinal()][DECIMAL64.ordinal()] = DECIMAL128;
|
||||
compatibilityMatrix[DECIMAL128.ordinal()][DECIMAL128.ordinal()] = DECIMAL128;
|
||||
compatibilityMatrix[DECIMAL128.ordinal()][TIME.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[DECIMAL128.ordinal()][TIMEV2.ordinal()] = INVALID_TYPE;
|
||||
|
||||
compatibilityMatrix[HLL.ordinal()][HLL.ordinal()] = HLL;
|
||||
compatibilityMatrix[HLL.ordinal()][TIME.ordinal()] = INVALID_TYPE;
|
||||
compatibilityMatrix[HLL.ordinal()][TIMEV2.ordinal()] = INVALID_TYPE;
|
||||
|
||||
compatibilityMatrix[BITMAP.ordinal()][BITMAP.ordinal()] = BITMAP;
|
||||
|
||||
compatibilityMatrix[TIME.ordinal()][TIME.ordinal()] = TIME;
|
||||
compatibilityMatrix[TIME.ordinal()][TIMEV2.ordinal()] = TIMEV2;
|
||||
|
||||
compatibilityMatrix[TIMEV2.ordinal()][TIME.ordinal()] = TIMEV2;
|
||||
compatibilityMatrix[TIMEV2.ordinal()][TIMEV2.ordinal()] = TIMEV2;
|
||||
|
||||
compatibilityMatrix[QUANTILE_STATE.ordinal()][QUANTILE_STATE.ordinal()] = QUANTILE_STATE;
|
||||
|
||||
compatibilityMatrix[AGG_STATE.ordinal()][AGG_STATE.ordinal()] = INVALID_TYPE;
|
||||
}
|
||||
|
||||
static {
|
||||
// NULL_TYPE is compatible with any type and results in the non-null type.
|
||||
compatibilityMatrix[NULL_TYPE.ordinal()][NULL_TYPE.ordinal()] = NULL_TYPE;
|
||||
compatibilityMatrix[NULL_TYPE.ordinal()][BOOLEAN.ordinal()] = BOOLEAN;
|
||||
compatibilityMatrix[NULL_TYPE.ordinal()][TINYINT.ordinal()] = TINYINT;
|
||||
compatibilityMatrix[NULL_TYPE.ordinal()][SMALLINT.ordinal()] = SMALLINT;
|
||||
compatibilityMatrix[NULL_TYPE.ordinal()][INT.ordinal()] = INT;
|
||||
}
|
||||
|
||||
private final String description;
|
||||
private final int slotSize; // size of tuple slot for this type
|
||||
private final TPrimitiveType thriftType;
|
||||
private final boolean availableInDdl;
|
||||
private boolean isTimeType = false;
|
||||
|
||||
private PrimitiveType(String description, int slotSize, TPrimitiveType thriftType, boolean availableInDdl) {
|
||||
PrimitiveType(String description, int slotSize, TPrimitiveType thriftType, boolean availableInDdl) {
|
||||
this.description = description;
|
||||
this.slotSize = slotSize;
|
||||
this.thriftType = thriftType;
|
||||
@ -1010,9 +643,6 @@ public enum PrimitiveType {
|
||||
isTimeType = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
public boolean isTimeType() {
|
||||
return isTimeType;
|
||||
}
|
||||
@ -1102,31 +732,6 @@ public enum PrimitiveType {
|
||||
return ARRAY.slotSize;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return type t such that values from both t1 and t2 can be assigned to t
|
||||
* without loss of precision. Returns INVALID_TYPE if there is no such type
|
||||
* or if any of t1 and t2 is INVALID_TYPE.
|
||||
*/
|
||||
public static PrimitiveType getAssignmentCompatibleType(PrimitiveType t1, PrimitiveType t2) {
|
||||
if (!t1.isValid() || !t2.isValid()) {
|
||||
return INVALID_TYPE;
|
||||
}
|
||||
|
||||
PrimitiveType smallerType = (t1.ordinal() < t2.ordinal() ? t1 : t2);
|
||||
PrimitiveType largerType = (t1.ordinal() > t2.ordinal() ? t1 : t2);
|
||||
PrimitiveType result = compatibilityMatrix[smallerType.ordinal()][largerType.ordinal()];
|
||||
Preconditions.checkNotNull(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns if it is compatible to implicitly cast from t1 to t2 (casting from
|
||||
* t1 to t2 results in no loss of precision.
|
||||
*/
|
||||
public static boolean isImplicitlyCastable(PrimitiveType t1, PrimitiveType t2) {
|
||||
return getAssignmentCompatibleType(t1, t2) == t2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return description;
|
||||
|
||||
Reference in New Issue
Block a user