From 70f5b0006feebfeac02d7e018b1e0fd2e6a780b4 Mon Sep 17 00:00:00 2001 From: morrySnow <101034200+morrySnow@users.noreply.github.com> Date: Sat, 7 Oct 2023 11:39:32 +0800 Subject: [PATCH] [fix](Nereids) ctas throw npe when default value is null (#25009) --- .../trees/plans/commands/info/ColumnDefinition.java | 4 +++- .../nereids_p0/create_table/test_create_table.out | 5 +++++ .../suites/nereids_p0/create_table/ddl/data.sql | 7 ++++++- .../suites/nereids_p0/create_table/ddl/table.sql | 12 ++++++++++++ .../nereids_p0/create_table/test_create_table.groovy | 5 +++-- 5 files changed, 29 insertions(+), 4 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ColumnDefinition.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ColumnDefinition.java index 02f36817f6..6d98f43c0f 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ColumnDefinition.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ColumnDefinition.java @@ -180,7 +180,9 @@ public class ColumnDefinition { } else if (type.isArrayType() && !defaultValue.isPresent()) { defaultValue = Optional.of(DefaultValue.ARRAY_EMPTY_DEFAULT_VALUE); } - if (defaultValue.isPresent() && type.toCatalogDataType().isScalarType()) { + if (defaultValue.isPresent() + && defaultValue.get().getValue() != null + && type.toCatalogDataType().isScalarType()) { try { ColumnDef.validateDefaultValue(type.toCatalogDataType(), defaultValue.get().getValue(), defaultValue.get().getDefaultValueExprDef()); diff --git a/regression-test/data/nereids_p0/create_table/test_create_table.out b/regression-test/data/nereids_p0/create_table/test_create_table.out index a7404d06ba..85f782d873 100644 --- a/regression-test/data/nereids_p0/create_table/test_create_table.out +++ b/regression-test/data/nereids_p0/create_table/test_create_table.out @@ -66,3 +66,8 @@ 5 false 3 4 5 6 7 13 true 4 5 6 7 8 +-- !sql -- +1 true 2 2023-02-13T00:00 +5 false 3 2023-02-13T00:00 +13 true 4 2023-02-13T00:00 + diff --git a/regression-test/suites/nereids_p0/create_table/ddl/data.sql b/regression-test/suites/nereids_p0/create_table/ddl/data.sql index c898e3bb87..e30f7e8f17 100644 --- a/regression-test/suites/nereids_p0/create_table/ddl/data.sql +++ b/regression-test/suites/nereids_p0/create_table/ddl/data.sql @@ -69,4 +69,9 @@ insert into test_list_partition values insert into test_rollup values (1, true, 2, 3, 4, 5, 6), (5, false, 3, 4, 5, 6, 7), - (13, true, 4, 5, 6, 7, 8); \ No newline at end of file + (13, true, 4, 5, 6, 7, 8); + +insert into test_default_value values + (1, true, 2, '2023-02-13'), + (5, false, 3, '2023-02-13'), + (13, true, 4, '2023-02-13'); \ No newline at end of file diff --git a/regression-test/suites/nereids_p0/create_table/ddl/table.sql b/regression-test/suites/nereids_p0/create_table/ddl/table.sql index 4f97369f4b..bcac1168b7 100644 --- a/regression-test/suites/nereids_p0/create_table/ddl/table.sql +++ b/regression-test/suites/nereids_p0/create_table/ddl/table.sql @@ -240,6 +240,18 @@ distributed by random buckets auto rollup ( r1 (id, ktint, kbool, ktint, kbint) duplicate key(id) ) +properties ( + "replication_num"="1" +); + +drop table if exists test_default_value; +create table test_default_value ( + `id` int not null, + `kbool` boolean not null, + `ktint` tinyint(4) default null, + `kdtmv2` datetimev2(0) default current_timestamp +) +distributed by hash(id) properties ( "replication_num"="1" ); \ No newline at end of file diff --git a/regression-test/suites/nereids_p0/create_table/test_create_table.groovy b/regression-test/suites/nereids_p0/create_table/test_create_table.groovy index 76756db13e..cb3590b6f0 100644 --- a/regression-test/suites/nereids_p0/create_table/test_create_table.groovy +++ b/regression-test/suites/nereids_p0/create_table/test_create_table.groovy @@ -36,8 +36,9 @@ suite("nereids_create_table") { } sql 'sync' def tables = ['test_all_types', 'test_agg_key', 'test_uni_key', 'test_uni_key_mow', 'test_not_null', - 'test_random', 'test_random_auto', 'test_less_than_partition', 'test_range_partition', - 'test_step_partition', 'test_date_step_partition', 'test_list_partition', 'test_rollup'] + 'test_random', 'test_random_auto', 'test_less_than_partition', 'test_range_partition', + 'test_step_partition', 'test_date_step_partition', 'test_list_partition', 'test_rollup', + 'test_default_value'] for (String t in tables) { qt_sql "select * from ${t} order by id" }