diff --git a/fe/fe-common/src/main/java/org/apache/doris/catalog/PrimitiveType.java b/fe/fe-common/src/main/java/org/apache/doris/catalog/PrimitiveType.java index ed3ce8f85e..94f19d0f26 100644 --- a/fe/fe-common/src/main/java/org/apache/doris/catalog/PrimitiveType.java +++ b/fe/fe-common/src/main/java/org/apache/doris/catalog/PrimitiveType.java @@ -28,55 +28,55 @@ import java.util.ArrayList; import java.util.List; public enum PrimitiveType { - INVALID_TYPE("INVALID_TYPE", -1, TPrimitiveType.INVALID_TYPE), - UNSUPPORTED("UNSUPPORTED_TYPE", -1, TPrimitiveType.UNSUPPORTED), + INVALID_TYPE("INVALID_TYPE", -1, TPrimitiveType.INVALID_TYPE, false), + UNSUPPORTED("UNSUPPORTED_TYPE", -1, TPrimitiveType.UNSUPPORTED, false), // NULL_TYPE - used only in LiteralPredicate and NullLiteral to make NULLs compatible // with all other types. - NULL_TYPE("NULL_TYPE", 1, TPrimitiveType.NULL_TYPE), - BOOLEAN("BOOLEAN", 1, TPrimitiveType.BOOLEAN), - TINYINT("TINYINT", 1, TPrimitiveType.TINYINT), - SMALLINT("SMALLINT", 2, TPrimitiveType.SMALLINT), - INT("INT", 4, TPrimitiveType.INT), - BIGINT("BIGINT", 8, TPrimitiveType.BIGINT), - LARGEINT("LARGEINT", 16, TPrimitiveType.LARGEINT), - FLOAT("FLOAT", 4, TPrimitiveType.FLOAT), - DOUBLE("DOUBLE", 8, TPrimitiveType.DOUBLE), - DATE("DATE", 16, TPrimitiveType.DATE), - DATETIME("DATETIME", 16, TPrimitiveType.DATETIME), + NULL_TYPE("NULL_TYPE", 1, TPrimitiveType.NULL_TYPE, false), + BOOLEAN("BOOLEAN", 1, TPrimitiveType.BOOLEAN, true), + TINYINT("TINYINT", 1, TPrimitiveType.TINYINT, true), + SMALLINT("SMALLINT", 2, TPrimitiveType.SMALLINT, true), + INT("INT", 4, TPrimitiveType.INT, true), + BIGINT("BIGINT", 8, TPrimitiveType.BIGINT, true), + LARGEINT("LARGEINT", 16, TPrimitiveType.LARGEINT, true), + FLOAT("FLOAT", 4, TPrimitiveType.FLOAT, true), + DOUBLE("DOUBLE", 8, TPrimitiveType.DOUBLE, true), + DATE("DATE", 16, TPrimitiveType.DATE, true), + DATETIME("DATETIME", 16, TPrimitiveType.DATETIME, true), // Fixed length char array. - CHAR("CHAR", 16, TPrimitiveType.CHAR), + CHAR("CHAR", 16, TPrimitiveType.CHAR, true), // 8-byte pointer and 4-byte length indicator (12 bytes total). // Aligning to 8 bytes so 16 total. - VARCHAR("VARCHAR", 16, TPrimitiveType.VARCHAR), - JSONB("JSONB", 16, TPrimitiveType.JSONB), + VARCHAR("VARCHAR", 16, TPrimitiveType.VARCHAR, true), + JSONB("JSONB", 16, TPrimitiveType.JSONB, true), - DECIMALV2("DECIMALV2", 16, TPrimitiveType.DECIMALV2), - DECIMAL32("DECIMAL32", 4, TPrimitiveType.DECIMAL32), - DECIMAL64("DECIMAL64", 8, TPrimitiveType.DECIMAL64), - DECIMAL128("DECIMAL128", 16, TPrimitiveType.DECIMAL128I), - TIME("TIME", 8, TPrimitiveType.TIME), + DECIMALV2("DECIMALV2", 16, TPrimitiveType.DECIMALV2, true), + DECIMAL32("DECIMAL32", 4, TPrimitiveType.DECIMAL32, true), + DECIMAL64("DECIMAL64", 8, TPrimitiveType.DECIMAL64, true), + DECIMAL128("DECIMAL128", 16, TPrimitiveType.DECIMAL128I, true), + TIME("TIME", 8, TPrimitiveType.TIME, false), // these following types are stored as object binary in BE. - HLL("HLL", 16, TPrimitiveType.HLL), - BITMAP("BITMAP", 16, TPrimitiveType.OBJECT), - QUANTILE_STATE("QUANTILE_STATE", 16, TPrimitiveType.QUANTILE_STATE), - DATEV2("DATEV2", 4, TPrimitiveType.DATEV2), - DATETIMEV2("DATETIMEV2", 8, TPrimitiveType.DATETIMEV2), - TIMEV2("TIMEV2", 8, TPrimitiveType.TIMEV2), - LAMBDA_FUNCTION("LAMBDA_FUNCTION", 16, TPrimitiveType.LAMBDA_FUNCTION), + HLL("HLL", 16, TPrimitiveType.HLL, true), + BITMAP("BITMAP", 16, TPrimitiveType.OBJECT, true), + QUANTILE_STATE("QUANTILE_STATE", 16, TPrimitiveType.QUANTILE_STATE, true), + DATEV2("DATEV2", 4, TPrimitiveType.DATEV2, true), + DATETIMEV2("DATETIMEV2", 8, TPrimitiveType.DATETIMEV2, true), + TIMEV2("TIMEV2", 8, TPrimitiveType.TIMEV2, false), + LAMBDA_FUNCTION("LAMBDA_FUNCTION", 16, TPrimitiveType.LAMBDA_FUNCTION, false), // sizeof(CollectionValue) - ARRAY("ARRAY", 32, TPrimitiveType.ARRAY), - MAP("MAP", 24, TPrimitiveType.MAP), + ARRAY("ARRAY", 32, TPrimitiveType.ARRAY, true), + MAP("MAP", 24, TPrimitiveType.MAP, true), // sizeof(StructValue) // 8-byte pointer and 4-byte size and 1 bytes has_null (13 bytes total) // Aligning to 16 bytes total. - STRUCT("STRUCT", 16, TPrimitiveType.STRUCT), - STRING("STRING", 16, TPrimitiveType.STRING), - VARIANT("VARIANT", 24, TPrimitiveType.VARIANT), - TEMPLATE("TEMPLATE", -1, TPrimitiveType.INVALID_TYPE), + STRUCT("STRUCT", 16, TPrimitiveType.STRUCT, false), + STRING("STRING", 16, TPrimitiveType.STRING, true), + VARIANT("VARIANT", 24, TPrimitiveType.VARIANT, false), + TEMPLATE("TEMPLATE", -1, TPrimitiveType.INVALID_TYPE, false), // Unsupported scalar types. - BINARY("BINARY", -1, TPrimitiveType.BINARY), - ALL("ALL", -1, TPrimitiveType.INVALID_TYPE); + BINARY("BINARY", -1, TPrimitiveType.BINARY, false), + ALL("ALL", -1, TPrimitiveType.INVALID_TYPE, false); private static final int DATE_INDEX_LEN = 3; @@ -925,12 +925,14 @@ public enum PrimitiveType { 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) { + private PrimitiveType(String description, int slotSize, TPrimitiveType thriftType, boolean availableInDdl) { this.description = description; this.slotSize = slotSize; this.thriftType = thriftType; + this.availableInDdl = availableInDdl; } public void setTimeType() { @@ -1065,6 +1067,10 @@ public enum PrimitiveType { return slotSize; } + public boolean isAvailableInDdl() { + return availableInDdl; + } + public boolean isFixedPointType() { return this == TINYINT || this == SMALLINT diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowDataTypesStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowDataTypesStmt.java index ecdc47a5cf..0ee95dd817 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowDataTypesStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowDataTypesStmt.java @@ -24,6 +24,8 @@ import org.apache.doris.common.AnalysisException; import org.apache.doris.common.UserException; import org.apache.doris.qe.ShowResultSetMetaData; +import com.google.common.collect.Lists; + import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; @@ -41,6 +43,20 @@ public class ShowDataTypesStmt extends ShowStmt { return PrimitiveType.getSupportedTypes(); } + public static List> getTypesAvailableInDdl() { + ArrayList supportedTypes = getTypes(); + List> rows = Lists.newArrayList(); + for (PrimitiveType type : supportedTypes) { + List row = new ArrayList<>(); + if (type.isAvailableInDdl()) { + row.add(type.toString()); + row.add(Integer.toString(type.getSlotSize())); + rows.add(row); + } + } + return rows; + } + @Override public void analyze(Analyzer analyzer) throws AnalysisException, UserException { super.analyze(analyzer); diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java b/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java index 12596c7f6b..c7834dc6e1 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java @@ -478,14 +478,7 @@ public class ShowExecutor { private void handleShowDataTypes() throws AnalysisException { ShowDataTypesStmt showStmt = (ShowDataTypesStmt) stmt; - ArrayList supportedTypes = showStmt.getTypes(); - List> rows = Lists.newArrayList(); - for (PrimitiveType type : supportedTypes) { - List row = new ArrayList<>(); - row.add(type.toString()); - row.add(Integer.toString(type.getSlotSize())); - rows.add(row); - } + List> rows = showStmt.getTypesAvailableInDdl(); showStmt.sortMetaData(rows); resultSet = new ShowResultSet(showStmt.getMetaData(), rows); } diff --git a/regression-test/data/types/test_show_data_types.out b/regression-test/data/types/test_show_data_types.out index 136a99ceaf..a54164919a 100644 --- a/regression-test/data/types/test_show_data_types.out +++ b/regression-test/data/types/test_show_data_types.out @@ -20,13 +20,9 @@ INT 4 JSONB 16 LARGEINT 16 MAP 24 -NULL_TYPE 1 QUANTILE_STATE 16 SMALLINT 2 STRING 16 -TIME 8 -TIMEV2 8 TINYINT 1 VARCHAR 16 -VARIANT 24