This is an automated email from the ASF dual-hosted git repository.
kxiao pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.0 by this push:
new ab32766b25e [FIX]Fix complex type meta schema in information database
#27203 (#27286)
ab32766b25e is described below
commit ab32766b25ec593d11e5a3909010d24642b1b116
Author: amory <[email protected]>
AuthorDate: Mon Nov 20 19:58:35 2023 +0800
[FIX]Fix complex type meta schema in information database #27203 (#27286)
---
.../exec/schema_scanner/schema_columns_scanner.cpp | 34 ++++++++++++
.../apache/doris/service/FrontendServiceImpl.java | 40 +++++++++-----
.../meta/test_complextype_information_schema.out | 61 ++++++++++++++++++++++
.../test_complextype_information_schema.groovy | 32 ++++++++++++
4 files changed, 153 insertions(+), 14 deletions(-)
diff --git a/be/src/exec/schema_scanner/schema_columns_scanner.cpp
b/be/src/exec/schema_scanner/schema_columns_scanner.cpp
index 91e5c77422f..ad71c646c03 100644
--- a/be/src/exec/schema_scanner/schema_columns_scanner.cpp
+++ b/be/src/exec/schema_scanner/schema_columns_scanner.cpp
@@ -237,6 +237,40 @@ std::string
SchemaColumnsScanner::_type_to_string(TColumnDesc& desc) {
case TPrimitiveType::JSONB: {
return "json";
}
+ case TPrimitiveType::MAP: {
+ // for old be service we should compatible
+ std::string ret = "map<";
+ if (!desc.children.empty()) {
+ for (int i = 0; i < desc.children.size() - 1; ++i) {
+ ret += _type_to_string(desc.children[i]) + ",";
+ }
+ ret += _type_to_string(desc.children[desc.children.size() - 1]);
+ }
+ ret += ">";
+ return ret;
+ }
+ case TPrimitiveType::ARRAY: {
+ // for old be service we should compitable
+ std::string ret = "array<";
+ if (!desc.children.empty()) {
+ ret += _type_to_string(desc.children[0]);
+ }
+ ret += ">";
+ return ret;
+ }
+ case TPrimitiveType::STRUCT: {
+ // for old be service we should compitable
+ std::string ret = "struct<";
+ if (!desc.children.empty()) {
+ for (int i = 0; i < desc.children.size() - 1; ++i) {
+ ret += _type_to_string(desc.children[i]) + ",";
+ }
+ ret += _type_to_string(desc.children[desc.children.size() - 1]);
+ }
+ ret += ">";
+ return ret;
+ }
+
default:
return "unknown";
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
b/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
index 938282c7644..ac1f941145f 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
@@ -977,20 +977,7 @@ public class FrontendServiceImpl implements
FrontendService.Iface {
try {
List<Column> baseSchema = table.getBaseSchemaOrEmpty();
for (Column column : baseSchema) {
- final TColumnDesc desc = new
TColumnDesc(column.getName(), column.getDataType().toThrift());
- final Integer precision =
column.getOriginType().getPrecision();
- if (precision != null) {
- desc.setColumnPrecision(precision);
- }
- final Integer columnLength =
column.getOriginType().getColumnSize();
- if (columnLength != null) {
- desc.setColumnLength(columnLength);
- }
- final Integer decimalDigits =
column.getOriginType().getDecimalDigits();
- if (decimalDigits != null) {
- desc.setColumnScale(decimalDigits);
- }
- desc.setIsAllowNull(column.isAllowNull());
+ final TColumnDesc desc = getColumnDesc(column);
final TColumnDef colDef = new TColumnDef(desc);
final String comment = column.getComment();
if (comment != null) {
@@ -1013,6 +1000,31 @@ public class FrontendServiceImpl implements
FrontendService.Iface {
return result;
}
+ public TColumnDesc getColumnDesc(Column column) {
+ final TColumnDesc desc = new TColumnDesc(column.getName(),
column.getDataType().toThrift());
+ final Integer precision = column.getOriginType().getPrecision();
+ if (precision != null) {
+ desc.setColumnPrecision(precision);
+ }
+ final Integer columnLength = column.getOriginType().getColumnSize();
+ if (columnLength != null) {
+ desc.setColumnLength(columnLength);
+ }
+ final Integer decimalDigits =
column.getOriginType().getDecimalDigits();
+ if (decimalDigits != null) {
+ desc.setColumnScale(decimalDigits);
+ }
+ desc.setIsAllowNull(column.isAllowNull());
+ if (column.getChildren().size() > 0) {
+ ArrayList<TColumnDesc> children = new ArrayList<>();
+ for (Column child : column.getChildren()) {
+ children.add(getColumnDesc(child));
+ }
+ desc.setChildren(children);
+ }
+ return desc;
+ }
+
@Override
public TShowVariableResult showVariables(TShowVariableRequest params)
throws TException {
TShowVariableResult result = new TShowVariableResult();
diff --git
a/regression-test/data/datatype_p0/nested_types/meta/test_complextype_information_schema.out
b/regression-test/data/datatype_p0/nested_types/meta/test_complextype_information_schema.out
new file mode 100644
index 00000000000..4a6f66c4e29
--- /dev/null
+++
b/regression-test/data/datatype_p0/nested_types/meta/test_complextype_information_schema.out
@@ -0,0 +1,61 @@
+-- This file is automatically generated. You should know what you did if you
want to edit this
+-- !sql --
+bigint bigint(20)
+array array<tinyint(1)>
+array array<tinyint(4)>
+array array<smallint(6)>
+array array<int(11)>
+array array<bigint(20)>
+array array<largeint>
+array array<float>
+array array<double>
+array array<decimalv3(20, 3)>
+array array<decimalv3(20, 3)>
+array array<date>
+array array<datetime>
+array array<date>
+array array<datetime>
+array array<char(15)>
+array array<varchar(100)>
+array array<string>
+
+-- !sql --
+bigint bigint(20)
+map map<tinyint(1),tinyint(4)>
+map map<tinyint(4),smallint(6)>
+map map<smallint(6),int(11)>
+map map<int(11),bigint(20)>
+map map<bigint(20),largeint>
+map map<largeint,float>
+map map<float,double>
+map map<double,decimalv3(20, 3)>
+map map<decimalv3(20, 3),decimalv3(20, 3)>
+map map<decimalv3(20, 3),date>
+map map<date,datetime>
+map map<datetime,date>
+map map<date,datetime>
+map map<datetime,char(15)>
+map map<char(15),varchar(100)>
+map map<varchar(100),string>
+map map<string,tinyint(1)>
+
+-- !sql --
+bigint bigint(20)
+struct
struct<int(11),tinyint(4),smallint(6),tinyint(1),bigint(20),largeint,float,double,decimalv3(20,
3),decimalv3(20, 3),date,datetime,date,datetime,char(15),varchar(100),string>
+struct
struct<int(11),tinyint(4),smallint(6),tinyint(1),bigint(20),largeint,float,double,decimalv3(20,
3),decimalv3(20, 3),date,datetime,date,datetime,char(15),varchar(100),string>
+struct
struct<int(11),tinyint(4),smallint(6),tinyint(1),bigint(20),largeint,float,double,decimalv3(20,
3),decimalv3(20, 3),date,datetime,date,datetime,char(15),varchar(100),string>
+struct
struct<int(11),tinyint(4),smallint(6),tinyint(1),bigint(20),largeint,float,double,decimalv3(20,
3),decimalv3(20, 3),date,datetime,date,datetime,char(15),varchar(100),string>
+struct
struct<int(11),tinyint(4),smallint(6),tinyint(1),bigint(20),largeint,float,double,decimalv3(20,
3),decimalv3(20, 3),date,datetime,date,datetime,char(15),varchar(100),string>
+struct
struct<int(11),tinyint(4),smallint(6),tinyint(1),bigint(20),largeint,float,double,decimalv3(20,
3),decimalv3(20, 3),date,datetime,date,datetime,char(15),varchar(100),string>
+struct
struct<int(11),tinyint(4),smallint(6),tinyint(1),bigint(20),largeint,float,double,decimalv3(20,
3),decimalv3(20, 3),date,datetime,date,datetime,char(15),varchar(100),string>
+struct
struct<int(11),tinyint(4),smallint(6),tinyint(1),bigint(20),largeint,float,double,decimalv3(20,
3),decimalv3(20, 3),date,datetime,date,datetime,char(15),varchar(100),string>
+struct
struct<int(11),tinyint(4),smallint(6),tinyint(1),bigint(20),largeint,float,double,decimalv3(20,
3),decimalv3(20, 3),date,datetime,date,datetime,char(15),varchar(100),string>
+struct
struct<int(11),tinyint(4),smallint(6),tinyint(1),bigint(20),largeint,float,double,decimalv3(20,
3),decimalv3(20, 3),date,datetime,date,datetime,char(15),varchar(100),string>
+struct
struct<int(11),tinyint(4),smallint(6),tinyint(1),bigint(20),largeint,float,double,decimalv3(20,
3),decimalv3(20, 3),date,datetime,date,datetime,char(15),varchar(100),string>
+struct
struct<int(11),tinyint(4),smallint(6),tinyint(1),bigint(20),largeint,float,double,decimalv3(20,
3),decimalv3(20, 3),date,datetime,date,datetime,char(15),varchar(100),string>
+struct
struct<int(11),tinyint(4),smallint(6),tinyint(1),bigint(20),largeint,float,double,decimalv3(20,
3),decimalv3(20, 3),date,datetime,date,datetime,char(15),varchar(100),string>
+struct
struct<int(11),tinyint(4),smallint(6),tinyint(1),bigint(20),largeint,float,double,decimalv3(20,
3),decimalv3(20, 3),date,datetime,date,datetime,char(15),varchar(100),string>
+struct
struct<int(11),tinyint(4),smallint(6),tinyint(1),bigint(20),largeint,float,double,decimalv3(20,
3),decimalv3(20, 3),date,datetime,date,datetime,char(15),varchar(100),string>
+struct
struct<int(11),tinyint(4),smallint(6),tinyint(1),bigint(20),largeint,float,double,decimalv3(20,
3),decimalv3(20, 3),date,datetime,date,datetime,char(15),varchar(100),string>
+struct
struct<int(11),tinyint(4),smallint(6),tinyint(1),bigint(20),largeint,float,double,decimalv3(20,
3),decimalv3(20, 3),date,datetime,date,datetime,char(15),varchar(100),string>
+
diff --git
a/regression-test/suites/datatype_p0/nested_types/meta/test_complextype_information_schema.groovy
b/regression-test/suites/datatype_p0/nested_types/meta/test_complextype_information_schema.groovy
new file mode 100644
index 00000000000..9a998732871
--- /dev/null
+++
b/regression-test/suites/datatype_p0/nested_types/meta/test_complextype_information_schema.groovy
@@ -0,0 +1,32 @@
+// 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_information_schema") {
+ sql """set enable_nereids_planner=false"""
+ // add array/map/struct
+ def table_names = ["array_info", "map_info", "struct_info"]
+ for (int i = 0; i < table_names.size(); ++i) {
+ sql """ DROP TABLE IF EXISTS ${table_names[i]} """
+ String result = create_table_with_nested_type(1, [i], table_names[i])
+ sql result
+ }
+
+ for (int i = 0; i < table_names.size(); ++i) {
+ sql "use information_schema"
+ qt_sql "select data_type, column_type from columns where
TABLE_NAME=\"${table_names[i]}\";"
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]