You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by yi...@apache.org on 2024/01/29 10:19:22 UTC

(doris) branch master updated: [FIX](complextype)fix complex type nested version type but not hide version (#30419)

This is an automated email from the ASF dual-hosted git repository.

yiguolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new a23ccfde821 [FIX](complextype)fix complex type nested version type but not hide version (#30419)
a23ccfde821 is described below

commit a23ccfde8210b1e9a2ac9bab01224d11ba8e6418
Author: amory <wa...@selectdb.com>
AuthorDate: Mon Jan 29 18:19:14 2024 +0800

    [FIX](complextype)fix complex type nested version type but not hide version (#30419)
---
 .../main/java/org/apache/doris/catalog/Type.java   | 42 +++++++++++++++++++
 .../org/apache/doris/analysis/DescribeStmt.java    | 21 +---------
 .../main/java/org/apache/doris/catalog/Column.java | 21 +---------
 .../doris/common/proc/IndexSchemaProcNode.java     | 24 +----------
 .../test_complextype_nested_version_schema.out     | 15 +++++++
 .../jdbc/test_doris_jdbc_catalog.out               |  8 ++--
 .../jdbc/test_oracle_jdbc_catalog.out              |  2 +-
 .../jdbc/test_sqlserver_jdbc_catalog.out           |  4 +-
 .../test_complextype_nested_version_schema.groovy  | 49 ++++++++++++++++++++++
 9 files changed, 116 insertions(+), 70 deletions(-)

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 a7e1660dd02..ecc394e4990 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
@@ -30,6 +30,7 @@ import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
@@ -448,6 +449,47 @@ public abstract class Type {
         return false;
     }
 
+    public String hideVersionForVersionColumn(Boolean isToSql) {
+        if (isDatetimeV2()) {
+            StringBuilder typeStr = new StringBuilder("DATETIME");
+            if (((ScalarType) this).getScalarScale() > 0) {
+                typeStr.append("(").append(((ScalarType) this).getScalarScale()).append(")");
+            }
+            return typeStr.toString();
+        } else if (isDateV2()) {
+            return "DATE";
+        } else if (isDecimalV3()) {
+            StringBuilder typeStr = new StringBuilder("DECIMAL");
+            ScalarType sType = (ScalarType) this;
+            int scale = sType.getScalarScale();
+            int precision = sType.getScalarPrecision();
+            // not default
+            if (!sType.isDefaultDecimal()) {
+                typeStr.append("(").append(precision).append(", ").append(scale)
+                        .append(")");
+            }
+            return typeStr.toString();
+        } else if (isArrayType()) {
+            String nestedDesc = ((ArrayType) this).getItemType().hideVersionForVersionColumn(isToSql);
+            return "ARRAY<" + nestedDesc + ">";
+        } else if (isMapType()) {
+            String keyDesc = ((MapType) this).getKeyType().hideVersionForVersionColumn(isToSql);
+            String valueDesc = ((MapType) this).getValueType().hideVersionForVersionColumn(isToSql);
+            return "MAP<" + keyDesc + "," + valueDesc + ">";
+        } else if (isStructType()) {
+            List<String> fieldDesc = new ArrayList<>();
+            StructType structType = (StructType) this;
+            for (int i = 0; i < structType.getFields().size(); i++) {
+                StructField field = structType.getFields().get(i);
+                fieldDesc.add(field.getName() + ":" + field.getType().hideVersionForVersionColumn(isToSql));
+            }
+            return "STRUCT<" + StringUtils.join(fieldDesc, ",") + ">";
+        } else if (isToSql) {
+            return this.toSql();
+        }
+        return this.toString();
+    }
+
     public boolean isDecimalV3OrContainsDecimalV3() {
         if (isDecimalV3()) {
             return true;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/DescribeStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/DescribeStmt.java
index 40c576b1c4f..6fe7fe75780 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/DescribeStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/DescribeStmt.java
@@ -136,26 +136,7 @@ public class DescribeStmt extends ShowStmt {
                                 ? FeConstants.null_string : column.getDefaultValue(),
                         "NONE"
                 );
-                if (column.getOriginType().isDatetimeV2()) {
-                    StringBuilder typeStr = new StringBuilder("DATETIME");
-                    if (((ScalarType) column.getOriginType()).getScalarScale() > 0) {
-                        typeStr.append("(").append(((ScalarType) column.getOriginType()).getScalarScale()).append(")");
-                    }
-                    row.set(1, typeStr.toString());
-                } else if (column.getOriginType().isDateV2()) {
-                    row.set(1, "DATE");
-                } else if (column.getOriginType().isDecimalV3()) {
-                    StringBuilder typeStr = new StringBuilder("DECIMAL");
-                    ScalarType sType = (ScalarType) column.getOriginType();
-                    int scale = sType.getScalarScale();
-                    int precision = sType.getScalarPrecision();
-                    // not default
-                    if (scale > 0 && precision != 9) {
-                        typeStr.append("(").append(precision).append(", ").append(scale)
-                                .append(")");
-                    }
-                    row.set(1, typeStr.toString());
-                }
+                row.set(1, column.getOriginType().hideVersionForVersionColumn(false));
                 totalRows.add(row);
             }
             return;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Column.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/Column.java
index f83eb942ca6..395c3169ae4 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Column.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Column.java
@@ -926,26 +926,7 @@ public class Column implements Writable, GsonPostProcessable {
 
         // show change datetimeV2/dateV2 to datetime/date
         if (isCompatible) {
-            if (type.isDatetimeV2()) {
-                sb.append("DATETIME");
-                if (((ScalarType) type).getScalarScale() > 0) {
-                    sb.append("(").append(((ScalarType) type).getScalarScale()).append(")");
-                }
-            } else if (type.isDateV2()) {
-                sb.append("DATE");
-            } else if (type.isDecimalV3()) {
-                sb.append("DECIMAL");
-                ScalarType sType = (ScalarType) type;
-                int scale = sType.getScalarScale();
-                int precision = sType.getScalarPrecision();
-                // not default
-                if (!sType.isDefaultDecimal()) {
-                    sb.append("(").append(precision).append(", ").append(scale)
-                            .append(")");
-                }
-            } else {
-                sb.append(typeStr);
-            }
+            sb.append(type.hideVersionForVersionColumn(true));
         } else {
             sb.append(typeStr);
         }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/proc/IndexSchemaProcNode.java b/fe/fe-core/src/main/java/org/apache/doris/common/proc/IndexSchemaProcNode.java
index 6f125217ee1..60d1980d28b 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/common/proc/IndexSchemaProcNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/common/proc/IndexSchemaProcNode.java
@@ -18,7 +18,6 @@
 package org.apache.doris.common.proc;
 
 import org.apache.doris.catalog.Column;
-import org.apache.doris.catalog.ScalarType;
 import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.FeConstants;
 
@@ -76,28 +75,7 @@ public class IndexSchemaProcNode implements ProcNodeInterface {
                                                          ? FeConstants.null_string : column.getDefaultValue(),
                                                  extraStr);
 
-            if (column.getOriginType().isDateV2()) {
-                rowList.set(1, "DATE");
-            }
-            if (column.getOriginType().isDatetimeV2()) {
-                StringBuilder typeStr = new StringBuilder("DATETIME");
-                if (((ScalarType) column.getOriginType()).getScalarScale() > 0) {
-                    typeStr.append("(").append(((ScalarType) column.getOriginType()).getScalarScale()).append(")");
-                }
-                rowList.set(1, typeStr.toString());
-            }
-            if (column.getOriginType().isDecimalV3()) {
-                StringBuilder typeStr = new StringBuilder("DECIMAL");
-                ScalarType sType = (ScalarType) column.getOriginType();
-                int scale = sType.getScalarScale();
-                int precision = sType.getScalarPrecision();
-                // not default
-                if (scale > 0 && precision != 9) {
-                    typeStr.append("(").append(precision).append(", ").append(scale)
-                            .append(")");
-                }
-                rowList.set(1, typeStr.toString());
-            }
+            rowList.set(1, column.getOriginType().hideVersionForVersionColumn(false));
             result.addRow(rowList);
         }
         return result;
diff --git a/regression-test/data/datatype_p0/nested_types/meta/test_complextype_nested_version_schema.out b/regression-test/data/datatype_p0/nested_types/meta/test_complextype_nested_version_schema.out
new file mode 100644
index 00000000000..76418ce38e1
--- /dev/null
+++ b/regression-test/data/datatype_p0/nested_types/meta/test_complextype_nested_version_schema.out
@@ -0,0 +1,15 @@
+-- This file is automatically generated. You should know what you did if you want to edit this
+-- !sql --
+id	INT	Yes	true	\N	
+c1	ARRAY<DECIMAL(12, 1)>	Yes	false	\N	NONE
+c2	DECIMAL(12, 1)	Yes	false	\N	NONE
+c3	MAP<DECIMAL(12, 2),DATETIME>	Yes	false	\N	NONE
+c4	STRUCT<f1:DATE,f2:DATETIME,f3:DATE,f4:DATETIME,f5:DECIMAL>	Yes	false	\N	NONE
+
+-- !sql --
+id	INT	Yes	true	\N	
+c1	ARRAY<DECIMAL(12, 1)>	Yes	false	\N	NONE
+c2	DECIMAL(12, 1)	Yes	false	\N	NONE
+c3	MAP<DECIMAL(12, 2),DATETIME>	Yes	false	\N	NONE
+c4	STRUCT<f1:DATE,f2:DATETIME,f3:DATE,f4:DATETIME,f5:DECIMAL>	Yes	false	\N	NONE
+
diff --git a/regression-test/data/external_table_p0/jdbc/test_doris_jdbc_catalog.out b/regression-test/data/external_table_p0/jdbc/test_doris_jdbc_catalog.out
index 04812eb79ba..7867c17559e 100644
--- a/regression-test/data/external_table_p0/jdbc/test_doris_jdbc_catalog.out
+++ b/regression-test/data/external_table_p0/jdbc/test_doris_jdbc_catalog.out
@@ -104,10 +104,10 @@ arr_bigint_col	ARRAY<BIGINT>	Yes	false	\N	NONE
 arr_largeint_col	ARRAY<LARGEINT>	Yes	false	\N	NONE
 arr_float_col	ARRAY<FLOAT>	Yes	false	\N	NONE
 arr_double_col	ARRAY<DOUBLE>	Yes	false	\N	NONE
-arr_decimal1_col	ARRAY<DECIMALV3(10, 5)>	Yes	false	\N	NONE
-arr_decimal2_col	ARRAY<DECIMALV3(30, 10)>	Yes	false	\N	NONE
-arr_date_col	ARRAY<DATEV2>	Yes	false	\N	NONE
-arr_datetime_col	ARRAY<DATETIMEV2(3)>	Yes	false	\N	NONE
+arr_decimal1_col	ARRAY<DECIMAL(10, 5)>	Yes	false	\N	NONE
+arr_decimal2_col	ARRAY<DECIMAL(30, 10)>	Yes	false	\N	NONE
+arr_date_col	ARRAY<DATE>	Yes	false	\N	NONE
+arr_datetime_col	ARRAY<DATETIME(3)>	Yes	false	\N	NONE
 arr_char_col	ARRAY<TEXT>	Yes	false	\N	NONE
 arr_varchar_col	ARRAY<TEXT>	Yes	false	\N	NONE
 arr_string_col	ARRAY<TEXT>	Yes	false	\N	NONE
diff --git a/regression-test/data/external_table_p0/jdbc/test_oracle_jdbc_catalog.out b/regression-test/data/external_table_p0/jdbc/test_oracle_jdbc_catalog.out
index 06a38d57512..d835e1c0c48 100644
--- a/regression-test/data/external_table_p0/jdbc/test_oracle_jdbc_catalog.out
+++ b/regression-test/data/external_table_p0/jdbc/test_oracle_jdbc_catalog.out
@@ -184,7 +184,7 @@ INT_VALUE1	INT	Yes	false	\N	NONE
 INT_VALUE2	BIGINT	Yes	false	\N	NONE
 N1	TEXT	Yes	false	\N	NONE
 N2	LARGEINT	Yes	false	\N	NONE
-N3	DECIMAL	Yes	false	\N	NONE
+N3	DECIMAL(9, 2)	Yes	false	\N	NONE
 N4	LARGEINT	Yes	false	\N	NONE
 N5	LARGEINT	Yes	false	\N	NONE
 N6	DECIMAL(5, 2)	Yes	false	\N	NONE
diff --git a/regression-test/data/external_table_p0/jdbc/test_sqlserver_jdbc_catalog.out b/regression-test/data/external_table_p0/jdbc/test_sqlserver_jdbc_catalog.out
index b7becd6cdf0..29036aa3429 100644
--- a/regression-test/data/external_table_p0/jdbc/test_sqlserver_jdbc_catalog.out
+++ b/regression-test/data/external_table_p0/jdbc/test_sqlserver_jdbc_catalog.out
@@ -81,8 +81,8 @@ bigint_value	BIGINT	Yes	false	\N	NONE
 real_value	FLOAT	Yes	false	\N	NONE
 float_value	DOUBLE	Yes	false	\N	NONE
 floatn_value	FLOAT	Yes	false	\N	NONE
-decimal_value	DECIMAL	Yes	false	\N	NONE
-numeric_value	DECIMAL	Yes	false	\N	NONE
+decimal_value	DECIMAL(38, 0)	Yes	false	\N	NONE
+numeric_value	DECIMAL(38, 0)	Yes	false	\N	NONE
 decimal_value2	DECIMAL(38, 10)	Yes	false	\N	NONE
 numeric_value2	DECIMAL(38, 10)	Yes	false	\N	NONE
 char_value	TEXT	Yes	false	\N	NONE
diff --git a/regression-test/suites/datatype_p0/nested_types/meta/test_complextype_nested_version_schema.groovy b/regression-test/suites/datatype_p0/nested_types/meta/test_complextype_nested_version_schema.groovy
new file mode 100644
index 00000000000..ec5f6207940
--- /dev/null
+++ b/regression-test/suites/datatype_p0/nested_types/meta/test_complextype_nested_version_schema.groovy
@@ -0,0 +1,49 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+suite("test_complextype_nested_version_schema") {
+    sql """set enable_nereids_planner=true"""
+    // add array/map/struct
+    sql "DROP TABLE IF EXISTS `complext_nested_version`;"
+    def createTblSql = """
+    CREATE TABLE `complext_nested_version` (
+      `id` INT NULL,
+      `c1` ARRAY<DECIMALV3(12, 1)> NULL,
+      `c2` DECIMALV3(12, 1) NULL,
+      `c3` MAP<DECIMALV3(12, 2),DATETIMEV2> NULL,
+      `c4` STRUCT<f1:DATE,f2:DATETIME,f3:DATEV2,f4:DATETIMEV2,f5:DECIMALV3(9, 0)> NULL
+    ) ENGINE=OLAP
+    DUPLICATE KEY(`id`)
+    COMMENT 'OLAP'
+    DISTRIBUTED BY HASH(`id`) BUCKETS 10
+    PROPERTIES ("replication_allocation" = "tag.location.default: 1"); """
+
+    sql createTblSql
+
+    qt_sql """ desc complext_nested_version ;"""
+    String res = sql """ show create table complext_nested_version ;"""
+    assertTrue(!res.contains('DECIMALV3'))
+    assertTrue(!res.contains('DATEV2'))
+    assertTrue(!res.contains('DATETIMEV2'))
+
+    sql """set enable_nereids_planner=false"""
+    qt_sql """ desc complext_nested_version ;"""
+    String res2 = sql """ show create table complext_nested_version ;"""
+    assertTrue(!res2.contains('DECIMALV3'))
+    assertTrue(!res2.contains('DATEV2'))
+    assertTrue(!res2.contains('DATETIMEV2'))
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org