From d4ab3959b96251ff54dde4eb2e489781f79b1871 Mon Sep 17 00:00:00 2001 From: Socrates Date: Thu, 29 Jan 2026 16:36:33 +0800 Subject: [PATCH 1/2] Reject $ in table names --- .../src/main/java/org/apache/doris/common/FeNameFormat.java | 4 ++-- .../test/java/org/apache/doris/common/FeNameFormatTest.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/FeNameFormat.java b/fe/fe-core/src/main/java/org/apache/doris/common/FeNameFormat.java index 9917f7c7030279..e6b70358085223 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/common/FeNameFormat.java +++ b/fe/fe-core/src/main/java/org/apache/doris/common/FeNameFormat.java @@ -35,7 +35,7 @@ public class FeNameFormat { // please modify error msg when FeNameFormat.checkCommonName throw exception in CreateRoutineLoadStmt private static final String COMMON_NAME_REGEX = "^[a-zA-Z][a-zA-Z0-9\\-_]{0,63}$"; private static final String UNDERSCORE_COMMON_NAME_REGEX = "^[_a-zA-Z][a-zA-Z0-9\\-_]{0,63}$"; - private static final String TABLE_NAME_REGEX = "^[a-zA-Z0-9\\-_$]*$"; + private static final String TABLE_NAME_REGEX = "^[a-zA-Z0-9\\-_]*$"; private static final String USER_NAME_REGEX = "^[a-zA-Z][a-zA-Z0-9.\\-_]*$"; private static final String REPOSITORY_NAME_REGEX = "^[a-zA-Z][a-zA-Z0-9\\-_]{0,255}$"; private static final String COLUMN_NAME_REGEX @@ -44,7 +44,7 @@ public class FeNameFormat { private static final String UNICODE_LABEL_REGEX = "^[\\-_A-Za-z0-9:\\p{L}]{1," + Config.label_regex_length + "}$"; private static final String UNICODE_COMMON_NAME_REGEX = "^[a-zA-Z\\p{L}][a-zA-Z0-9\\-_\\p{L}]{0,63}$"; private static final String UNICODE_UNDERSCORE_COMMON_NAME_REGEX = "^[_a-zA-Z\\p{L}][a-zA-Z0-9\\-_\\p{L}]{0,63}$"; - private static final String UNICODE_TABLE_NAME_REGEX = "^[\\s\\S]*[\\S]$"; + private static final String UNICODE_TABLE_NAME_REGEX = "^(?!.*\\$)[\\s\\S]*[\\S]$"; private static final String UNICODE_USER_NAME_REGEX = "^[a-zA-Z\\p{L}][a-zA-Z0-9.\\-_\\p{L}]*$"; private static final String UNICODE_COLUMN_NAME_REGEX = "^[\\s\\S]{0,255}[\\S]$"; diff --git a/fe/fe-core/src/test/java/org/apache/doris/common/FeNameFormatTest.java b/fe/fe-core/src/test/java/org/apache/doris/common/FeNameFormatTest.java index 336c693d82f31e..c5b2023652a286 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/common/FeNameFormatTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/common/FeNameFormatTest.java @@ -89,7 +89,6 @@ void testTableName() { "a_1", // Underscore + number "B2", // Uppercase letter + number "1abc", // Starts with digit - "abc$", // Contains invalid symbol $ "-abc", // Starts with hyphen "_abc" // Starts with underscore ); @@ -98,7 +97,8 @@ void testTableName() { "", // Empty string "x ", // space character as last one "x\t", // table character as last one - "x\n" // enter character as last one + "x\n", // enter character as last one + "abc$" // Contains invalid symbol $ ); List unicodeValid = Lists.newArrayList( From 1f6b09ddaf84283779b054adee0f17e37cc6a076 Mon Sep 17 00:00:00 2001 From: Socrates Date: Thu, 29 Jan 2026 21:21:03 +0800 Subject: [PATCH 2/2] Add regression case for $ in table name --- .../suites/ddl_p0/test_create_table.groovy | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/regression-test/suites/ddl_p0/test_create_table.groovy b/regression-test/suites/ddl_p0/test_create_table.groovy index 03de74bc2897d0..2975687fabf5d0 100644 --- a/regression-test/suites/ddl_p0/test_create_table.groovy +++ b/regression-test/suites/ddl_p0/test_create_table.groovy @@ -61,6 +61,19 @@ suite("sql_create_time_range_table") { exception "Disable to create table" } + test { + sql """ + CREATE TABLE tbl\$refs ( + k1 int, + k2 int + ) + DUPLICATE KEY (`k1`) + DISTRIBUTED BY HASH(`k2`) BUCKETS 1 + PROPERTIES ("replication_num" = "1"); + """ + exception "Incorrect table name" + } + // DDL/DML return 1 row and 1 column, the only value is update row count assertTrue(result1.size() == 1) assertTrue(result1[0].size() == 1)