From 553330afeb884059cdda6b7a31732dfd769c3aed Mon Sep 17 00:00:00 2001 From: yuran Date: Wed, 2 Jul 2025 09:01:30 +0800 Subject: [PATCH] Fix partition name bug. --- .../r/bugfix_partition_name_crash.result | 293 ++++++++++++++++++ mysql-test/t/bugfix_partition_name_crash.test | 173 +++++++++++ sql/sql_show.cc | 9 + 3 files changed, 475 insertions(+) create mode 100644 mysql-test/r/bugfix_partition_name_crash.result create mode 100644 mysql-test/t/bugfix_partition_name_crash.test diff --git a/mysql-test/r/bugfix_partition_name_crash.result b/mysql-test/r/bugfix_partition_name_crash.result new file mode 100644 index 00000000000..e22c0bdc46e --- /dev/null +++ b/mysql-test/r/bugfix_partition_name_crash.result @@ -0,0 +1,293 @@ +-------------------------------* TEST CASE 1 *------------------------------- +CREATE TABLE test ( +t_id INT AUTO_INCREMENT, +id CHAR(32), +PRIMARY KEY(t_id, id) +) PARTITION BY LIST COLUMNS(id) ( +PARTITION `1HkZbSJOALI` VALUES IN ('1HkZbSJOALI'), +PARTITION `1cUPlKUTy1R` VALUES IN ('1cUPlKUTy1R') +); +INSERT INTO test (id) VALUES +('1HkZbSJOALI'), +('1HkZbSJOALI'), +('1cUPlKUTy1R'), +('1cUPlKUTy1R'); +ALTER TABLE test ADD PARTITION (PARTITION 1e3fRQM2GhI VALUES IN ('1e3fRQM2GhI') ENGINE = InnoDB); +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1e3fRQM2GhI VALUES IN ('1e3fRQM2GhI') ENGINE = InnoDB)' at line 1 +ALTER TABLE test ADD PARTITION (PARTITION `1e3fRQM2GhI` VALUES IN ('1e3fRQM2GhI') ENGINE = InnoDB); + +### in these two cases: 1e3fRQM2GhI should be enclosed by ` +###!IMPORTANT!### partition will show always like they are saved +SHOW CREATE TABLE test; +Table Create Table +test CREATE TABLE `test` ( + `t_id` int NOT NULL AUTO_INCREMENT, + `id` char(32) NOT NULL, + PRIMARY KEY (`t_id`,`id`) +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci +/*!50500 PARTITION BY LIST COLUMNS(id) +(PARTITION 1HkZbSJOALI VALUES IN ('1HkZbSJOALI') ENGINE = InnoDB, + PARTITION 1cUPlKUTy1R VALUES IN ('1cUPlKUTy1R') ENGINE = InnoDB, + PARTITION `1e3fRQM2GhI` VALUES IN ('1e3fRQM2GhI') ENGINE = InnoDB) */ +SET SESSION sql_quote_show_create=0; +SHOW CREATE TABLE test; +Table Create Table +test CREATE TABLE test ( + t_id int NOT NULL AUTO_INCREMENT, + id char(32) NOT NULL, + PRIMARY KEY (t_id,id) +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci +/*!50500 PARTITION BY LIST COLUMNS(id) +(PARTITION 1HkZbSJOALI VALUES IN ('1HkZbSJOALI') ENGINE = InnoDB, + PARTITION 1cUPlKUTy1R VALUES IN ('1cUPlKUTy1R') ENGINE = InnoDB, + PARTITION `1e3fRQM2GhI` VALUES IN ('1e3fRQM2GhI') ENGINE = InnoDB) */ +SET SESSION sql_quote_show_create=1; +INSERT INTO test (id) VALUES +('1HkZbSJOALI'), +('1cUPlKUTy1R'), +('1e3fRQM2GhI'); +### how about ansi sql_mode? [show quote only needed] +SET @@sql_quote_show_create = 0; +SET @prev_mode = @@sql_mode; +SET SESSION sql_mode='ansi'; +SHOW CREATE TABLE test; +Table Create Table +test CREATE TABLE test ( + t_id int NOT NULL AUTO_INCREMENT, + id char(32) NOT NULL, + PRIMARY KEY (t_id,id) +) +/*!50500 PARTITION BY LIST COLUMNS(id) +(PARTITION 1HkZbSJOALI VALUES IN ('1HkZbSJOALI'), + PARTITION 1cUPlKUTy1R VALUES IN ('1cUPlKUTy1R'), + PARTITION "1e3fRQM2GhI" VALUES IN ('1e3fRQM2GhI')) */ +ALTER TABLE test ADD PARTITION (PARTITION 1e3xxxx VALUES IN ('1e3fxxxx') ENGINE = InnoDB); +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1e3xxxx VALUES IN ('1e3fxxxx') ENGINE = InnoDB)' at line 1 +ALTER TABLE test ADD PARTITION (PARTITION "1e3xxxx" VALUES IN ('1e3fxxxx') ENGINE = InnoDB); +INSERT INTO test (id) VALUES +('1HkZbSJOALI'), +('1e3fxxxx'), +('1cUPlKUTy1R'), +('1e3fRQM2GhI'); +SHOW CREATE TABLE test; +Table Create Table +test CREATE TABLE test ( + t_id int NOT NULL AUTO_INCREMENT, + id char(32) NOT NULL, + PRIMARY KEY (t_id,id) +) +/*!50500 PARTITION BY LIST COLUMNS(id) +(PARTITION 1HkZbSJOALI VALUES IN ('1HkZbSJOALI'), + PARTITION 1cUPlKUTy1R VALUES IN ('1cUPlKUTy1R'), + PARTITION "1e3fRQM2GhI" VALUES IN ('1e3fRQM2GhI'), + PARTITION "1e3xxxx" VALUES IN ('1e3fxxxx')) */ +SET SESSION sql_mode=@prev_mode; +SHOW CREATE TABLE test; +Table Create Table +test CREATE TABLE test ( + t_id int NOT NULL AUTO_INCREMENT, + id char(32) NOT NULL, + PRIMARY KEY (t_id,id) +) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci +/*!50500 PARTITION BY LIST COLUMNS(id) +(PARTITION 1HkZbSJOALI VALUES IN ('1HkZbSJOALI') ENGINE = InnoDB, + PARTITION 1cUPlKUTy1R VALUES IN ('1cUPlKUTy1R') ENGINE = InnoDB, + PARTITION `1e3fRQM2GhI` VALUES IN ('1e3fRQM2GhI') ENGINE = InnoDB, + PARTITION `1e3xxxx` VALUES IN ('1e3fxxxx') ENGINE = InnoDB) */ +SET @@sql_quote_show_create = 1; +SELECT * FROM test ORDER BY id; +t_id id +3 1cUPlKUTy1R +4 1cUPlKUTy1R +6 1cUPlKUTy1R +10 1cUPlKUTy1R +7 1e3fRQM2GhI +11 1e3fRQM2GhI +9 1e3fxxxx +1 1HkZbSJOALI +2 1HkZbSJOALI +5 1HkZbSJOALI +8 1HkZbSJOALI +DROP TABLE test; + +-------------------------------* TEST CASE 2 *------------------------------- +CREATE TABLE test ( +t_id INT AUTO_INCREMENT, +id CHAR(32), +PRIMARY KEY(t_id, id) +) PARTITION BY LIST COLUMNS(id) ( +PARTITION 1HkZbSJOALI VALUES IN ('1HkZbSJOALI') ENGINE = InnoDB, +PARTITION 1cUPlKUTy1R VALUES IN ('1cUPlKUTy1R') ENGINE = InnoDB, +PARTITION 1e3fRQM2GhI VALUES IN ('1e3fRQM2GhI') ENGINE = InnoDB +); +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1e3fRQM2GhI VALUES IN ('1e3fRQM2GhI') ENGINE = InnoDB +)' at line 8 +CREATE TABLE test ( +t_id INT AUTO_INCREMENT, +id CHAR(32), +PRIMARY KEY(t_id, id) +) PARTITION BY LIST COLUMNS(id) ( +PARTITION `1HkZbSJOALI` VALUES IN ('1HkZbSJOALI') ENGINE = InnoDB, +PARTITION `1cUPlKUTy1R` VALUES IN ('1cUPlKUTy1R') ENGINE = InnoDB, +PARTITION `1e3fRQM2GhI` VALUES IN ('1e3fRQM2GhI') ENGINE = InnoDB +); +SHOW CREATE TABLE test; +Table Create Table +test CREATE TABLE `test` ( + `t_id` int NOT NULL AUTO_INCREMENT, + `id` char(32) NOT NULL, + PRIMARY KEY (`t_id`,`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci +/*!50500 PARTITION BY LIST COLUMNS(id) +(PARTITION 1HkZbSJOALI VALUES IN ('1HkZbSJOALI') ENGINE = InnoDB, + PARTITION 1cUPlKUTy1R VALUES IN ('1cUPlKUTy1R') ENGINE = InnoDB, + PARTITION `1e3fRQM2GhI` VALUES IN ('1e3fRQM2GhI') ENGINE = InnoDB) */ +DROP TABLE test; +### using ansi mode create then using utf-mode +SET @prev_mode = @@sql_mode; +SET @@sql_mode = 'ansi'; +CREATE TABLE test ( +t_id INT AUTO_INCREMENT, +id CHAR(32), +PRIMARY KEY(t_id, id) +) PARTITION BY LIST COLUMNS(id) ( +PARTITION `1HkZbSJOALI` VALUES IN ('1HkZbSJOALI') ENGINE = InnoDB, +PARTITION `1cUPlKUTy1R` VALUES IN ('1cUPlKUTy1R') ENGINE = InnoDB, +PARTITION `1e3fRQM2GhI` VALUES IN ('1e3fRQM2GhI') ENGINE = InnoDB +); +INSERT INTO test (id) VALUES +('1HkZbSJOALI'), +('1HkZbSJOALI'), +('1cUPlKUTy1R'), +('1cUPlKUTy1R'), +('1e3fRQM2GhI'); +SHOW CREATE TABLE test; +Table Create Table +test CREATE TABLE "test" ( + "t_id" int NOT NULL AUTO_INCREMENT, + "id" char(32) NOT NULL, + PRIMARY KEY ("t_id","id") +) +/*!50500 PARTITION BY LIST COLUMNS(id) +(PARTITION 1HkZbSJOALI VALUES IN ('1HkZbSJOALI'), + PARTITION 1cUPlKUTy1R VALUES IN ('1cUPlKUTy1R'), + PARTITION "1e3fRQM2GhI" VALUES IN ('1e3fRQM2GhI')) */ +SET @@sql_mode = @prev_mode; +SHOW CREATE TABLE test; +Table Create Table +test CREATE TABLE `test` ( + `t_id` int NOT NULL AUTO_INCREMENT, + `id` char(32) NOT NULL, + PRIMARY KEY (`t_id`,`id`) +) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci +/*!50500 PARTITION BY LIST COLUMNS(id) +(PARTITION 1HkZbSJOALI VALUES IN ('1HkZbSJOALI') ENGINE = InnoDB, + PARTITION 1cUPlKUTy1R VALUES IN ('1cUPlKUTy1R') ENGINE = InnoDB, + PARTITION `1e3fRQM2GhI` VALUES IN ('1e3fRQM2GhI') ENGINE = InnoDB) */ +SELECT * FROM test; +t_id id +1 1HkZbSJOALI +2 1HkZbSJOALI +3 1cUPlKUTy1R +4 1cUPlKUTy1R +5 1e3fRQM2GhI +DROP TABLE test; + +-------------------------------* TEST CASE 3 *------------------------------- +SET @@sql_quote_show_create=0; +CREATE TABLE test ( +id INT PRIMARY KEY, +c1 CHAR(50) +) PARTITION BY LIST COLUMNS(id) ( +PARTITION `1eabcdesfjjkk` VALUES IN(1), +PARTITION `1e-5` VALUES IN(2), +PARTITION `1e10` VALUES IN(3) +); +SHOW CREATE TABLE test; +Table Create Table +test CREATE TABLE test ( + id int NOT NULL, + c1 char(50) DEFAULT NULL, + PRIMARY KEY (id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci +/*!50500 PARTITION BY LIST COLUMNS(id) +(PARTITION 1eabcdesfjjkk VALUES IN (1) ENGINE = InnoDB, + PARTITION `1e-5` VALUES IN (2) ENGINE = InnoDB, + PARTITION `1e10` VALUES IN (3) ENGINE = InnoDB) */ +ALTER TABLE test ADD PARTITION (PARTITION `1Exxxjjj` VALUES IN(4)); +ALTER TABLE test ADD PARTITION (PARTITION 1E+40 VALUES IN(5)); +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1E+40 VALUES IN(5))' at line 1 +ALTER TABLE test ADD PARTITION (PARTITION `1E+40` VALUES IN(5)); +ALTER TABLE test ADD PARTITION (PARTITION 1000e4 VALUES IN(6)); +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1000e4 VALUES IN(6))' at line 1 +ALTER TABLE test ADD PARTITION (PARTITION `1000e4` VALUES IN(6)); +ALTER TABLE test ADD PARTITION (PARTITION 1000e4avddd VALUES IN(7)); +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1000e4avddd VALUES IN(7))' at line 1 +ALTER TABLE test ADD PARTITION (PARTITION `1000e4avddd` VALUES IN(7)); +ALTER TABLE test ADD PARTITION (PARTITION 1000e-4aa VALUES IN(8)); +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1000e-4aa VALUES IN(8))' at line 1 +ALTER TABLE test ADD PARTITION (PARTITION `1000e-4aa` VALUES IN(8)); +ALTER TABLE test ADD PARTITION (PARTITION 98G7 VALUES IN(9)); +ALTER TABLE test ADD PARTITION (PARTITION 98X7bccc VALUES IN(10)); +ALTER TABLE test ADD PARTITION (PARTITION -7e8 VALUES IN(11)); +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-7e8 VALUES IN(11))' at line 1 +ALTER TABLE test ADD PARTITION (PARTITION `-7e8` VALUES IN(11)); +ALTER TABLE test ADD PARTITION (PARTITION +57e9 VALUES IN(12)); +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '+57e9 VALUES IN(12))' at line 1 +ALTER TABLE test ADD PARTITION (PARTITION `+57e9` VALUES IN(12)); +ALTER TABLE test ADD PARTITION (PARTITION 7eaaaaaa8 VALUES IN(13)); +ALTER TABLE test ADD PARTITION (PARTITION E100 VALUES IN(14)); +INSERT INTO test (id, c1) VALUES +(1, 'First Entry'), +(2, 'Second Entry'), +(3, 'Third Entry'), +(4, 'Fourth Entry'), +(5, 'Fifth Entry'), +(6, 'Sixth Entry'), +(7, 'Seventh Entry'), +(8, 'eighth Entry'), +(9, 'eighth Entry'), +(10, 'eighth Entry'), +(11, 'eighth Entry'), +(12, 'eighth Entry'), +(13, 'eighth Entry'), +(14, 'eighth Entry'); +SELECT * FROM test; +id c1 +1 First Entry +2 Second Entry +3 Third Entry +4 Fourth Entry +5 Fifth Entry +6 Sixth Entry +7 Seventh Entry +8 eighth Entry +9 eighth Entry +10 eighth Entry +11 eighth Entry +12 eighth Entry +13 eighth Entry +14 eighth Entry +SHOW CREATE TABLE test; +Table Create Table +test CREATE TABLE test ( + id int NOT NULL, + c1 char(50) DEFAULT NULL, + PRIMARY KEY (id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci +/*!50500 PARTITION BY LIST COLUMNS(id) +(PARTITION 1eabcdesfjjkk VALUES IN (1) ENGINE = InnoDB, + PARTITION `1e-5` VALUES IN (2) ENGINE = InnoDB, + PARTITION `1e10` VALUES IN (3) ENGINE = InnoDB, + PARTITION 1Exxxjjj VALUES IN (4) ENGINE = InnoDB, + PARTITION `1E+40` VALUES IN (5) ENGINE = InnoDB, + PARTITION `1000e4` VALUES IN (6) ENGINE = InnoDB, + PARTITION `1000e4avddd` VALUES IN (7) ENGINE = InnoDB, + PARTITION `1000e-4aa` VALUES IN (8) ENGINE = InnoDB, + PARTITION 98G7 VALUES IN (9) ENGINE = InnoDB, + PARTITION 98X7bccc VALUES IN (10) ENGINE = InnoDB, + PARTITION `-7e8` VALUES IN (11) ENGINE = InnoDB, + PARTITION `+57e9` VALUES IN (12) ENGINE = InnoDB, + PARTITION 7eaaaaaa8 VALUES IN (13) ENGINE = InnoDB, + PARTITION E100 VALUES IN (14) ENGINE = InnoDB) */ +DROP TABLE test; diff --git a/mysql-test/t/bugfix_partition_name_crash.test b/mysql-test/t/bugfix_partition_name_crash.test new file mode 100644 index 00000000000..1c7d781ba89 --- /dev/null +++ b/mysql-test/t/bugfix_partition_name_crash.test @@ -0,0 +1,173 @@ +# test case1: alter table for adding partition +--echo -------------------------------* TEST CASE 1 *------------------------------- +CREATE TABLE test ( + t_id INT AUTO_INCREMENT, + id CHAR(32), + PRIMARY KEY(t_id, id) +) PARTITION BY LIST COLUMNS(id) ( + PARTITION `1HkZbSJOALI` VALUES IN ('1HkZbSJOALI'), + PARTITION `1cUPlKUTy1R` VALUES IN ('1cUPlKUTy1R') +); + +INSERT INTO test (id) VALUES + ('1HkZbSJOALI'), + ('1HkZbSJOALI'), + ('1cUPlKUTy1R'), + ('1cUPlKUTy1R'); + +--error ER_PARSE_ERROR +ALTER TABLE test ADD PARTITION (PARTITION 1e3fRQM2GhI VALUES IN ('1e3fRQM2GhI') ENGINE = InnoDB); +ALTER TABLE test ADD PARTITION (PARTITION `1e3fRQM2GhI` VALUES IN ('1e3fRQM2GhI') ENGINE = InnoDB); + +--echo +--echo ### in these two cases: 1e3fRQM2GhI should be enclosed by ` +--echo ###!IMPORTANT!### partition will show always like they are saved +SHOW CREATE TABLE test; +SET SESSION sql_quote_show_create=0; +SHOW CREATE TABLE test; +SET SESSION sql_quote_show_create=1; + +INSERT INTO test (id) VALUES + ('1HkZbSJOALI'), + ('1cUPlKUTy1R'), + ('1e3fRQM2GhI'); + +--echo ### how about ansi sql_mode? [show quote only needed] +SET @@sql_quote_show_create = 0; +SET @prev_mode = @@sql_mode; +SET SESSION sql_mode='ansi'; +SHOW CREATE TABLE test; +--error ER_PARSE_ERROR +ALTER TABLE test ADD PARTITION (PARTITION 1e3xxxx VALUES IN ('1e3fxxxx') ENGINE = InnoDB); +ALTER TABLE test ADD PARTITION (PARTITION "1e3xxxx" VALUES IN ('1e3fxxxx') ENGINE = InnoDB); + +INSERT INTO test (id) VALUES + ('1HkZbSJOALI'), + ('1e3fxxxx'), + ('1cUPlKUTy1R'), + ('1e3fRQM2GhI'); + +SHOW CREATE TABLE test; +SET SESSION sql_mode=@prev_mode; +SHOW CREATE TABLE test; +SET @@sql_quote_show_create = 1; + +SELECT * FROM test ORDER BY id; + +DROP TABLE test; + +--echo +--echo -------------------------------* TEST CASE 2 *------------------------------- +--error ER_PARSE_ERROR +CREATE TABLE test ( + t_id INT AUTO_INCREMENT, + id CHAR(32), + PRIMARY KEY(t_id, id) +) PARTITION BY LIST COLUMNS(id) ( + PARTITION 1HkZbSJOALI VALUES IN ('1HkZbSJOALI') ENGINE = InnoDB, + PARTITION 1cUPlKUTy1R VALUES IN ('1cUPlKUTy1R') ENGINE = InnoDB, + PARTITION 1e3fRQM2GhI VALUES IN ('1e3fRQM2GhI') ENGINE = InnoDB +); + +CREATE TABLE test ( + t_id INT AUTO_INCREMENT, + id CHAR(32), + PRIMARY KEY(t_id, id) +) PARTITION BY LIST COLUMNS(id) ( + PARTITION `1HkZbSJOALI` VALUES IN ('1HkZbSJOALI') ENGINE = InnoDB, + PARTITION `1cUPlKUTy1R` VALUES IN ('1cUPlKUTy1R') ENGINE = InnoDB, + PARTITION `1e3fRQM2GhI` VALUES IN ('1e3fRQM2GhI') ENGINE = InnoDB +); + +SHOW CREATE TABLE test; + +DROP TABLE test; + +--echo ### using ansi mode create then using utf-mode +SET @prev_mode = @@sql_mode; +SET @@sql_mode = 'ansi'; +CREATE TABLE test ( + t_id INT AUTO_INCREMENT, + id CHAR(32), + PRIMARY KEY(t_id, id) +) PARTITION BY LIST COLUMNS(id) ( + PARTITION `1HkZbSJOALI` VALUES IN ('1HkZbSJOALI') ENGINE = InnoDB, + PARTITION `1cUPlKUTy1R` VALUES IN ('1cUPlKUTy1R') ENGINE = InnoDB, + PARTITION `1e3fRQM2GhI` VALUES IN ('1e3fRQM2GhI') ENGINE = InnoDB +); + +INSERT INTO test (id) VALUES + ('1HkZbSJOALI'), + ('1HkZbSJOALI'), + ('1cUPlKUTy1R'), + ('1cUPlKUTy1R'), + ('1e3fRQM2GhI'); + +SHOW CREATE TABLE test; +SET @@sql_mode = @prev_mode; +SHOW CREATE TABLE test; + +SELECT * FROM test; + +DROP TABLE test; + +# test case 3: some special case, can we add partitions normally +--echo +--echo -------------------------------* TEST CASE 3 *------------------------------- +SET @@sql_quote_show_create=0; +CREATE TABLE test ( + id INT PRIMARY KEY, + c1 CHAR(50) +) PARTITION BY LIST COLUMNS(id) ( + PARTITION `1eabcdesfjjkk` VALUES IN(1), + PARTITION `1e-5` VALUES IN(2), + PARTITION `1e10` VALUES IN(3) +); + +SHOW CREATE TABLE test; + +ALTER TABLE test ADD PARTITION (PARTITION `1Exxxjjj` VALUES IN(4)); +--error ER_PARSE_ERROR +ALTER TABLE test ADD PARTITION (PARTITION 1E+40 VALUES IN(5)); +ALTER TABLE test ADD PARTITION (PARTITION `1E+40` VALUES IN(5)); +--error ER_PARSE_ERROR +ALTER TABLE test ADD PARTITION (PARTITION 1000e4 VALUES IN(6)); +ALTER TABLE test ADD PARTITION (PARTITION `1000e4` VALUES IN(6)); +--error ER_PARSE_ERROR +ALTER TABLE test ADD PARTITION (PARTITION 1000e4avddd VALUES IN(7)); +ALTER TABLE test ADD PARTITION (PARTITION `1000e4avddd` VALUES IN(7)); +--error ER_PARSE_ERROR +ALTER TABLE test ADD PARTITION (PARTITION 1000e-4aa VALUES IN(8)); +ALTER TABLE test ADD PARTITION (PARTITION `1000e-4aa` VALUES IN(8)); +ALTER TABLE test ADD PARTITION (PARTITION 98G7 VALUES IN(9)); +ALTER TABLE test ADD PARTITION (PARTITION 98X7bccc VALUES IN(10)); +--error ER_PARSE_ERROR +ALTER TABLE test ADD PARTITION (PARTITION -7e8 VALUES IN(11)); +ALTER TABLE test ADD PARTITION (PARTITION `-7e8` VALUES IN(11)); +--error ER_PARSE_ERROR +ALTER TABLE test ADD PARTITION (PARTITION +57e9 VALUES IN(12)); +ALTER TABLE test ADD PARTITION (PARTITION `+57e9` VALUES IN(12)); +ALTER TABLE test ADD PARTITION (PARTITION 7eaaaaaa8 VALUES IN(13)); +ALTER TABLE test ADD PARTITION (PARTITION E100 VALUES IN(14)); + +INSERT INTO test (id, c1) VALUES + (1, 'First Entry'), + (2, 'Second Entry'), + (3, 'Third Entry'), + (4, 'Fourth Entry'), + (5, 'Fifth Entry'), + (6, 'Sixth Entry'), + (7, 'Seventh Entry'), + (8, 'eighth Entry'), + (9, 'eighth Entry'), + (10, 'eighth Entry'), + (11, 'eighth Entry'), + (12, 'eighth Entry'), + (13, 'eighth Entry'), + (14, 'eighth Entry'); + +SELECT * FROM test; + +SHOW CREATE TABLE test; + +DROP TABLE test; diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 6a67e95b410..df1f0073292 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -1434,6 +1434,7 @@ void mysqld_list_fields(THD *thd, Table_ref *table_list, const char *wild) { static const char *require_quotes(const char *name, size_t name_length) { bool pure_digit = true; + bool float_may_detect = false; const char *end = name + name_length; // Identifier starting with '$' is deprecated. @@ -1444,6 +1445,14 @@ static const char *require_quotes(const char *name, size_t name_length) { uint length = my_mbcharlen(system_charset_info, chr); if (length == 0 || (length == 1 && !system_charset_info->ident_map[chr])) return name; + if (float_may_detect && length == 1 && (chr >= '0' && chr <= '9')) { + return name; + } else { + float_may_detect = false; + } + if (i > 0 && pure_digit && length == 1 && (chr == 'e' || chr == 'E')) { + float_may_detect = true; + } if (length == 1 && (chr < '0' || chr > '9')) pure_digit = false; } if (pure_digit) return name; -- 2.32.0.3.g01195cf9f