diff --git a/src/common/meta/src/key.rs b/src/common/meta/src/key.rs index 3cf6f3a3b7..d864882da6 100644 --- a/src/common/meta/src/key.rs +++ b/src/common/meta/src/key.rs @@ -144,7 +144,7 @@ use crate::rpc::router::{region_distribution, RegionRoute, RegionStatus}; use crate::rpc::store::BatchDeleteRequest; use crate::DatanodeId; -pub const NAME_PATTERN: &str = r"[a-zA-Z_:-][a-zA-Z0-9_:\-\.]*"; +pub const NAME_PATTERN: &str = r"[a-zA-Z_:-][a-zA-Z0-9_:\-\.@#]*"; pub const MAINTENANCE_KEY: &str = "__maintenance"; const DATANODE_TABLE_KEY_PREFIX: &str = "__dn_table"; diff --git a/src/operator/src/statement/ddl.rs b/src/operator/src/statement/ddl.rs index e9b186bd63..af0f6883d8 100644 --- a/src/operator/src/statement/ddl.rs +++ b/src/operator/src/statement/ddl.rs @@ -229,7 +229,7 @@ impl StatementExecutor { ensure!( NAME_PATTERN_REG.is_match(&create_table.table_name), InvalidTableNameSnafu { - table_name: create_table.table_name.clone(), + table_name: &create_table.table_name, } ); @@ -1516,6 +1516,12 @@ mod test { assert!(!NAME_PATTERN_REG.is_match("/adaf")); assert!(!NAME_PATTERN_REG.is_match("🈲")); assert!(NAME_PATTERN_REG.is_match("hello")); + assert!(NAME_PATTERN_REG.is_match("test@")); + assert!(!NAME_PATTERN_REG.is_match("@test")); + assert!(NAME_PATTERN_REG.is_match("test#")); + assert!(!NAME_PATTERN_REG.is_match("#test")); + assert!(!NAME_PATTERN_REG.is_match("@")); + assert!(!NAME_PATTERN_REG.is_match("#")); } #[tokio::test] diff --git a/tests/cases/standalone/common/create/create.result b/tests/cases/standalone/common/create/create.result index 86a89483e8..d01ac4a764 100644 --- a/tests/cases/standalone/common/create/create.result +++ b/tests/cases/standalone/common/create/create.result @@ -54,6 +54,22 @@ CREATE TABLE 'N.~' (i TIMESTAMP TIME INDEX); Error: 1004(InvalidArguments), Invalid table name: N.~ +CREATE TABLE `p_perftest001@cc3kvQ_D1D9H9GOZGMIY97TWH20R1LRC8U0SFBA` (i INTEGER, j TIMESTAMP TIME INDEX); + +Affected Rows: 0 + +DROP TABLE `p_perftest001@cc3kvQ_D1D9H9GOZGMIY97TWH20R1LRC8U0SFBA`; + +Affected Rows: 0 + +CREATE TABLE `p_perftest001#cc3kvQ_D1D9H9GOZGMIY97TWH20R1LRC8U0SFBA` (i INTEGER, j TIMESTAMP TIME INDEX); + +Affected Rows: 0 + +DROP TABLE `p_perftest001#cc3kvQ_D1D9H9GOZGMIY97TWH20R1LRC8U0SFBA`; + +Affected Rows: 0 + CREATE TABLE neg_default_value_min(i TIMESTAMP TIME INDEX, j SMALLINT DEFAULT -32768); Affected Rows: 0 diff --git a/tests/cases/standalone/common/create/create.sql b/tests/cases/standalone/common/create/create.sql index f5ae083318..62237019ad 100644 --- a/tests/cases/standalone/common/create/create.sql +++ b/tests/cases/standalone/common/create/create.sql @@ -26,6 +26,14 @@ CREATE TABLE test2 (i INTEGER, j TIMESTAMP TIME INDEX); CREATE TABLE 'N.~' (i TIMESTAMP TIME INDEX); +CREATE TABLE `p_perftest001@cc3kvQ_D1D9H9GOZGMIY97TWH20R1LRC8U0SFBA` (i INTEGER, j TIMESTAMP TIME INDEX); + +DROP TABLE `p_perftest001@cc3kvQ_D1D9H9GOZGMIY97TWH20R1LRC8U0SFBA`; + +CREATE TABLE `p_perftest001#cc3kvQ_D1D9H9GOZGMIY97TWH20R1LRC8U0SFBA` (i INTEGER, j TIMESTAMP TIME INDEX); + +DROP TABLE `p_perftest001#cc3kvQ_D1D9H9GOZGMIY97TWH20R1LRC8U0SFBA`; + CREATE TABLE neg_default_value_min(i TIMESTAMP TIME INDEX, j SMALLINT DEFAULT -32768); DESC TABLE neg_default_value_min;