From 4aa371f28c2f60deeb080a159898895169e57c59 Mon Sep 17 00:00:00 2001 From: arwinhe Date: Thu, 14 Dec 2023 11:06:03 +0800 Subject: [PATCH] Bug#113400 mysqlpump generates incorrect sql when skipping gipk After fixing Bug #111292, mysqldump generates sql having syntax error. Fix: change the condition for appendding comma in generated sql. --- mysql-test/r/mysqldump_gipk_bug.result | 6 ++++++ mysql-test/t/mysqldump_gipk_bug.test | 13 +++++++++++++ sql/sql_show.cc | 6 +++++- 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 mysql-test/r/mysqldump_gipk_bug.result create mode 100644 mysql-test/t/mysqldump_gipk_bug.test diff --git a/mysql-test/r/mysqldump_gipk_bug.result b/mysql-test/r/mysqldump_gipk_bug.result new file mode 100644 index 00000000000..e41238b35c7 --- /dev/null +++ b/mysql-test/r/mysqldump_gipk_bug.result @@ -0,0 +1,6 @@ +CREATE TABLE t1 (my_row_id bigint unsigned NOT NULL AUTO_INCREMENT INVISIBLE, f INT, +PRIMARY KEY(my_row_id)); +ALTER TABLE t1 ADD INDEX(my_row_id, f); +INSERT INTO t1 VALUES (1), (3), (7), (8), (4); +DROP TABLE t1; +DROP TABLE t1; diff --git a/mysql-test/t/mysqldump_gipk_bug.test b/mysql-test/t/mysqldump_gipk_bug.test new file mode 100644 index 00000000000..c169ec98dc2 --- /dev/null +++ b/mysql-test/t/mysqldump_gipk_bug.test @@ -0,0 +1,13 @@ +CREATE TABLE t1 (my_row_id bigint unsigned NOT NULL AUTO_INCREMENT INVISIBLE, f INT, + PRIMARY KEY(my_row_id)); +ALTER TABLE t1 ADD INDEX(my_row_id, f); +INSERT INTO t1 VALUES (1), (3), (7), (8), (4); + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--exec $MYSQL_DUMP --databases test --skip-generated-invisible-primary-key > "$MYSQLTEST_VARDIR/tmp/test.sql" +DROP TABLE t1; + +--exec $MYSQL < $MYSQLTEST_VARDIR/tmp/test.sql + +remove_file $MYSQLTEST_VARDIR/tmp/test.sql; +DROP TABLE t1; diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 64c61f060db..ee5dbc43eee 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -2242,7 +2242,11 @@ bool store_create_info(THD *thd, Table_ref *table_list, String *packet, packet->append(STRING_WITH_LEN(" (")); for (uint j = 0; j < key_info->user_defined_key_parts; j++, key_part++) { - if (j) packet->append(','); + assert(key_part->field); + if (skip_gipk && key_part->field->is_hidden_by_user()) + continue; + + if (packet->ptr()[packet->length() - 1] != '(') packet->append(','); if (key_part->field) { // If this fields represents a functional index, print the expression -- 2.19.1