You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2022/06/01 15:28:59 UTC
[incubator-doris] 04/22: [bugfix] Fix create table like when having hidden columns (#9694)
This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch dev-1.0.1
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git
commit 1a43e0d4125bff42f9b79a72caaf9580a3716322
Author: xueweizhang <zx...@163.com>
AuthorDate: Sun May 29 18:02:16 2022 +0800
[bugfix] Fix create table like when having hidden columns (#9694)
---
.../java/org/apache/doris/catalog/Catalog.java | 24 +++++++---
.../data_model/unique/test_unique_table_like.out | 15 +++++++
.../unique/test_unique_table_like.groovy | 52 ++++++++++++++++++++++
3 files changed, 86 insertions(+), 5 deletions(-)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Catalog.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/Catalog.java
index ffded947bf..bf04888bf3 100755
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Catalog.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Catalog.java
@@ -3087,7 +3087,7 @@ public class Catalog {
throw new DdlException("Table[" + table.getName() + "] is external, not support rollup copy");
}
- Catalog.getDdlStmt(stmt, stmt.getDbName(), table, createTableStmt, null, null, false, false);
+ Catalog.getDdlStmt(stmt, stmt.getDbName(), table, createTableStmt, null, null, false, false, true);
if (createTableStmt.isEmpty()) {
ErrorReport.reportDdlException(ErrorCode.ERROR_CREATE_TABLE_LIKE_EMPTY, "CREATE");
}
@@ -4076,11 +4076,18 @@ public class Catalog {
public static void getDdlStmt(Table table, List<String> createTableStmt, List<String> addPartitionStmt,
List<String> createRollupStmt, boolean separatePartition, boolean hidePassword) {
- getDdlStmt(null, null, table, createTableStmt, addPartitionStmt, createRollupStmt, separatePartition, hidePassword);
+ getDdlStmt(null, null, table, createTableStmt, addPartitionStmt, createRollupStmt,
+ separatePartition, hidePassword, false);
}
- public static void getDdlStmt(DdlStmt ddlStmt, String dbName, Table table, List<String> createTableStmt, List<String> addPartitionStmt,
- List<String> createRollupStmt, boolean separatePartition, boolean hidePassword) {
+ /**
+ * Get table ddl stmt.
+ *
+ * @param getDdlForLike Get schema for 'create table like' or not. when true, without hidden columns.
+ */
+ public static void getDdlStmt(DdlStmt ddlStmt, String dbName, Table table, List<String> createTableStmt,
+ List<String> addPartitionStmt, List<String> createRollupStmt,
+ boolean separatePartition, boolean hidePassword, boolean getDdlForLike) {
StringBuilder sb = new StringBuilder();
// 1. create table
@@ -4105,7 +4112,14 @@ public class Catalog {
}
sb.append("`").append(table.getName()).append("` (\n");
int idx = 0;
- for (Column column : table.getBaseSchema()) {
+ List<Column> columns;
+ // when 'create table B like A', always return schema of A without hidden columns
+ if (getDdlForLike) {
+ columns = table.getBaseSchema(false);
+ } else {
+ columns = table.getBaseSchema();
+ }
+ for (Column column : columns) {
if (idx++ != 0) {
sb.append(",\n");
}
diff --git a/regression-test/data/data_model/unique/test_unique_table_like.out b/regression-test/data/data_model/unique/test_unique_table_like.out
new file mode 100644
index 0000000000..ffcbaf18cc
--- /dev/null
+++ b/regression-test/data/data_model/unique/test_unique_table_like.out
@@ -0,0 +1,15 @@
+-- This file is automatically generated. You should know what you did if you want to edit this
+-- !desc_uniq_table --
+k INT Yes true \N
+int_value INT Yes false \N REPLACE
+char_value CHAR(10) Yes false \N REPLACE
+date_value DATE Yes false \N REPLACE
+__DORIS_DELETE_SIGN__ TINYINT No false 0 REPLACE
+
+-- !desc_uniq_table --
+k INT Yes true \N
+int_value INT Yes false \N REPLACE
+char_value CHAR(10) Yes false \N REPLACE
+date_value DATE Yes false \N REPLACE
+__DORIS_DELETE_SIGN__ TINYINT No false 0 REPLACE
+
diff --git a/regression-test/suites/data_model/unique/test_unique_table_like.groovy b/regression-test/suites/data_model/unique/test_unique_table_like.groovy
new file mode 100644
index 0000000000..6250b61138
--- /dev/null
+++ b/regression-test/suites/data_model/unique/test_unique_table_like.groovy
@@ -0,0 +1,52 @@
+// 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_unique_table_like", "data_model") {
+ def dbName = "test_unique_db"
+ List<List<Object>> db = sql "show databases like '${dbName}'"
+ if (db.size() == 0) {
+ sql "CREATE DATABASE ${dbName}"
+ }
+ sql "use ${dbName}"
+
+ // test uniq table like
+ def tbNameA = "test_uniq"
+ def tbNameB = "test_uniq_like"
+ sql "ADMIN SET FRONTEND CONFIG ('enable_batch_delete_by_default' = 'true')"
+ sql "SET show_hidden_columns=true"
+ sql "DROP TABLE IF EXISTS ${tbNameA}"
+ sql """
+ CREATE TABLE IF NOT EXISTS ${tbNameA} (
+ k int,
+ int_value int,
+ char_value char(10),
+ date_value date
+ )
+ ENGINE=OLAP
+ UNIQUE KEY(k)
+ DISTRIBUTED BY HASH(k) BUCKETS 5 properties("replication_num" = "1");
+ """
+ qt_desc_uniq_table "desc ${tbNameA}"
+ sql """
+ CREATE TABLE IF NOT EXISTS ${tbNameB} LIKE ${tbNameA};
+ """
+
+ qt_desc_uniq_table "desc ${tbNameB}"
+ sql "DROP TABLE ${tbNameA}"
+ sql "DROP TABLE ${tbNameB}"
+}
+
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org