This is an automated email from the ASF dual-hosted git repository. morrysnow pushed a commit to branch pick_3.1_58576 in repository https://gitbox.apache.org/repos/asf/doris.git
commit be41bf94d1e44e4d48453c73c4f8fc40df57a561 Author: morrySnow <[email protected]> AuthorDate: Tue Dec 2 16:23:42 2025 +0800 branch-3.1: [fix](load) sequence column not work well with default value #58576 picked from #58576 --- .../main/java/org/apache/doris/analysis/ColumnDef.java | 9 ++++++++- .../apache/doris/nereids/rules/analysis/BindSink.java | 3 +-- .../data_model_p0/unique/test_sequence_column.groovy | 16 ++++++++++++++++ 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/ColumnDef.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/ColumnDef.java index 91812858846..284d01c2f2f 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ColumnDef.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ColumnDef.java @@ -44,6 +44,7 @@ import java.util.HashSet; import java.util.List; import java.util.Optional; import java.util.Set; +import java.util.regex.Pattern; // Column definition which is generated by SQL syntax parser // Syntax: @@ -103,8 +104,10 @@ public class ColumnDef { public static String E_NUM = "E"; public static String PI = "PI"; public static String CURRENT_DATE = "CURRENT_DATE"; - // default "CURRENT_TIMESTAMP", only for DATETIME type + // default "CURRENT_TIMESTAMP", for datetime / datetimev2 type public static String CURRENT_TIMESTAMP = "CURRENT_TIMESTAMP"; + public static Pattern CURRENT_TIMESTAMP_PATTERN + = Pattern.compile("^CURRENT_TIMESTAMP(?:\\(\\d?\\))?$"); public static String NOW = "now"; public static String BITMAP_EMPTY = "BITMAP_EMPTY"; public static String HLL_EMPTY = "HLL_EMPTY"; @@ -121,6 +124,10 @@ public class ColumnDef { // default "value", "[]" means empty array public static DefaultValue ARRAY_EMPTY_DEFAULT_VALUE = new DefaultValue(true, "[]"); + public static boolean isCurrentTimeStampDefaultValue(String defaultValue) { + return CURRENT_TIMESTAMP_PATTERN.matcher(defaultValue.trim().toUpperCase()).matches(); + } + public static DefaultValue currentTimeStampDefaultValueWithPrecision(Long precision) { if (precision > ScalarType.MAX_DATETIMEV2_SCALE || precision < 0) { throw new IllegalArgumentException("column's default value current_timestamp" diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindSink.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindSink.java index 5cd0c166329..1714d3f357b 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindSink.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindSink.java @@ -220,8 +220,7 @@ public class BindSink implements AnalysisRuleFactory { boundSink.getDmlCommandType() != DMLCommandType.INSERT || ConnectContext.get().getSessionVariable().isRequireSequenceInInsert())) { if (!seqColInTable.isPresent() || seqColInTable.get().getDefaultValue() == null - || !seqColInTable.get().getDefaultValue() - .equalsIgnoreCase(DefaultValue.CURRENT_TIMESTAMP)) { + || !DefaultValue.isCurrentTimeStampDefaultValue(seqColInTable.get().getDefaultValue())) { throw new org.apache.doris.common.AnalysisException("Table " + table.getName() + " has sequence column, need to specify the sequence column"); } diff --git a/regression-test/suites/data_model_p0/unique/test_sequence_column.groovy b/regression-test/suites/data_model_p0/unique/test_sequence_column.groovy index 8c2956b38c5..1b905504cf2 100644 --- a/regression-test/suites/data_model_p0/unique/test_sequence_column.groovy +++ b/regression-test/suites/data_model_p0/unique/test_sequence_column.groovy @@ -60,6 +60,22 @@ suite("test_sequence_column") { order_qt_all "SELECT * from ${tableName}" + // test sequence column with default value current_timestamp(6) + sql "DROP TABLE IF EXISTS ${tableName}" + sql """ + CREATE TABLE `${tableName}` ( + `ts_tz` datetimev2(6) default current_timestamp(6), + `ts_tz_value` datetimev2(6) default current_timestamp(6), + `value` INT + ) UNIQUE KEY(`ts_tz`) + DISTRIBUTED BY HASH(`ts_tz`) BUCKETS 16 + PROPERTIES ( + "replication_num" = "1", + "function_column.sequence_col" = 'ts_tz_value' + ); + """ + sql """insert into ${tableName} (value) VALUES(1), (2), (3)""" + // test sequence X variant sql "DROP TABLE IF EXISTS ${tableName}" try{ --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
