diff --git a/fe/fe-common/src/main/java/org/apache/doris/catalog/AggStateType.java b/fe/fe-common/src/main/java/org/apache/doris/catalog/AggStateType.java index 3d1b6ac64f..35301fa704 100644 --- a/fe/fe-common/src/main/java/org/apache/doris/catalog/AggStateType.java +++ b/fe/fe-common/src/main/java/org/apache/doris/catalog/AggStateType.java @@ -43,11 +43,10 @@ public class AggStateType extends ScalarType { public AggStateType(String functionName, Boolean resultIsNullable, List subTypes, List subTypeNullables) { super(PrimitiveType.AGG_STATE); - Preconditions.checkState((subTypes == null) == (subTypeNullables == null)); - if (subTypes != null && subTypeNullables != null) { - Preconditions.checkState(subTypes.size() == subTypeNullables.size(), - "AggStateType' subTypes.size()!=subTypeNullables.size()"); - } + Preconditions.checkState(subTypes != null); + Preconditions.checkState(subTypeNullables != null); + Preconditions.checkState(subTypes.size() == subTypeNullables.size(), + "AggStateType' subTypes.size()!=subTypeNullables.size()"); this.functionName = functionName; this.subTypes = subTypes; this.subTypeNullables = subTypeNullables; @@ -90,17 +89,15 @@ public class AggStateType extends ScalarType { @Override public void toThrift(TTypeDesc container) { super.toThrift(container); - if (subTypes != null) { - List types = new ArrayList(); - for (int i = 0; i < subTypes.size(); i++) { - TTypeDesc desc = new TTypeDesc(); - desc.setTypes(new ArrayList()); - subTypes.get(i).toThrift(desc); - desc.setIsNullable(subTypeNullables.get(i)); - types.add(desc); - } - container.setSubTypes(types); + List types = new ArrayList(); + for (int i = 0; i < subTypes.size(); i++) { + TTypeDesc desc = new TTypeDesc(); + desc.setTypes(new ArrayList()); + subTypes.get(i).toThrift(desc); + desc.setIsNullable(subTypeNullables.get(i)); + types.add(desc); } + container.setSubTypes(types); container.setResultIsNullable(resultIsNullable); container.setFunctionName(functionName); } @@ -111,12 +108,6 @@ public class AggStateType extends ScalarType { return false; } AggStateType other = (AggStateType) o; - if ((subTypes == null) != (other.getSubTypes() == null)) { - return false; - } - if (subTypes == null) { - return true; - } int subTypeNumber = subTypeNullables.size(); if (subTypeNumber != other.subTypeNullables.size()) { return false; diff --git a/fe/fe-common/src/main/java/org/apache/doris/catalog/ScalarType.java b/fe/fe-common/src/main/java/org/apache/doris/catalog/ScalarType.java index 57876d08d7..83072ad97f 100644 --- a/fe/fe-common/src/main/java/org/apache/doris/catalog/ScalarType.java +++ b/fe/fe-common/src/main/java/org/apache/doris/catalog/ScalarType.java @@ -190,8 +190,6 @@ public class ScalarType extends Type { return BITMAP; case QUANTILE_STATE: return QUANTILE_STATE; - case AGG_STATE: - return AGG_STATE; case LAMBDA_FUNCTION: return LAMBDA_FUNCTION; case DATE: @@ -264,8 +262,6 @@ public class ScalarType extends Type { return BITMAP; case "QUANTILE_STATE": return QUANTILE_STATE; - case "AGG_STATE": - return AGG_STATE; case "LAMBDA_FUNCTION": return LAMBDA_FUNCTION; case "DATE": diff --git a/fe/fe-common/src/main/java/org/apache/doris/catalog/Type.java b/fe/fe-common/src/main/java/org/apache/doris/catalog/Type.java index 96caba0e4b..9908134975 100644 --- a/fe/fe-common/src/main/java/org/apache/doris/catalog/Type.java +++ b/fe/fe-common/src/main/java/org/apache/doris/catalog/Type.java @@ -113,7 +113,6 @@ public abstract class Type { public static final ScalarType CHAR = ScalarType.createCharType(-1); public static final ScalarType BITMAP = new ScalarType(PrimitiveType.BITMAP); public static final ScalarType QUANTILE_STATE = new ScalarType(PrimitiveType.QUANTILE_STATE); - public static final AggStateType AGG_STATE = new AggStateType(null, null, null, null); public static final ScalarType LAMBDA_FUNCTION = new ScalarType(PrimitiveType.LAMBDA_FUNCTION); // Only used for alias function, to represent any type in function args public static final ScalarType ALL = new ScalarType(PrimitiveType.ALL); @@ -172,7 +171,6 @@ public abstract class Type { typeMap.put("OBJECT", Type.UNSUPPORTED); typeMap.put("ARRAY", Type.ARRAY); typeMap.put("QUANTILE_STATE", Type.QUANTILE_STATE); - typeMap.put("AGG_STATE", Type.AGG_STATE); } static { @@ -230,7 +228,6 @@ public abstract class Type { supportedTypes.add(HLL); supportedTypes.add(BITMAP); supportedTypes.add(QUANTILE_STATE); - supportedTypes.add(AGG_STATE); arraySubTypes = Lists.newArrayList(); arraySubTypes.add(BOOLEAN); @@ -1038,8 +1035,6 @@ public abstract class Type { return Type.QUANTILE_STATE; case LAMBDA_FUNCTION: return Type.LAMBDA_FUNCTION; - case AGG_STATE: - return Type.AGG_STATE; default: return null; } @@ -1403,7 +1398,6 @@ public abstract class Type { compatibilityMatrix[BOOLEAN.ordinal()][IPV4.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[BOOLEAN.ordinal()][IPV6.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[BOOLEAN.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.INVALID_TYPE; - compatibilityMatrix[BOOLEAN.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; // TINYINT compatibilityMatrix[TINYINT.ordinal()][SMALLINT.ordinal()] = PrimitiveType.SMALLINT; @@ -1434,7 +1428,6 @@ public abstract class Type { compatibilityMatrix[TINYINT.ordinal()][QUANTILE_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[TINYINT.ordinal()][IPV4.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[TINYINT.ordinal()][IPV6.ordinal()] = PrimitiveType.INVALID_TYPE; - compatibilityMatrix[TINYINT.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; // SMALLINT compatibilityMatrix[SMALLINT.ordinal()][INT.ordinal()] = PrimitiveType.INT; @@ -1464,7 +1457,6 @@ public abstract class Type { compatibilityMatrix[SMALLINT.ordinal()][QUANTILE_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[SMALLINT.ordinal()][IPV4.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[SMALLINT.ordinal()][IPV6.ordinal()] = PrimitiveType.INVALID_TYPE; - compatibilityMatrix[SMALLINT.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; // INT compatibilityMatrix[INT.ordinal()][BIGINT.ordinal()] = PrimitiveType.BIGINT; @@ -1497,7 +1489,6 @@ public abstract class Type { compatibilityMatrix[INT.ordinal()][QUANTILE_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[INT.ordinal()][IPV4.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[INT.ordinal()][IPV6.ordinal()] = PrimitiveType.INVALID_TYPE; - compatibilityMatrix[INT.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; // BIGINT // 64 bit integer does not fit in mantissa of double or float. @@ -1531,7 +1522,6 @@ public abstract class Type { compatibilityMatrix[BIGINT.ordinal()][QUANTILE_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[BIGINT.ordinal()][IPV4.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[BIGINT.ordinal()][IPV6.ordinal()] = PrimitiveType.INVALID_TYPE; - compatibilityMatrix[BIGINT.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; // LARGEINT compatibilityMatrix[LARGEINT.ordinal()][FLOAT.ordinal()] = PrimitiveType.DOUBLE; @@ -1557,7 +1547,6 @@ public abstract class Type { compatibilityMatrix[LARGEINT.ordinal()][QUANTILE_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[LARGEINT.ordinal()][IPV4.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[LARGEINT.ordinal()][IPV6.ordinal()] = PrimitiveType.INVALID_TYPE; - compatibilityMatrix[LARGEINT.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; // FLOAT compatibilityMatrix[FLOAT.ordinal()][DOUBLE.ordinal()] = PrimitiveType.DOUBLE; @@ -1582,7 +1571,6 @@ public abstract class Type { compatibilityMatrix[FLOAT.ordinal()][QUANTILE_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[FLOAT.ordinal()][IPV4.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[FLOAT.ordinal()][IPV6.ordinal()] = PrimitiveType.INVALID_TYPE; - compatibilityMatrix[FLOAT.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; // DOUBLE compatibilityMatrix[DOUBLE.ordinal()][DATE.ordinal()] = PrimitiveType.INVALID_TYPE; @@ -1606,7 +1594,6 @@ public abstract class Type { compatibilityMatrix[DOUBLE.ordinal()][TIMEV2.ordinal()] = PrimitiveType.DOUBLE; compatibilityMatrix[DOUBLE.ordinal()][IPV4.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[DOUBLE.ordinal()][IPV6.ordinal()] = PrimitiveType.INVALID_TYPE; - compatibilityMatrix[DOUBLE.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; // DATE compatibilityMatrix[DATE.ordinal()][DATETIME.ordinal()] = PrimitiveType.DATETIME; @@ -1629,7 +1616,6 @@ public abstract class Type { compatibilityMatrix[DATE.ordinal()][QUANTILE_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[DATE.ordinal()][IPV4.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[DATE.ordinal()][IPV6.ordinal()] = PrimitiveType.INVALID_TYPE; - compatibilityMatrix[DATE.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; // DATEV2 compatibilityMatrix[DATEV2.ordinal()][DATE.ordinal()] = PrimitiveType.DATEV2; @@ -1652,7 +1638,6 @@ public abstract class Type { compatibilityMatrix[DATEV2.ordinal()][QUANTILE_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[DATEV2.ordinal()][IPV4.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[DATEV2.ordinal()][IPV6.ordinal()] = PrimitiveType.INVALID_TYPE; - compatibilityMatrix[DATEV2.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; // DATETIME compatibilityMatrix[DATETIME.ordinal()][CHAR.ordinal()] = PrimitiveType.INVALID_TYPE; @@ -1674,7 +1659,6 @@ public abstract class Type { compatibilityMatrix[DATETIME.ordinal()][QUANTILE_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[DATETIME.ordinal()][IPV4.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[DATETIME.ordinal()][IPV6.ordinal()] = PrimitiveType.INVALID_TYPE; - compatibilityMatrix[DATETIME.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; // DATETIMEV2 compatibilityMatrix[DATETIMEV2.ordinal()][CHAR.ordinal()] = PrimitiveType.INVALID_TYPE; @@ -1696,7 +1680,6 @@ public abstract class Type { compatibilityMatrix[DATETIMEV2.ordinal()][QUANTILE_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[DATETIMEV2.ordinal()][IPV4.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[DATETIMEV2.ordinal()][IPV6.ordinal()] = PrimitiveType.INVALID_TYPE; - compatibilityMatrix[DATETIMEV2.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; // We can convert some but not all string values to timestamps. // CHAR @@ -1718,7 +1701,6 @@ public abstract class Type { compatibilityMatrix[CHAR.ordinal()][QUANTILE_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[CHAR.ordinal()][IPV4.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[CHAR.ordinal()][IPV6.ordinal()] = PrimitiveType.INVALID_TYPE; - compatibilityMatrix[CHAR.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; // VARCHAR compatibilityMatrix[VARCHAR.ordinal()][DECIMALV2.ordinal()] = PrimitiveType.INVALID_TYPE; @@ -1738,7 +1720,6 @@ public abstract class Type { compatibilityMatrix[VARCHAR.ordinal()][QUANTILE_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[VARCHAR.ordinal()][IPV4.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[VARCHAR.ordinal()][IPV6.ordinal()] = PrimitiveType.INVALID_TYPE; - compatibilityMatrix[VARCHAR.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; //String compatibilityMatrix[STRING.ordinal()][HLL.ordinal()] = PrimitiveType.INVALID_TYPE; @@ -1756,7 +1737,6 @@ public abstract class Type { compatibilityMatrix[STRING.ordinal()][VARIANT.ordinal()] = PrimitiveType.STRING; compatibilityMatrix[STRING.ordinal()][IPV4.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[STRING.ordinal()][IPV6.ordinal()] = PrimitiveType.INVALID_TYPE; - compatibilityMatrix[STRING.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; //JSONB compatibilityMatrix[JSONB.ordinal()][DECIMALV2.ordinal()] = PrimitiveType.INVALID_TYPE; @@ -1776,7 +1756,7 @@ public abstract class Type { compatibilityMatrix[JSONB.ordinal()][VARCHAR.ordinal()] = PrimitiveType.VARCHAR; compatibilityMatrix[JSONB.ordinal()][IPV4.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[JSONB.ordinal()][IPV6.ordinal()] = PrimitiveType.INVALID_TYPE; - compatibilityMatrix[JSONB.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; + // VARIANT compatibilityMatrix[VARIANT.ordinal()][DECIMALV2.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[VARIANT.ordinal()][DECIMAL32.ordinal()] = PrimitiveType.INVALID_TYPE; @@ -1793,7 +1773,6 @@ public abstract class Type { compatibilityMatrix[VARIANT.ordinal()][STRING.ordinal()] = PrimitiveType.STRING; compatibilityMatrix[VARIANT.ordinal()][CHAR.ordinal()] = PrimitiveType.CHAR; compatibilityMatrix[VARIANT.ordinal()][VARCHAR.ordinal()] = PrimitiveType.VARCHAR; - compatibilityMatrix[VARIANT.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; // DECIMALV2 compatibilityMatrix[DECIMALV2.ordinal()][HLL.ordinal()] = PrimitiveType.INVALID_TYPE; @@ -1812,7 +1791,6 @@ public abstract class Type { compatibilityMatrix[DECIMALV2.ordinal()][IPV4.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[DECIMALV2.ordinal()][IPV6.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[DECIMALV2.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.INVALID_TYPE; - compatibilityMatrix[DECIMALV2.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; // DECIMAL32 compatibilityMatrix[DECIMAL32.ordinal()][HLL.ordinal()] = PrimitiveType.INVALID_TYPE; @@ -1830,7 +1808,6 @@ public abstract class Type { compatibilityMatrix[DECIMAL32.ordinal()][IPV4.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[DECIMAL32.ordinal()][IPV6.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[DECIMAL32.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.DECIMAL256; - compatibilityMatrix[DECIMAL32.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; // DECIMAL64 compatibilityMatrix[DECIMAL64.ordinal()][HLL.ordinal()] = PrimitiveType.INVALID_TYPE; @@ -1848,7 +1825,6 @@ public abstract class Type { compatibilityMatrix[DECIMAL64.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.DECIMAL256; compatibilityMatrix[DECIMAL64.ordinal()][IPV4.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[DECIMAL64.ordinal()][IPV6.ordinal()] = PrimitiveType.INVALID_TYPE; - compatibilityMatrix[DECIMAL64.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; // DECIMAL128 compatibilityMatrix[DECIMAL128.ordinal()][HLL.ordinal()] = PrimitiveType.INVALID_TYPE; @@ -1866,7 +1842,6 @@ public abstract class Type { compatibilityMatrix[DECIMAL128.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.DECIMAL256; compatibilityMatrix[DECIMAL128.ordinal()][IPV4.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[DECIMAL128.ordinal()][IPV6.ordinal()] = PrimitiveType.INVALID_TYPE; - compatibilityMatrix[DECIMAL128.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; // DECIMAL256 compatibilityMatrix[DECIMAL256.ordinal()][HLL.ordinal()] = PrimitiveType.INVALID_TYPE; @@ -1881,7 +1856,6 @@ public abstract class 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; @@ -1899,7 +1873,6 @@ public abstract class Type { compatibilityMatrix[HLL.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[HLL.ordinal()][IPV4.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[HLL.ordinal()][IPV6.ordinal()] = PrimitiveType.INVALID_TYPE; - compatibilityMatrix[HLL.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; // BITMAP @@ -1917,7 +1890,6 @@ public abstract class Type { compatibilityMatrix[BITMAP.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[BITMAP.ordinal()][IPV4.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[BITMAP.ordinal()][IPV6.ordinal()] = PrimitiveType.INVALID_TYPE; - compatibilityMatrix[BITMAP.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; //QUANTILE_STATE compatibilityMatrix[QUANTILE_STATE.ordinal()][JSONB.ordinal()] = PrimitiveType.INVALID_TYPE; @@ -1931,18 +1903,6 @@ public abstract class Type { compatibilityMatrix[QUANTILE_STATE.ordinal()][IPV4.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[QUANTILE_STATE.ordinal()][IPV6.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 - compatibilityMatrix[AGG_STATE.ordinal()][JSONB.ordinal()] = PrimitiveType.INVALID_TYPE; - compatibilityMatrix[AGG_STATE.ordinal()][VARIANT.ordinal()] = PrimitiveType.INVALID_TYPE; - compatibilityMatrix[AGG_STATE.ordinal()][STRING.ordinal()] = PrimitiveType.INVALID_TYPE; - compatibilityMatrix[AGG_STATE.ordinal()][DATEV2.ordinal()] = PrimitiveType.INVALID_TYPE; - compatibilityMatrix[AGG_STATE.ordinal()][DATETIMEV2.ordinal()] = PrimitiveType.INVALID_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; @@ -1955,7 +1915,6 @@ public abstract class Type { compatibilityMatrix[TIME.ordinal()][DATETIMEV2.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[TIME.ordinal()][IPV4.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[TIME.ordinal()][IPV6.ordinal()] = PrimitiveType.INVALID_TYPE; - compatibilityMatrix[TIME.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[TIMEV2.ordinal()][TIMEV2.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[TIMEV2.ordinal()][TIME.ordinal()] = PrimitiveType.INVALID_TYPE; @@ -1965,7 +1924,6 @@ public abstract class Type { compatibilityMatrix[TIMEV2.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[TIMEV2.ordinal()][IPV4.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[TIMEV2.ordinal()][IPV6.ordinal()] = PrimitiveType.INVALID_TYPE; - compatibilityMatrix[TIMEV2.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; // IPV4 compatibilityMatrix[IPV4.ordinal()][TIME.ordinal()] = PrimitiveType.INVALID_TYPE; @@ -1981,7 +1939,6 @@ public abstract class Type { compatibilityMatrix[IPV4.ordinal()][DECIMAL128.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[IPV4.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[IPV4.ordinal()][IPV6.ordinal()] = PrimitiveType.INVALID_TYPE; - compatibilityMatrix[IPV4.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; // IPV6 compatibilityMatrix[IPV6.ordinal()][TIME.ordinal()] = PrimitiveType.INVALID_TYPE; @@ -1997,7 +1954,6 @@ public abstract class Type { compatibilityMatrix[IPV6.ordinal()][DECIMAL128.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[IPV6.ordinal()][DECIMAL256.ordinal()] = PrimitiveType.INVALID_TYPE; compatibilityMatrix[IPV6.ordinal()][IPV4.ordinal()] = PrimitiveType.INVALID_TYPE; - compatibilityMatrix[IPV6.ordinal()][AGG_STATE.ordinal()] = PrimitiveType.INVALID_TYPE; // Check all of the necessary entries that should be filled. // ignore binary and all @@ -2019,7 +1975,8 @@ public abstract class Type { || t1 == PrimitiveType.VARIANT || t2 == PrimitiveType.VARIANT || t1 == PrimitiveType.LAMBDA_FUNCTION || t2 == PrimitiveType.LAMBDA_FUNCTION || t1 == PrimitiveType.IPV4 || t2 == PrimitiveType.IPV4 - || t1 == PrimitiveType.IPV6 || t2 == PrimitiveType.IPV6) { + || t1 == PrimitiveType.IPV6 || t2 == PrimitiveType.IPV6 + || t1 == PrimitiveType.AGG_STATE || t2 == PrimitiveType.AGG_STATE) { continue; } Preconditions.checkNotNull(compatibilityMatrix[i][j]); diff --git a/fe/fe-core/src/main/cup/sql_parser.cup b/fe/fe-core/src/main/cup/sql_parser.cup index fb37eee9c7..ab5c0ec2b3 100644 --- a/fe/fe-core/src/main/cup/sql_parser.cup +++ b/fe/fe-core/src/main/cup/sql_parser.cup @@ -57,6 +57,7 @@ import org.apache.doris.resource.workloadschedpolicy.WorkloadActionMeta; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import java.util.stream.Collectors; import java_cup.runtime.Symbol; @@ -3729,11 +3730,14 @@ column_definition ::= ColumnDef columnDef = new ColumnDef(columnName, typeDef, isKey, null, isAllowNull, autoIncInitValue, defaultValue, comment); RESULT = columnDef; :} - | ident:columnName type_def:typeDef IDENT:fnName LPAREN type_def_nullable_list:list RPAREN opt_auto_inc_init_value:autoIncInitValue opt_default_value:defaultValue opt_comment:comment + | ident:columnName KW_AGG_STATE IDENT:fnName LPAREN type_def_nullable_list:list RPAREN opt_auto_inc_init_value:autoIncInitValue opt_default_value:defaultValue opt_comment:comment {: - ColumnDef columnDef = new ColumnDef(columnName, typeDef, false, AggregateType.GENERIC_AGGREGATION, false, defaultValue, comment); - columnDef.setGenericAggregationName(fnName); - columnDef.setGenericAggregationArguments(list); + for (TypeDef def : list) { + def.analyze(null); + } + ColumnDef columnDef = new ColumnDef(columnName, new TypeDef(Expr.createAggStateType(fnName, + list.stream().map(TypeDef::getType).collect(Collectors.toList()), + list.stream().map(TypeDef::getNullable).collect(Collectors.toList()))), false, AggregateType.GENERIC_AGGREGATION, false, defaultValue, comment); RESULT = columnDef; :} | ident:columnName type_def:typeDef opt_is_key:isKey opt_agg_type:aggType opt_is_allow_null:isAllowNull opt_auto_inc_init_value:autoIncInitValue opt_default_value:defaultValue opt_comment:comment @@ -3741,11 +3745,14 @@ column_definition ::= ColumnDef columnDef = new ColumnDef(columnName, typeDef, isKey, aggType, isAllowNull, autoIncInitValue, defaultValue, comment); RESULT = columnDef; :} - | ident:columnName type_def:typeDef opt_is_key:isKey opt_agg_type:aggType LPAREN type_def_nullable_list:list RPAREN opt_default_value:defaultValue opt_comment:comment + | ident:columnName KW_AGG_STATE opt_is_key:isKey opt_agg_type:aggType LPAREN type_def_nullable_list:list RPAREN opt_default_value:defaultValue opt_comment:comment {: - ColumnDef columnDef = new ColumnDef(columnName, typeDef, isKey, AggregateType.GENERIC_AGGREGATION, false, defaultValue, comment); - columnDef.setGenericAggregationName(aggType); - columnDef.setGenericAggregationArguments(list); + for (TypeDef def : list) { + def.analyze(null); + } + ColumnDef columnDef = new ColumnDef(columnName, new TypeDef(Expr.createAggStateType(aggType.name().toLowerCase(), + list.stream().map(TypeDef::getType).collect(Collectors.toList()), + list.stream().map(TypeDef::getNullable).collect(Collectors.toList()))), isKey, AggregateType.GENERIC_AGGREGATION, false, defaultValue, comment); RESULT = columnDef; :} ; @@ -6473,8 +6480,6 @@ type ::= {: RESULT = Type.BITMAP; :} | KW_QUANTILE_STATE {: RESULT = Type.QUANTILE_STATE; :} - | KW_AGG_STATE - {: RESULT = Type.AGG_STATE; :} | KW_STRING {: RESULT = ScalarType.createStringType(); :} | KW_JSON diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/ColumnDef.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/ColumnDef.java index 8f3e2ea0a1..59e5be4725 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ColumnDef.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ColumnDef.java @@ -37,8 +37,6 @@ import org.apache.logging.log4j.Logger; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; -import java.util.List; -import java.util.stream.Collectors; // Column definition which is generated by SQL syntax parser // Syntax: @@ -172,8 +170,6 @@ public class ColumnDef { private String name; private TypeDef typeDef; private AggregateType aggregateType; - private String genericAggregationName; - private List genericAggregationArguments; private boolean isKey; private boolean isAllowNull; @@ -273,18 +269,6 @@ public class ColumnDef { this.aggregateType = aggregateType; } - public void setGenericAggregationName(String genericAggregationName) { - this.genericAggregationName = genericAggregationName; - } - - public void setGenericAggregationName(AggregateType aggregateType) { - this.genericAggregationName = aggregateType.name().toLowerCase(); - } - - public void setGenericAggregationArguments(List genericAggregationArguments) { - this.genericAggregationArguments = genericAggregationArguments; - } - public boolean isKey() { return isKey; } @@ -421,21 +405,6 @@ public class ColumnDef { } } - if (type.getPrimitiveType() == PrimitiveType.AGG_STATE && genericAggregationName != null) { - if (isKey()) { - throw new AnalysisException("AGG_STATE type should not be used in key column[" + getName() - + "]."); - } - for (TypeDef def : genericAggregationArguments) { - def.analyze(null); - } - } else if (type.getPrimitiveType() == PrimitiveType.AGG_STATE) { - throw new AnalysisException("AGG_STATE type need generic aggregation in column[" + getName() - + "]."); - } else if (genericAggregationName != null) { - throw new AnalysisException("generic aggregation need AGG_STATE type in column[" + getName() - + "]."); - } // If aggregate type is REPLACE_IF_NOT_NULL, we set it nullable. // If default value is not set, we set it NULL @@ -586,17 +555,7 @@ public class ColumnDef { } public Column toColumn() { - List typeList = null; - List nullableList = null; - Type type = typeDef.getType(); - if (genericAggregationArguments != null) { - typeList = genericAggregationArguments.stream().map(TypeDef::getType).collect(Collectors.toList()); - nullableList = genericAggregationArguments.stream().map(TypeDef::getNullable).collect(Collectors.toList()); - - type = Expr.createAggStateType(genericAggregationName, typeList, nullableList); - } - return new Column(name, type, isKey, aggregateType, isAllowNull, autoIncInitValue, defaultValue.value, comment, visible, defaultValue.defaultValueExprDef, Column.COLUMN_UNIQUE_ID_INIT_VALUE, defaultValue.getValue(), clusterKeyId); diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java index d1ea7f33e8..d89ae3ffff 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java @@ -72,6 +72,7 @@ import java.util.ListIterator; import java.util.Map; import java.util.Optional; import java.util.Set; +import java.util.stream.Collectors; /** * Root of the expr node hierarchy. @@ -465,7 +466,7 @@ public abstract class Expr extends TreeNode implements ParseNode, Cloneabl setSelectivity(); } analysisDone(); - if (type.isAggStateType() && !(this instanceof SlotRef) && ((AggStateType) type).getSubTypes() == null) { + if (type.isAggStateType() && !(this instanceof SlotRef) && !children.get(0).getType().isAggStateType()) { type = createAggStateType(((AggStateType) type), Arrays.asList(collectChildReturnTypes()), Arrays.asList(collectChildReturnNullables())); } @@ -1045,10 +1046,6 @@ public abstract class Expr extends TreeNode implements ParseNode, Cloneabl // Append a flattened version of this expr, including all children, to 'container'. protected void treeToThriftHelper(TExpr container) { TExprNode msg = new TExprNode(); - if (type.isAggStateType() && ((AggStateType) type).getSubTypes() == null) { - type = createAggStateType(((AggStateType) type), Arrays.asList(collectChildReturnTypes()), - Arrays.asList(collectChildReturnNullables())); - } msg.type = type.toThrift(); msg.num_children = children.size(); if (fn != null) { @@ -1964,9 +1961,6 @@ public abstract class Expr extends TreeNode implements ParseNode, Cloneabl throw new AnalysisException("merge/union function must input one agg_state"); } AggStateType aggState = (AggStateType) argList.get(0); - if (aggState.getSubTypes() == null) { - throw new AnalysisException("agg_state's subTypes is null"); - } nestedArgList = aggState.getSubTypes(); } @@ -1979,7 +1973,9 @@ public abstract class Expr extends TreeNode implements ParseNode, Cloneabl if (isState) { f = new ScalarFunction(new FunctionName(name + AGG_STATE_SUFFIX), Arrays.asList(f.getArgs()), - Expr.createAggStateType(name, null, null), f.hasVarArgs(), f.isUserVisible()); + Expr.createAggStateType(name, nestedArgList, + nestedArgList.stream().map(e -> true).collect(Collectors.toList())), + f.hasVarArgs(), f.isUserVisible()); f.setNullableMode(NullableMode.ALWAYS_NOT_NULLABLE); } else { Function original = f; diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/ColumnStatistic.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/ColumnStatistic.java index e38ba86c82..e5dd1e1765 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/statistics/ColumnStatistic.java +++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/ColumnStatistic.java @@ -58,7 +58,7 @@ public class ColumnStatistic { .build(); public static final Set UNSUPPORTED_TYPE = Sets.newHashSet( - Type.HLL, Type.BITMAP, Type.ARRAY, Type.STRUCT, Type.MAP, Type.QUANTILE_STATE, Type.AGG_STATE, Type.JSONB, + Type.HLL, Type.BITMAP, Type.ARRAY, Type.STRUCT, Type.MAP, Type.QUANTILE_STATE, Type.JSONB, Type.VARIANT, Type.TIME, Type.TIMEV2, Type.LAMBDA_FUNCTION );