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 42d480699d3 [test](regression) Add more alter stmt regression case 
(#26988) (#27193)
42d480699d3 is described below

commit 42d480699d3fdc2674af9883dac85c31d9cc6780
Author: Lei Zhang <[email protected]>
AuthorDate: Fri Nov 17 21:54:58 2023 +0800

    [test](regression) Add more alter stmt regression case (#26988) (#27193)
---
 .../data/schema_change_p0/test_alter_parition.out  |   6 +
 .../test_alter_table_add_columns.out               |  40 ++++
 .../test_alter_table_drop_column.out               |  41 ++++
 .../test_alter_table_modify_column.out             |  29 +++
 .../schema_change_p0/test_alter_table_replace.out  |  26 +++
 .../schema_change_p0/test_alter_parition.groovy    |  65 ++++++
 .../test_alter_table_add_columns.groovy            |  88 +++++++++
 .../test_alter_table_drop_column.groovy            | 176 +++++++++++++++++
 .../test_alter_table_modify_column.groovy          | 219 +++++++++++++++++++++
 .../test_alter_table_replace.groovy                | 104 ++++++++++
 10 files changed, 794 insertions(+)

diff --git a/regression-test/data/schema_change_p0/test_alter_parition.out 
b/regression-test/data/schema_change_p0/test_alter_parition.out
new file mode 100644
index 00000000000..cad31310640
--- /dev/null
+++ b/regression-test/data/schema_change_p0/test_alter_parition.out
@@ -0,0 +1,6 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !select --
+1      2017-01-01      Beijing 10      1       1       30      20      \N      
\N
+2      2017-02-01      Beijing 10      1       1       31      19      \N      
\N
+3      2017-03-01      Beijing 10      1       1       31      21      \N      
\N
+
diff --git 
a/regression-test/data/schema_change_p0/test_alter_table_add_columns.out 
b/regression-test/data/schema_change_p0/test_alter_table_add_columns.out
new file mode 100644
index 00000000000..809993434ad
--- /dev/null
+++ b/regression-test/data/schema_change_p0/test_alter_table_add_columns.out
@@ -0,0 +1,40 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !order --
+1      1       xxx     1
+2      2       xxx     2
+3      3       xxx     3
+
+-- !order --
+1      1       xxx     1       1       2
+2      2       xxx     2       1       2
+3      3       xxx     3       1       2
+
+-- !order --
+1      1       xxx     1       1       2
+2      2       xxx     2       1       2
+3      3       xxx     3       1       2
+4      4       yyy     4       4       4
+5      5       yyy     5       5       5
+6      6       yyy     6       6       6
+
+-- !sql --
+siteid INT     Yes     true    10      
+citycode       SMALLINT        Yes     true    \N      
+username       VARCHAR(32)     Yes     true    test    
+new_k1 INT     Yes     true    1       
+new_k2 INT     Yes     true    2       
+pv     BIGINT  Yes     false   0       SUM
+new_v1 INT     Yes     false   1       MAX
+new_v2 INT     Yes     false   2       MAX
+
+-- !order --
+1      1       xxx     1       2       1       1       2
+2      2       xxx     1       2       2       1       2
+3      3       xxx     1       2       3       1       2
+4      4       yyy     1       2       4       4       4
+5      5       yyy     1       2       5       5       5
+6      6       yyy     1       2       6       6       6
+7      7       zzz     7       7       7       7       7
+8      8       zzz     8       8       8       8       8
+9      9       zzz     9       9       9       9       9
+
diff --git 
a/regression-test/data/schema_change_p0/test_alter_table_drop_column.out 
b/regression-test/data/schema_change_p0/test_alter_table_drop_column.out
new file mode 100644
index 00000000000..4da60943997
--- /dev/null
+++ b/regression-test/data/schema_change_p0/test_alter_table_drop_column.out
@@ -0,0 +1,41 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !order --
+1      1       xxx     1
+2      2       xxx     2
+3      3       xxx     3
+
+-- !order --
+1      1       xxx     1
+2      2       xxx     2
+3      3       xxx     3
+
+-- !order --
+1      1       xxx     1
+2      2       xxx     2
+3      3       xxx     3
+
+-- !order --
+1      1       xxx     1
+2      2       xxx     2
+3      3       xxx     3
+
+-- !order --
+1      1       xxx     1
+2      2       xxx     2
+3      3       xxx     3
+
+-- !order --
+1      1       xxx     1
+2      2       xxx     2
+3      3       xxx     3
+
+-- !order --
+1      1       xxx     1
+2      2       xxx     2
+3      3       xxx     3
+
+-- !order --
+1      1       xxx     1
+2      2       xxx     2
+3      3       xxx     3
+
diff --git 
a/regression-test/data/schema_change_p0/test_alter_table_modify_column.out 
b/regression-test/data/schema_change_p0/test_alter_table_modify_column.out
new file mode 100644
index 00000000000..947717f4adf
--- /dev/null
+++ b/regression-test/data/schema_change_p0/test_alter_table_modify_column.out
@@ -0,0 +1,29 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !order --
+1      1       xxx     1
+2      2       xxx     2
+3      3       xxx     3
+
+-- !order --
+1      1       xxx     1
+2      2       xxx     2
+3      3       xxx     3
+
+-- !order --
+1      1       xxx     1
+2      2       xxx     2
+3      3       xxx     3
+
+-- !order --
+xxx    1       1       1
+xxx    2       2       2
+xxx    3       3       3
+yyy    4       4       4
+
+-- !order --
+1      1       xxx     1
+2      2       xxx     2
+3      3       xxx     3
+4      4       yyy     4
+5      5       zzz     5
+
diff --git a/regression-test/data/schema_change_p0/test_alter_table_replace.out 
b/regression-test/data/schema_change_p0/test_alter_table_replace.out
new file mode 100644
index 00000000000..40698fdd537
--- /dev/null
+++ b/regression-test/data/schema_change_p0/test_alter_table_replace.out
@@ -0,0 +1,26 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !select --
+1      2017-01-01      Beijing 10      1       1       30      20      \N      
\N
+2      2017-02-01      Beijing 10      1       1       31      19      \N      
\N
+3      2017-03-01      Beijing 10      1       1       31      21      \N      
\N
+
+-- !select --
+4      2017-01-01      Beijing 10      1       1       30      20      \N      
\N
+5      2017-02-01      Beijing 10      1       1       31      19      \N      
\N
+6      2017-03-01      Beijing 10      1       1       31      21      \N      
\N
+
+-- !select --
+4      2017-01-01      Beijing 10      1       1       30      20      \N      
\N
+5      2017-02-01      Beijing 10      1       1       31      19      \N      
\N
+6      2017-03-01      Beijing 10      1       1       31      21      \N      
\N
+
+-- !select --
+1      2017-01-01      Beijing 10      1       1       30      20      \N      
\N
+2      2017-02-01      Beijing 10      1       1       31      19      \N      
\N
+3      2017-03-01      Beijing 10      1       1       31      21      \N      
\N
+
+-- !select --
+1      2017-01-01      Beijing 10      1       1       30      20      \N      
\N
+2      2017-02-01      Beijing 10      1       1       31      19      \N      
\N
+3      2017-03-01      Beijing 10      1       1       31      21      \N      
\N
+
diff --git a/regression-test/suites/schema_change_p0/test_alter_parition.groovy 
b/regression-test/suites/schema_change_p0/test_alter_parition.groovy
new file mode 100644
index 00000000000..98439c007e3
--- /dev/null
+++ b/regression-test/suites/schema_change_p0/test_alter_parition.groovy
@@ -0,0 +1,65 @@
+// 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_alter_partition") {
+    def tbName = "test_alter_partition"
+
+    sql "DROP TABLE IF EXISTS ${tbName} FORCE"
+    sql """
+        CREATE TABLE ${tbName} (
+            `user_id` LARGEINT NOT NULL COMMENT "用户id",
+            `date` DATE NOT NULL COMMENT "数据灌入日期时间",
+            `city` VARCHAR(20) COMMENT "用户所在城市",
+            `age` SMALLINT COMMENT "用户年龄",
+            `sex` TINYINT COMMENT "用户性别",
+
+            `cost` BIGINT SUM DEFAULT "0" COMMENT "用户总消费",
+            `max_dwell_time` INT MAX DEFAULT "0" COMMENT "用户最大停留时间",
+            `min_dwell_time` INT MIN DEFAULT "99999" COMMENT "用户最小停留时间",
+            `hll_col` HLL HLL_UNION NOT NULL COMMENT "HLL列",
+            `bitmap_col` Bitmap BITMAP_UNION NOT NULL COMMENT "bitmap列")
+        AGGREGATE KEY(`user_id`, `date`, `city`, `age`, `sex`)
+        PARTITION BY RANGE(`date`)
+        (
+            PARTITION `p201701` VALUES LESS THAN ("2017-02-01"),
+            PARTITION `p201702` VALUES LESS THAN ("2017-03-01"),
+            PARTITION `p201703` VALUES LESS THAN ("2017-04-01")
+        )
+        DISTRIBUTED BY HASH(`user_id`)
+        BUCKETS 1
+        PROPERTIES (
+                "replication_num" = "1"
+            );
+        ;
+        """
+
+    sql """ INSERT INTO ${tbName} VALUES
+            (1, '2017-01-01', 'Beijing', 10, 1, 1, 30, 20, hll_hash(1), 
to_bitmap(1)),
+            (2, '2017-02-01', 'Beijing', 10, 1, 1, 31, 19, hll_hash(2), 
to_bitmap(2)),
+            (3, '2017-03-01', 'Beijing', 10, 1, 1, 31, 21, hll_hash(2), 
to_bitmap(2))
+        """
+
+    qt_select """ select * from ${tbName} order by user_id"""
+
+    // modify in_memory property
+    // https://github.com/apache/doris/pull/18731
+    test {
+        sql """ALTER TABLE ${tbName} MODIFY PARTITION p201701 SET ("in_memory" 
= "true");"""
+        exception "Not support set 'in_memory'='true' now!"
+    }
+    sql "DROP TABLE IF EXISTS ${tbName} FORCE"
+}
\ No newline at end of file
diff --git 
a/regression-test/suites/schema_change_p0/test_alter_table_add_columns.groovy 
b/regression-test/suites/schema_change_p0/test_alter_table_add_columns.groovy
new file mode 100644
index 00000000000..33484f95bf8
--- /dev/null
+++ 
b/regression-test/suites/schema_change_p0/test_alter_table_add_columns.groovy
@@ -0,0 +1,88 @@
+// 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_alter_table_add_columns") {
+    def tbName = "test_alter_table_add_columns"
+
+    sql "DROP TABLE IF EXISTS ${tbName} FORCE"
+    sql """
+        CREATE TABLE `${tbName}`
+        (
+            `siteid` INT DEFAULT '10',
+            `citycode` SMALLINT,
+            `username` VARCHAR(32) DEFAULT 'test',
+            `pv` BIGINT SUM DEFAULT '0'
+        )
+        AGGREGATE KEY(`siteid`, `citycode`, `username`)
+        DISTRIBUTED BY HASH(siteid) BUCKETS 1
+        PROPERTIES (
+            "replication_num" = "1"
+        );
+    """
+
+    sql """ INSERT INTO ${tbName} VALUES
+            (1, 1, "xxx", 1),
+            (2, 2, "xxx", 2),
+            (3, 3, "xxx", 3);
+        """
+
+    qt_order """ select * from ${tbName} order by siteid"""
+
+    // Add two value column light schema change is true
+    sql """ alter table ${tbName} ADD COLUMN (new_v1 INT MAX default "1" , 
new_v2 INT MAX default "2");"""
+
+    qt_order """ select * from ${tbName} order by siteid"""
+
+    sql """ INSERT INTO ${tbName} VALUES
+            (4, 4, "yyy", 4, 4, 4),
+            (5, 5, "yyy", 5, 5, 5),
+            (6, 6, "yyy", 6, 6, 6);
+        """
+
+    qt_order """ select * from ${tbName} order by siteid"""
+
+    // Add one value column light schema change is false
+    sleep(1000)
+    sql """ alter table ${tbName} ADD COLUMN (new_k1 INT DEFAULT '1', new_k2 
INT DEFAULT '2');"""
+    def waitSchemaChangeJob = { String tableName /* param */ ->
+        int tryTimes = 30
+        while (tryTimes-- > 0) {
+            def jobResult = sql """SHOW ALTER TABLE COLUMN WHERE 
IndexName='${tableName}' ORDER BY createtime DESC LIMIT 1 """
+            def jobState = jobResult[0][9].toString()
+            if ('cancelled'.equalsIgnoreCase(jobState)) {
+                logger.info("jobResult:{}", jobResult)
+                throw new IllegalStateException("${tableName}'s job has been 
cancelled")
+            }
+            if ('finished'.equalsIgnoreCase(jobState)) {
+                logger.info("jobResult:{}", jobResult)
+                break
+            }
+            sleep(10000)
+        }
+    }
+
+    waitSchemaChangeJob(tbName)
+    qt_sql """ DESC ${tbName}"""
+
+    sql """ INSERT INTO ${tbName} VALUES
+            (7, 7, "zzz", 7, 7, 7, 7, 7),
+            (8, 8, "zzz", 8, 8, 8, 8, 8),
+            (9, 9, "zzz", 9, 9, 9, 9, 9);
+        """
+    qt_order """ select * from ${tbName} order by siteid"""
+    sql "DROP TABLE IF EXISTS ${tbName} FORCE"
+}
\ No newline at end of file
diff --git 
a/regression-test/suites/schema_change_p0/test_alter_table_drop_column.groovy 
b/regression-test/suites/schema_change_p0/test_alter_table_drop_column.groovy
new file mode 100644
index 00000000000..433cbadcddf
--- /dev/null
+++ 
b/regression-test/suites/schema_change_p0/test_alter_table_drop_column.groovy
@@ -0,0 +1,176 @@
+// 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_alter_table_drop_column") {
+    // unique model table
+    def uniqueTableName = "test_alter_table_drop_column_unique"
+    def uniqueTableRollupName = "test_alter_table_drop_column_rollup_unique"
+
+    sql "DROP TABLE IF EXISTS ${uniqueTableName} FORCE"
+    sql """
+        CREATE TABLE `${uniqueTableName}`
+        (
+            `siteid` INT DEFAULT '10',
+            `citycode` SMALLINT,
+            `username` VARCHAR(32) DEFAULT 'test',
+            `pv` BIGINT DEFAULT '0'
+        )
+        UNIQUE KEY(`siteid`, `citycode`, `username`)
+        DISTRIBUTED BY HASH(siteid) BUCKETS 1
+        PROPERTIES (
+            "replication_num" = "1",
+            "bloom_filter_columns" = "pv"
+        );
+    """
+
+    sql "ALTER TABLE ${uniqueTableName} ADD ROLLUP 
${uniqueTableRollupName}(`citycode`,`siteid`,`username`,`pv`);"
+    def waitRollupJob = { String tableName /* param */ ->
+        int tryTimes = 30
+        while (tryTimes-- > 0) {
+            def jobResult = sql """SHOW ALTER TABLE ROLLUP WHERE 
TableName='${tableName}' ORDER BY CreateTime DESC LIMIT 1"""
+            def jobState = jobResult[0][8].toString()
+            if ('cancelled'.equalsIgnoreCase(jobState)) {
+                logger.info("jobResult:{}", jobResult)
+                throw new IllegalStateException("${tableName}'s job has been 
cancelled")
+            }
+            if ('finished'.equalsIgnoreCase(jobState)) {
+                logger.info("jobResult:{}", jobResult)
+                return;
+            }
+            sleep(10000)
+        }
+        assertTrue(false)
+    }
+
+    waitRollupJob(uniqueTableName)
+
+    sql """ INSERT INTO ${uniqueTableName} VALUES
+            (1, 1, "xxx", 1),
+            (2, 2, "xxx", 2),
+            (3, 3, "xxx", 3);
+        """
+
+    qt_order """ select * from ${uniqueTableName} order by siteid"""
+    qt_order """ select * from ${uniqueTableName} order by citycode"""
+
+    test {
+        sql """ alter table ${uniqueTableName} drop COLUMN siteid;"""
+        // check exception message contains
+        exception "Can not drop key column in Unique data model table"
+    }
+
+    def waitSchemaChangeJob = { String tableName /* param */ ->
+        int tryTimes = 30
+        while (tryTimes-- > 0) {
+            def jobResult = sql """SHOW ALTER TABLE COLUMN WHERE 
IndexName='${tableName}' ORDER BY createtime DESC LIMIT 1 """
+            def jobState = jobResult[0][9].toString()
+            if ('cancelled'.equalsIgnoreCase(jobState)) {
+                logger.info("jobResult:{}", jobResult)
+                throw new IllegalStateException("${tableName}'s job has been 
cancelled")
+            }
+            if ('finished'.equalsIgnoreCase(jobState)) {
+                logger.info("jobResult:{}", jobResult)
+                return
+            }
+            sleep(10000)
+        }
+        assertTrue(false)
+    }
+
+    sql """ alter table ${uniqueTableName} drop COLUMN pv from 
${uniqueTableRollupName};"""
+    waitSchemaChangeJob(uniqueTableName)
+
+    qt_order """ select * from ${uniqueTableName} order by siteid"""
+    qt_order """ select * from ${uniqueTableName} order by citycode"""
+
+    sql "DROP TABLE IF EXISTS ${uniqueTableName} FORCE"
+
+    // aggregage model table
+    def aggTableName = "test_alter_table_drop_column_agg"
+    def aggTableRollupName = "test_alter_table_drop_column_rollup_agg"
+
+    sql "DROP TABLE IF EXISTS ${aggTableName} FORCE"
+    sql """
+        CREATE TABLE `${aggTableName}`
+        (
+            `siteid` INT DEFAULT '10',
+            `citycode` SMALLINT,
+            `username` VARCHAR(32) DEFAULT 'test',
+            `pv` BIGINT REPLACE DEFAULT '0'
+        )
+        AGGREGATE KEY(`siteid`, `citycode`, `username`)
+        DISTRIBUTED BY HASH(siteid) BUCKETS 1
+        PROPERTIES (
+            "replication_num" = "1"
+        );
+    """
+    sql "ALTER TABLE ${aggTableName} ADD ROLLUP 
${aggTableRollupName}(`citycode`,`siteid`,`username`,`pv`);"
+    waitRollupJob(aggTableName)
+    sql """ INSERT INTO ${aggTableName} VALUES
+            (1, 1, "xxx", 1),
+            (2, 2, "xxx", 2),
+            (3, 3, "xxx", 3);
+        """
+
+    qt_order """ select * from ${aggTableName} order by siteid"""
+    qt_order """ select * from ${aggTableName} order by citycode"""
+
+    test {
+        sql """ alter table ${aggTableName} drop COLUMN citycode from 
${aggTableRollupName};"""
+        // check exception message contains
+        exception "Can not drop key column when rollup has value column with 
REPLACE aggregation method"
+    }
+
+    sql """ alter table ${aggTableName} drop COLUMN pv from 
${aggTableRollupName};"""
+    waitSchemaChangeJob(aggTableName)
+
+    qt_order """ select * from ${aggTableName} order by siteid"""
+    qt_order """ select * from ${aggTableName} order by citycode"""
+
+    test {
+        sql """ alter table ${aggTableName} drop COLUMN pv from 
${aggTableRollupName};"""
+        // check exception message contains
+        exception "Column does not exists"
+    }
+
+    // duplicate model table
+    def dupTableName = "test_alter_table_drop_column_dup"
+
+    sql "DROP TABLE IF EXISTS ${dupTableName} FORCE"
+    sql """
+        CREATE TABLE `${dupTableName}`
+        (
+            `siteid` INT DEFAULT '10',
+            `citycode` SMALLINT,
+            `username` VARCHAR(32) DEFAULT 'test',
+            `pv` BIGINT SUM DEFAULT '0'
+        )
+        DUPLICATE KEY(`siteid`, `citycode`, `username`)
+        DISTRIBUTED BY HASH(siteid) BUCKETS 1
+        PROPERTIES (
+            "replication_num" = "1"
+        );
+    """
+
+    test {
+        sql """alter table ${dupTableName} drop COLUMN siteid;"""
+        // check exception message contains
+        exception "Distribution column[siteid] cannot be dropped"
+    }
+
+    sql "DROP TABLE IF EXISTS ${dupTableName} FORCE"
+}
\ No newline at end of file
diff --git 
a/regression-test/suites/schema_change_p0/test_alter_table_modify_column.groovy 
b/regression-test/suites/schema_change_p0/test_alter_table_modify_column.groovy
new file mode 100644
index 00000000000..8df8e911229
--- /dev/null
+++ 
b/regression-test/suites/schema_change_p0/test_alter_table_modify_column.groovy
@@ -0,0 +1,219 @@
+// 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_alter_table_modify_column") {
+    def waitRollupJob = { String tableName /* param */ ->
+        int tryTimes = 30
+        while (tryTimes-- > 0) {
+            def jobResult = sql """SHOW ALTER TABLE ROLLUP WHERE 
TableName='${tableName}' ORDER BY CreateTime DESC LIMIT 1"""
+            def jobState = jobResult[0][8].toString()
+            if ('cancelled'.equalsIgnoreCase(jobState)) {
+                logger.info("jobResult:{}", jobResult)
+                throw new IllegalStateException("${tableName}'s job has been 
cancelled")
+            }
+            if ('finished'.equalsIgnoreCase(jobState)) {
+                logger.info("jobResult:{}", jobResult)
+                return;
+            }
+            sleep(10000)
+        }
+        assertTrue(false)
+    }
+
+    def waitSchemaChangeJob = { String tableName /* param */ ->
+        int tryTimes = 30
+        while (tryTimes-- > 0) {
+            def jobResult = sql """SHOW ALTER TABLE COLUMN WHERE 
IndexName='${tableName}' ORDER BY createtime DESC LIMIT 1 """
+            def jobState = jobResult[0][9].toString()
+            if ('cancelled'.equalsIgnoreCase(jobState)) {
+                logger.info("jobResult:{}", jobResult)
+                throw new IllegalStateException("${tableName}'s job has been 
cancelled")
+            }
+            if ('finished'.equalsIgnoreCase(jobState)) {
+                logger.info("jobResult:{}", jobResult)
+                return
+            }
+            sleep(10000)
+        }
+        assertTrue(false)
+    }
+
+    // unique model table
+    def uniqueTableName = "test_alter_table_modify_column_unique"
+
+    sql "DROP TABLE IF EXISTS ${uniqueTableName} FORCE;"
+    sql """
+        CREATE TABLE `${uniqueTableName}`
+        (
+            `siteid` INT DEFAULT '10',
+            `citycode` SMALLINT,
+            `username` VARCHAR(32) DEFAULT 'test',
+            `pv` BIGINT DEFAULT '0'
+        )
+        UNIQUE KEY(`siteid`, `citycode`, `username`)
+        DISTRIBUTED BY HASH(siteid) BUCKETS 1
+        PROPERTIES (
+            "replication_num" = "1"
+        );
+    """
+
+    sql """ INSERT INTO ${uniqueTableName} VALUES
+            (1, 1, "xxx", 1),
+            (2, 2, "xxx", 2),
+            (3, 3, "xxx", 3);
+        """
+
+    qt_order """select * from ${uniqueTableName} order by siteid"""
+
+    test {
+        sql """alter table ${uniqueTableName} modify COLUMN siteid INT SUM 
DEFAULT '0';"""
+        // check exception message contains
+        exception "Can not assign aggregation method on column in Unique data 
model table"
+    }
+
+    sql "DROP TABLE IF EXISTS ${uniqueTableName} FORCE"
+
+    // aggregate model table
+    def aggTableName = "test_alter_table_modify_column_agg"
+
+    sql "DROP TABLE IF EXISTS ${aggTableName} FORCE"
+    sql """
+        CREATE TABLE `${aggTableName}`
+        (
+            `siteid` INT DEFAULT '10',
+            `citycode` SMALLINT,
+            `username` VARCHAR(32) DEFAULT 'test',
+            `pv` BIGINT SUM DEFAULT '0'
+        )
+        AGGREGATE KEY(`siteid`, `citycode`, `username`)
+        DISTRIBUTED BY HASH(siteid) BUCKETS 1
+        PROPERTIES (
+            "replication_num" = "1"
+        );
+    """
+
+    sql """ INSERT INTO ${aggTableName} VALUES
+            (1, 1, "xxx", 1),
+            (2, 2, "xxx", 2),
+            (3, 3, "xxx", 3);
+        """
+
+    qt_order """select * from ${aggTableName} order by siteid"""
+
+    test {
+        sql """alter table ${aggTableName} modify COLUMN siteid INT key SUM 
DEFAULT '0';"""
+        // check exception message contains
+        exception "Key column can not set aggregation type"
+    }
+
+    test {
+        sql """alter table ${aggTableName} modify COLUMN pv BIGINT DEFAULT 
'0';"""
+        // check exception message contains
+        exception "Can not change aggregation typ"
+    }
+
+    sql "DROP TABLE IF EXISTS ${aggTableName} FORCE"
+
+    // duplicate model table
+    def dupTableName = "test_alter_table_modify_column_dup"
+    def dupTableRollupName = "test_alter_table_modify_column_dup_rollup"
+
+    sql "DROP TABLE IF EXISTS ${dupTableName} FORCE"
+    sql """
+        CREATE TABLE `${dupTableName}`
+        (
+            `citycode` SMALLINT DEFAULT '10',
+            `siteid` INT DEFAULT '10',
+            `username` VARCHAR(32) DEFAULT 'test',
+            `pv` BIGINT SUM DEFAULT '0'
+        )
+        DUPLICATE KEY(`siteid`, `citycode`, `username`)
+        DISTRIBUTED BY HASH(siteid) BUCKETS 1
+        PROPERTIES (
+            "replication_num" = "1"
+        );
+    """
+
+    sql "ALTER TABLE ${dupTableName} ADD ROLLUP 
${dupTableRollupName}(`siteid`,`citycode`,`username`,`pv`);"
+    waitRollupJob(dupTableName)
+
+    sql """ INSERT INTO ${dupTableName} VALUES
+            (1, 1, "xxx", 1),
+            (2, 2, "xxx", 2),
+            (3, 3, "xxx", 3);
+        """
+
+    qt_order """select * from ${dupTableName} order by siteid"""
+
+    test {
+        sql """alter table ${dupTableName} modify COLUMN siteid INT SUM 
DEFAULT '0';"""
+        // check exception message contains
+        exception "Can not assign aggregation method on column in Duplicate 
data model table"
+    }
+
+    test {
+        sql """alter table ${dupTableName} modify COLUMN siteid BIGINT from 
not_exist_rollup;"""
+        // check exception message contains
+        exception "Index[not_exist_rollup] does not exist in table"
+    }
+
+    test {
+        sql """alter table ${dupTableName} modify COLUMN not_exist_column 
BIGINT;"""
+        // check exception message contains
+        exception "Column[not_exist_column] does not exists"
+    }
+
+    test {
+        sql """alter table ${dupTableName} modify COLUMN not_exist_column 
BIGINT from ${dupTableRollupName};"""
+        // check exception message contains
+        exception "Do not need to specify index name when just modifying 
column type"
+    }
+
+    test {
+        sql """alter table ${dupTableName} modify COLUMN siteid BIGINT after 
not_exist_column;"""
+        // check exception message contains
+        exception "Column[not_exist_column] does not exists"
+    }
+
+    test {
+        sql """alter table ${dupTableName} modify COLUMN citycode BIGINT 
DEFAULT '10' first;"""
+        // check exception message contains
+        exception "Invalid column order. value should be after key"
+    }
+
+    test {
+        sql """alter table ${dupTableName} modify COLUMN siteid BIGINT key 
DEFAULT '10' first;"""
+        // check exception message contains
+        exception "Can not modify distribution column"
+    }
+
+    sql """alter table ${dupTableName} modify COLUMN username VARCHAR(32) key 
DEFAULT 'test' first;"""
+    waitSchemaChangeJob(dupTableName)
+
+    sql """ INSERT INTO ${dupTableName} VALUES
+            ("yyy", 4, 4, 4)
+        """
+    qt_order """select * from ${dupTableName} order by siteid"""
+
+    sql """alter table ${dupTableName} order by(citycode, siteid, username, 
pv);"""
+    waitSchemaChangeJob(dupTableName)
+    sql """ INSERT INTO ${dupTableName} VALUES
+            (5, 5, "zzz", 5)
+        """
+    qt_order """select * from ${dupTableName} order by siteid"""
+    sql "DROP TABLE IF EXISTS ${dupTableName} FORCE"
+}
\ No newline at end of file
diff --git 
a/regression-test/suites/schema_change_p0/test_alter_table_replace.groovy 
b/regression-test/suites/schema_change_p0/test_alter_table_replace.groovy
new file mode 100644
index 00000000000..b07a54c5288
--- /dev/null
+++ b/regression-test/suites/schema_change_p0/test_alter_table_replace.groovy
@@ -0,0 +1,104 @@
+// 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_alter_table_replace") {
+    def tbNameA = "test_alter_table_replace_a"
+    def tbNameB = "test_alter_table_replace_b"
+
+    sql "DROP TABLE IF EXISTS ${tbNameA}"
+    sql "DROP TABLE IF EXISTS ${tbNameB}"
+    sql """
+        CREATE TABLE ${tbNameA} (
+            `user_id` LARGEINT NOT NULL COMMENT "用户id",
+            `date` DATE NOT NULL COMMENT "数据灌入日期时间",
+            `city` VARCHAR(20) COMMENT "用户所在城市",
+            `age` SMALLINT COMMENT "用户年龄",
+            `sex` TINYINT COMMENT "用户性别",
+
+            `cost` BIGINT SUM DEFAULT "0" COMMENT "用户总消费",
+            `max_dwell_time` INT MAX DEFAULT "0" COMMENT "用户最大停留时间",
+            `min_dwell_time` INT MIN DEFAULT "99999" COMMENT "用户最小停留时间",
+            `hll_col` HLL HLL_UNION NOT NULL COMMENT "HLL列",
+            `bitmap_col` Bitmap BITMAP_UNION NOT NULL COMMENT "bitmap列")
+        AGGREGATE KEY(`user_id`, `date`, `city`, `age`, `sex`)
+        PARTITION BY RANGE(`date`)
+        (
+            PARTITION `p201701` VALUES LESS THAN ("2017-02-01"),
+            PARTITION `p201702` VALUES LESS THAN ("2017-03-01"),
+            PARTITION `p201703` VALUES LESS THAN ("2017-04-01")
+        )
+        DISTRIBUTED BY HASH(`user_id`)
+        BUCKETS 1
+        PROPERTIES ( "replication_num" = "1");
+        """
+
+    sql """
+        CREATE TABLE ${tbNameB} (
+            `user_id` LARGEINT NOT NULL COMMENT "用户id",
+            `date` DATE NOT NULL COMMENT "数据灌入日期时间",
+            `city` VARCHAR(20) COMMENT "用户所在城市",
+            `age` SMALLINT COMMENT "用户年龄",
+            `sex` TINYINT COMMENT "用户性别",
+
+            `cost` BIGINT SUM DEFAULT "0" COMMENT "用户总消费",
+            `max_dwell_time` INT MAX DEFAULT "0" COMMENT "用户最大停留时间",
+            `min_dwell_time` INT MIN DEFAULT "99999" COMMENT "用户最小停留时间",
+            `hll_col` HLL HLL_UNION NOT NULL COMMENT "HLL列",
+            `bitmap_col` Bitmap BITMAP_UNION NOT NULL COMMENT "bitmap列")
+        AGGREGATE KEY(`user_id`, `date`, `city`, `age`, `sex`)
+        PARTITION BY RANGE(`date`)
+        (
+            PARTITION `p201701` VALUES LESS THAN ("2017-02-01"),
+            PARTITION `p201702` VALUES LESS THAN ("2017-03-01"),
+            PARTITION `p201703` VALUES LESS THAN ("2017-04-01")
+        )
+        DISTRIBUTED BY HASH(`user_id`)
+        BUCKETS 1
+        PROPERTIES ( "replication_num" = "1");
+        """
+
+    sql """ INSERT INTO ${tbNameA} VALUES
+            (1, '2017-01-01', 'Beijing', 10, 1, 1, 30, 20, hll_hash(1), 
to_bitmap(1)),
+            (2, '2017-02-01', 'Beijing', 10, 1, 1, 31, 19, hll_hash(2), 
to_bitmap(2)),
+            (3, '2017-03-01', 'Beijing', 10, 1, 1, 31, 21, hll_hash(2), 
to_bitmap(2))
+        """
+
+    sql """ INSERT INTO ${tbNameB} VALUES
+            (4, '2017-01-01', 'Beijing', 10, 1, 1, 30, 20, hll_hash(1), 
to_bitmap(1)),
+            (5, '2017-02-01', 'Beijing', 10, 1, 1, 31, 19, hll_hash(2), 
to_bitmap(2)),
+            (6, '2017-03-01', 'Beijing', 10, 1, 1, 31, 21, hll_hash(2), 
to_bitmap(2))
+        """
+
+    qt_select """ select * from ${tbNameA} order by user_id"""
+    qt_select """ select * from ${tbNameB} order by user_id"""
+
+    sql """ALTER TABLE ${tbNameA} REPLACE WITH TABLE ${tbNameB} 
PROPERTIES('swap' = 'true');"""
+
+    qt_select """ select * from ${tbNameA} order by user_id"""
+    qt_select """ select * from ${tbNameB} order by user_id"""
+
+    sql """ALTER TABLE ${tbNameA} REPLACE WITH TABLE ${tbNameB} 
PROPERTIES('swap' = 'false');"""
+    qt_select """ select * from ${tbNameA} order by user_id"""
+    test {
+        sql """ select * from ${tbNameB} order by user_id"""
+        // check exception message contains
+        exception "Unknown table '${tbNameB}'"
+    }
+
+    sql "DROP TABLE IF EXISTS ${tbNameA} FORCE;"
+    sql "DROP TABLE IF EXISTS ${tbNameB} FORCE;"
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to