From 7117ee8ccc9e7bbac876871cb3bf31019a882b4c Mon Sep 17 00:00:00 2001 From: Jim Winstead Date: Mon, 18 May 2009 12:52:51 -0700 Subject: [PATCH 01/10] The output of mysqldump --tab for views included a DROP TABLE statement without the IF EXISTS qualifier even though no temporary table is created as for all-in-one dumps including views. (Bug #37377) --- client/mysqldump.c | 3 ++- mysql-test/r/mysqldump.result | 39 +++++++++++++++++++++-------------- mysql-test/t/mysqldump.test | 23 +++++++++++++++++++++ 3 files changed, 49 insertions(+), 16 deletions(-) diff --git a/client/mysqldump.c b/client/mysqldump.c index efcb1820be4..87b78cb41e1 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -4802,7 +4802,8 @@ static my_bool get_view_structure(char *table, char* db) result_table); check_io(sql_file); } - fprintf(sql_file, "/*!50001 DROP TABLE %s*/;\n", opt_quoted_table); + /* Table might not exist if this view was dumped with --tab. */ + fprintf(sql_file, "/*!50001 DROP TABLE IF EXISTS %s*/;\n", opt_quoted_table); if (opt_drop) { fprintf(sql_file, "/*!50001 DROP VIEW IF EXISTS %s*/;\n", diff --git a/mysql-test/r/mysqldump.result b/mysql-test/r/mysqldump.result index 7e987df8166..b48b6c9d87f 100644 --- a/mysql-test/r/mysqldump.result +++ b/mysql-test/r/mysqldump.result @@ -1991,7 +1991,7 @@ SET character_set_client = utf8; `a` varchar(30) ) ENGINE=MyISAM */; SET character_set_client = @saved_cs_client; -/*!50001 DROP TABLE `v2`*/; +/*!50001 DROP TABLE IF EXISTS `v2`*/; /*!50001 DROP VIEW IF EXISTS `v2`*/; /*!50001 SET @saved_cs_client = @@character_set_client */; /*!50001 SET @saved_cs_results = @@character_set_results */; @@ -2085,7 +2085,7 @@ SET character_set_client = utf8; `a` int(11) ) ENGINE=MyISAM */; SET character_set_client = @saved_cs_client; -/*!50001 DROP TABLE `v1`*/; +/*!50001 DROP TABLE IF EXISTS `v1`*/; /*!50001 DROP VIEW IF EXISTS `v1`*/; /*!50001 SET @saved_cs_client = @@character_set_client */; /*!50001 SET @saved_cs_results = @@character_set_results */; @@ -2159,7 +2159,7 @@ SET character_set_client = utf8; `a` varchar(30) ) ENGINE=MyISAM */; SET character_set_client = @saved_cs_client; -/*!50001 DROP TABLE `v2`*/; +/*!50001 DROP TABLE IF EXISTS `v2`*/; /*!50001 DROP VIEW IF EXISTS `v2`*/; /*!50001 SET @saved_cs_client = @@character_set_client */; /*!50001 SET @saved_cs_results = @@character_set_results */; @@ -2293,7 +2293,7 @@ SET character_set_client = utf8; `c` varchar(30) ) ENGINE=MyISAM */; SET character_set_client = @saved_cs_client; -/*!50001 DROP TABLE `v1`*/; +/*!50001 DROP TABLE IF EXISTS `v1`*/; /*!50001 DROP VIEW IF EXISTS `v1`*/; /*!50001 SET @saved_cs_client = @@character_set_client */; /*!50001 SET @saved_cs_results = @@character_set_results */; @@ -2307,7 +2307,7 @@ SET character_set_client = @saved_cs_client; /*!50001 SET character_set_client = @saved_cs_client */; /*!50001 SET character_set_results = @saved_cs_results */; /*!50001 SET collation_connection = @saved_col_connection */; -/*!50001 DROP TABLE `v2`*/; +/*!50001 DROP TABLE IF EXISTS `v2`*/; /*!50001 DROP VIEW IF EXISTS `v2`*/; /*!50001 SET @saved_cs_client = @@character_set_client */; /*!50001 SET @saved_cs_results = @@character_set_results */; @@ -2321,7 +2321,7 @@ SET character_set_client = @saved_cs_client; /*!50001 SET character_set_client = @saved_cs_client */; /*!50001 SET character_set_results = @saved_cs_results */; /*!50001 SET collation_connection = @saved_col_connection */; -/*!50001 DROP TABLE `v3`*/; +/*!50001 DROP TABLE IF EXISTS `v3`*/; /*!50001 DROP VIEW IF EXISTS `v3`*/; /*!50001 SET @saved_cs_client = @@character_set_client */; /*!50001 SET @saved_cs_results = @@character_set_results */; @@ -3054,7 +3054,7 @@ SET character_set_client = utf8; SET character_set_client = @saved_cs_client; USE `test`; -/*!50001 DROP TABLE `v0`*/; +/*!50001 DROP TABLE IF EXISTS `v0`*/; /*!50001 DROP VIEW IF EXISTS `v0`*/; /*!50001 SET @saved_cs_client = @@character_set_client */; /*!50001 SET @saved_cs_results = @@character_set_results */; @@ -3068,7 +3068,7 @@ USE `test`; /*!50001 SET character_set_client = @saved_cs_client */; /*!50001 SET character_set_results = @saved_cs_results */; /*!50001 SET collation_connection = @saved_col_connection */; -/*!50001 DROP TABLE `v1`*/; +/*!50001 DROP TABLE IF EXISTS `v1`*/; /*!50001 DROP VIEW IF EXISTS `v1`*/; /*!50001 SET @saved_cs_client = @@character_set_client */; /*!50001 SET @saved_cs_results = @@character_set_results */; @@ -3082,7 +3082,7 @@ USE `test`; /*!50001 SET character_set_client = @saved_cs_client */; /*!50001 SET character_set_results = @saved_cs_results */; /*!50001 SET collation_connection = @saved_col_connection */; -/*!50001 DROP TABLE `v2`*/; +/*!50001 DROP TABLE IF EXISTS `v2`*/; /*!50001 DROP VIEW IF EXISTS `v2`*/; /*!50001 SET @saved_cs_client = @@character_set_client */; /*!50001 SET @saved_cs_results = @@character_set_results */; @@ -3320,7 +3320,7 @@ insert into t values(5, 51); create view v1 as select qty, price, qty*price as value from t; create view v2 as select qty from v1; mysqldump { -/*!50001 DROP TABLE `v1`*/; +/*!50001 DROP TABLE IF EXISTS `v1`*/; /*!50001 SET @saved_cs_client = @@character_set_client */; /*!50001 SET @saved_cs_results = @@character_set_results */; /*!50001 SET @saved_col_connection = @@collation_connection */; @@ -3335,7 +3335,7 @@ mysqldump { /*!50001 SET collation_connection = @saved_col_connection */; } mysqldump { -/*!50001 DROP TABLE `v2`*/; +/*!50001 DROP TABLE IF EXISTS `v2`*/; /*!50001 SET @saved_cs_client = @@character_set_client */; /*!50001 SET @saved_cs_results = @@character_set_results */; /*!50001 SET @saved_col_connection = @@collation_connection */; @@ -3434,7 +3434,7 @@ SET character_set_client = utf8; SET character_set_client = @saved_cs_client; USE `mysqldump_test_db`; -/*!50001 DROP TABLE `v1`*/; +/*!50001 DROP TABLE IF EXISTS `v1`*/; /*!50001 DROP VIEW IF EXISTS `v1`*/; /*!50001 SET @saved_cs_client = @@character_set_client */; /*!50001 SET @saved_cs_results = @@character_set_results */; @@ -3496,7 +3496,7 @@ SET character_set_client = @saved_cs_client; USE `mysqldump_tables`; USE `mysqldump_views`; -/*!50001 DROP TABLE `nasishnasifu`*/; +/*!50001 DROP TABLE IF EXISTS `nasishnasifu`*/; /*!50001 SET @saved_cs_client = @@character_set_client */; /*!50001 SET @saved_cs_results = @@character_set_results */; /*!50001 SET @saved_col_connection = @@collation_connection */; @@ -3885,7 +3885,7 @@ SET character_set_client = utf8; `c` int(11) ) ENGINE=MyISAM */; SET character_set_client = @saved_cs_client; -/*!50001 DROP TABLE `v2`*/; +/*!50001 DROP TABLE IF EXISTS `v2`*/; /*!50001 DROP VIEW IF EXISTS `v2`*/; /*!50001 SET @saved_cs_client = @@character_set_client */; /*!50001 SET @saved_cs_results = @@character_set_results */; @@ -4304,7 +4304,7 @@ SET character_set_client = utf8; SET character_set_client = @saved_cs_client; USE `mysqldump_test_db`; -/*!50001 DROP TABLE `v1`*/; +/*!50001 DROP TABLE IF EXISTS `v1`*/; /*!50001 DROP VIEW IF EXISTS `v1`*/; /*!50001 SET @saved_cs_client = @@character_set_client */; /*!50001 SET @saved_cs_results = @@character_set_results */; @@ -4430,6 +4430,15 @@ DROP DATABASE mysqldump_test_db; # -- End of test case for Bug#32538. +# +# Bug#37377 Incorrect DROP TABLE statement in dump of a VIEW using --tab +# +create table t1 (a int); +create view v1 as select a from t1; +drop view v1; +drop table t1; +drop view v1; +drop table t1; SET @@GLOBAL.CONCURRENT_INSERT = @OLD_CONCURRENT_INSERT; # # End of 5.1 tests diff --git a/mysql-test/t/mysqldump.test b/mysql-test/t/mysqldump.test index 64d1036e264..6fc8d7bdfea 100644 --- a/mysql-test/t/mysqldump.test +++ b/mysql-test/t/mysqldump.test @@ -1948,6 +1948,29 @@ DROP DATABASE mysqldump_test_db; --echo # -- End of test case for Bug#32538. --echo +--echo # +--echo # Bug#37377 Incorrect DROP TABLE statement in dump of a VIEW using --tab +--echo # + +create table t1 (a int); +create view v1 as select a from t1; + +--exec $MYSQL_DUMP --skip-comments --tab=$MYSQLTEST_VARDIR/tmp/ test t1 v1 + +drop view v1; +drop table t1; + +--exec $MYSQL test < $MYSQLTEST_VARDIR/tmp/t1.sql +--exec $MYSQL test < $MYSQLTEST_VARDIR/tmp/v1.sql + +drop view v1; +drop table t1; + +--remove_file $MYSQLTEST_VARDIR/tmp/t1.sql +--remove_file $MYSQLTEST_VARDIR/tmp/t1.txt +--remove_file $MYSQLTEST_VARDIR/tmp/v1.sql + + # We reset concurrent_inserts value to whatever it was at the start of the test # This line must be executed _after_ all test cases. SET @@GLOBAL.CONCURRENT_INSERT = @OLD_CONCURRENT_INSERT; From 1f6fa46b7a3fc8564ab552b1b01aff04483df68a Mon Sep 17 00:00:00 2001 From: Jim Winstead Date: Mon, 18 May 2009 14:19:18 -0700 Subject: [PATCH 02/10] mysqladmin did not have enough space allocated for tracking all variables when using --vertical or --relative with extended-status. (Bug #40395) This patch simply increases the buffer size and adds an assert to check that it is big enough -- a more comprehensive fix would dynamically allocate the appropriate buffers. --- client/mysqladmin.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/client/mysqladmin.cc b/client/mysqladmin.cc index 9865b67bb3b..09821d6a995 100644 --- a/client/mysqladmin.cc +++ b/client/mysqladmin.cc @@ -24,7 +24,7 @@ #include #define ADMIN_VERSION "8.42" -#define MAX_MYSQL_VAR 256 +#define MAX_MYSQL_VAR 512 #define SHUTDOWN_DEF_TIMEOUT 3600 /* Wait for shutdown */ #define MAX_TRUNC_LENGTH 3 @@ -743,6 +743,9 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv) mysql_error(mysql)); return -1; } + + DBUG_ASSERT(mysql_num_rows(res) < MAX_MYSQL_VAR); + if (!opt_vertical) print_header(res); else From 9796aec8763298883fff11254bdbd2dd2ad0781d Mon Sep 17 00:00:00 2001 From: Jim Winstead Date: Mon, 18 May 2009 18:23:43 -0700 Subject: [PATCH 03/10] mysqlslap didn't correctly handle --csv with no argument. (Bug #44412) --- client/mysqlslap.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/client/mysqlslap.c b/client/mysqlslap.c index 4cf8c7204ed..3c6a38228af 100644 --- a/client/mysqlslap.c +++ b/client/mysqlslap.c @@ -565,8 +565,7 @@ static struct my_option my_long_options[] = REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, {"csv", OPT_SLAP_CSV, "Generate CSV output to named file or to stdout if no file is named.", - (uchar**) &opt_csv_str, (uchar**) &opt_csv_str, 0, GET_STR, - OPT_ARG, 0, 0, 0, 0, 0, 0}, + NULL, NULL, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0}, #ifdef DBUG_OFF {"debug", '#', "This is a non-debug version. Catch this and exit.", 0, 0, 0, GET_DISABLED, OPT_ARG, 0, 0, 0, 0, 0, 0}, @@ -740,6 +739,11 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)), DBUG_PUSH(argument ? argument : default_dbug_option); debug_check_flag= 1; break; + case OPT_SLAP_CSV: + if (!argument) + argument= (char *)"-"; /* use stdout */ + opt_csv_str= argument; + break; #include case 'V': print_version(); From e2808aa217745689577ce978af040b65853fd006 Mon Sep 17 00:00:00 2001 From: Jim Winstead Date: Tue, 19 May 2009 10:17:05 -0700 Subject: [PATCH 04/10] The mysql command-line client didn't implement the readline magic-space command, which bash does, which could result in a user accidentally disabling the use of the space key in the mysql command-line client. (Bug #27439) --- client/mysql.cc | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/client/mysql.cc b/client/mysql.cc index 8de3cfee041..5752017bbff 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -2296,8 +2296,10 @@ extern "C" char **new_mysql_completion (const char *text, int start, int end); */ #if defined(USE_NEW_READLINE_INTERFACE) +static int fake_magic_space(int, int); extern "C" char *no_completion(const char*,int) #elif defined(USE_LIBEDIT_INTERFACE) +static int fake_magic_space(const char *, int); extern "C" int no_completion(const char*,int) #else extern "C" char *no_completion() @@ -2374,6 +2376,18 @@ static int not_in_history(const char *line) return 1; } + +#if defined(USE_NEW_READLINE_INTERFACE) +static int fake_magic_space(int, int) +#else +static int fake_magic_space(const char *, int) +#endif +{ + rl_insert(1, ' '); + return 0; +} + + static void initialize_readline (char *name) { /* Allow conditional parsing of the ~/.inputrc file. */ @@ -2383,12 +2397,15 @@ static void initialize_readline (char *name) #if defined(USE_NEW_READLINE_INTERFACE) rl_attempted_completion_function= (rl_completion_func_t*)&new_mysql_completion; rl_completion_entry_function= (rl_compentry_func_t*)&no_completion; + + rl_add_defun("magic-space", (rl_command_func_t *)&fake_magic_space, -1); #elif defined(USE_LIBEDIT_INTERFACE) #ifdef HAVE_LOCALE_H setlocale(LC_ALL,""); /* so as libedit use isprint */ #endif rl_attempted_completion_function= (CPPFunction*)&new_mysql_completion; rl_completion_entry_function= &no_completion; + rl_add_defun("magic-space", (Function*)&fake_magic_space, -1); #else rl_attempted_completion_function= (CPPFunction*)&new_mysql_completion; rl_completion_entry_function= &no_completion; From 86dc69e04591127f2ca2cbae24d57dc1615037de Mon Sep 17 00:00:00 2001 From: Jim Winstead Date: Tue, 19 May 2009 10:39:03 -0700 Subject: [PATCH 05/10] mysql_upgrade ignored the --basedir and --datadir arguments as it has no use for them, but it did so silently. (Bug #36558) --- client/mysql_upgrade.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/client/mysql_upgrade.c b/client/mysql_upgrade.c index cbc60d8acad..82bbf440bb4 100644 --- a/client/mysql_upgrade.c +++ b/client/mysql_upgrade.c @@ -251,8 +251,12 @@ get_one_option(int optid, const struct my_option *opt, break; case 'b': /* --basedir */ - case 'v': /* --verbose */ case 'd': /* --datadir */ + fprintf(stderr, "%s: the '--%s' option is always ignored\n", + my_progname, optid == 'b' ? "basedir" : "datadir"); + /* FALLTHROUGH */ + + case 'v': /* --verbose */ case 'f': /* --force */ add_option= FALSE; break; From 1c9e45c3c4904e1e81132f7c87e3abbf7d50c506 Mon Sep 17 00:00:00 2001 From: Jim Winstead Date: Tue, 19 May 2009 15:26:57 -0700 Subject: [PATCH 06/10] Table identifiers and file names were not quoted and escaped correctly by mysqlimport. (Bug #28071) --- client/mysqlimport.c | 16 +++++++++++++--- mysql-test/r/mysqldump.result | 10 ++++++++++ mysql-test/t/mysqldump.test | 23 +++++++++++++++++++++-- 3 files changed, 44 insertions(+), 5 deletions(-) diff --git a/client/mysqlimport.c b/client/mysqlimport.c index ec418244f3d..5a8fabd4da7 100644 --- a/client/mysqlimport.c +++ b/client/mysqlimport.c @@ -303,7 +303,8 @@ static int get_options(int *argc, char ***argv) static int write_to_table(char *filename, MYSQL *mysql) { char tablename[FN_REFLEN], hard_path[FN_REFLEN], - sql_statement[FN_REFLEN*16+256], *end; + escaped_name[FN_REFLEN * 2 + 1], + sql_statement[FN_REFLEN*16+256], *end, *pos; DBUG_ENTER("write_to_table"); DBUG_PRINT("enter",("filename: %s",filename)); @@ -338,15 +339,24 @@ static int write_to_table(char *filename, MYSQL *mysql) fprintf(stdout, "Loading data from SERVER file: %s into %s\n", hard_path, tablename); } + mysql_real_escape_string(mysql, escaped_name, hard_path, strlen(hard_path)); sprintf(sql_statement, "LOAD DATA %s %s INFILE '%s'", opt_low_priority ? "LOW_PRIORITY" : "", - opt_local_file ? "LOCAL" : "", hard_path); + opt_local_file ? "LOCAL" : "", escaped_name); end= strend(sql_statement); if (replace) end= strmov(end, " REPLACE"); if (ignore) end= strmov(end, " IGNORE"); - end= strmov(strmov(end, " INTO TABLE "), tablename); + end= strmov(end, " INTO TABLE `"); + /* Turn any ` into `` in table name. */ + for (pos= tablename; *pos; pos++) + { + if (*pos == '`') + *end++= '`'; + *end++= *pos; + } + end= strmov(end, "`"); if (fields_terminated || enclosed || opt_enclosed || escaped) end= strmov(end, " FIELDS"); diff --git a/mysql-test/r/mysqldump.result b/mysql-test/r/mysqldump.result index b48b6c9d87f..55a251a5b84 100644 --- a/mysql-test/r/mysqldump.result +++ b/mysql-test/r/mysqldump.result @@ -4439,6 +4439,16 @@ drop view v1; drop table t1; drop view v1; drop table t1; +# +# Bug#28071 mysqlimport does not quote or escape table name +# +drop table if exists `load`; +create table `load` (a varchar(255)); +test.load: Records: 70 Deleted: 0 Skipped: 0 Warnings: 0 +select count(*) from `load`; +count(*) +70 +drop table `load`; SET @@GLOBAL.CONCURRENT_INSERT = @OLD_CONCURRENT_INSERT; # # End of 5.1 tests diff --git a/mysql-test/t/mysqldump.test b/mysql-test/t/mysqldump.test index 6fc8d7bdfea..2ac22fd72ce 100644 --- a/mysql-test/t/mysqldump.test +++ b/mysql-test/t/mysqldump.test @@ -1971,8 +1971,27 @@ drop table t1; --remove_file $MYSQLTEST_VARDIR/tmp/v1.sql -# We reset concurrent_inserts value to whatever it was at the start of the test -# This line must be executed _after_ all test cases. +--echo # +--echo # Bug#28071 mysqlimport does not quote or escape table name +--echo # + +--disable_warnings +drop table if exists `load`; +--enable_warnings +create table `load` (a varchar(255)); + +--copy_file std_data/words.dat $MYSQLTEST_VARDIR/tmp/load.txt + +--exec $MYSQL_IMPORT --ignore test $MYSQLTEST_VARDIR/tmp/load.txt + +select count(*) from `load`; + +--remove_file $MYSQLTEST_VARDIR/tmp/load.txt + +drop table `load`; + +# We reset concurrent_inserts value to whatever it was at the start of the +# test This line must be executed _after_ all test cases. SET @@GLOBAL.CONCURRENT_INSERT = @OLD_CONCURRENT_INSERT; From 50e7c391122e7d89b4fca0399375a406f36df9ee Mon Sep 17 00:00:00 2001 From: Jim Winstead Date: Wed, 20 May 2009 12:58:01 -0700 Subject: [PATCH 07/10] Fix warning in use of strlen(). --- client/mysqlimport.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/mysqlimport.c b/client/mysqlimport.c index 5a8fabd4da7..38a6e5fa3e6 100644 --- a/client/mysqlimport.c +++ b/client/mysqlimport.c @@ -339,7 +339,8 @@ static int write_to_table(char *filename, MYSQL *mysql) fprintf(stdout, "Loading data from SERVER file: %s into %s\n", hard_path, tablename); } - mysql_real_escape_string(mysql, escaped_name, hard_path, strlen(hard_path)); + mysql_real_escape_string(mysql, escaped_name, hard_path, + (unsigned long) strlen(hard_path)); sprintf(sql_statement, "LOAD DATA %s %s INFILE '%s'", opt_low_priority ? "LOW_PRIORITY" : "", opt_local_file ? "LOCAL" : "", escaped_name); From 1e9a02c943101bfd75d539ee58eeed4caf1a17d9 Mon Sep 17 00:00:00 2001 From: Jim Winstead Date: Wed, 20 May 2009 17:04:44 -0700 Subject: [PATCH 08/10] The mysql command-line client would include superfluous spaces at the end of some result set lines. (Bug #29622) --- client/mysql.cc | 5 +++- mysql-test/r/mysql.result | 36 ++++++++++++------------- mysql-test/r/parser_not_embedded.result | 18 ++++++------- 3 files changed, 31 insertions(+), 28 deletions(-) diff --git a/client/mysql.cc b/client/mysql.cc index 5752017bbff..5dbcc5eabba 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -3319,6 +3319,9 @@ print_table_data(MYSQL_RES *result) uint visible_length; uint extra_padding; + if (off) + (void) tee_fputs(" ", PAGER); + if (cur[off] == NULL) { buffer= "NULL"; @@ -3353,7 +3356,7 @@ print_table_data(MYSQL_RES *result) else tee_print_sized_data(buffer, data_length, field_max_length+extra_padding, FALSE); } - tee_fputs(" | ", PAGER); + tee_fputs(" |", PAGER); } (void) tee_fputs("\n", PAGER); } diff --git a/mysql-test/r/mysql.result b/mysql-test/r/mysql.result index c53a2243811..101518289e9 100644 --- a/mysql-test/r/mysql.result +++ b/mysql-test/r/mysql.result @@ -64,28 +64,28 @@ drop table t1; +----------------------+------------+--------+ | concat('>',col1,'<') | col2 | col3 | +----------------------+------------+--------+ -| >a < | b | 123421 | -| >a < | 0123456789 | 4 | -| >abcd< | | 4 | +| >a < | b | 123421 | +| >a < | 0123456789 | 4 | +| >abcd< | | 4 | +----------------------+------------+--------+ +-------------------+ | __tañgè Ñãmé | +-------------------+ -| John Doe | +| John Doe | +-------------------+ +-------------------+ | John Doe | +-------------------+ -| __tañgè Ñãmé | +| __tañgè Ñãmé | +-------------------+ +------+------+---------------------------+ | i | j | k | +------+------+---------------------------+ -| 1 | NULL | NULL | -| NULL | NULL | <-----------------------> | -| NULL | NULL | <----- | -| NULL | NULL | Τη γλώσσα | -| NULL | NULL | ᛖᚴ ᚷᛖᛏ | +| 1 | NULL | NULL | +| NULL | NULL | <-----------------------> | +| NULL | NULL | <----- | +| NULL | NULL | Τη γλώσσα | +| NULL | NULL | ᛖᚴ ᚷᛖᛏ | +------+------+---------------------------+ i j k NULL 1 NULL @@ -96,14 +96,14 @@ k int(11) YES NULL +------+---+------+ | i | j | k | +------+---+------+ -| NULL | 1 | NULL | +| NULL | 1 | NULL | +------+---+------+ +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ -| i | int(11) | YES | | NULL | | -| j | int(11) | NO | | NULL | | -| k | int(11) | YES | | NULL | | +| i | int(11) | YES | | NULL | | +| j | int(11) | NO | | NULL | | +| k | int(11) | YES | | NULL | | +-------+---------+------+-----+---------+-------+ i s1 1 x @@ -112,16 +112,16 @@ i s1 +------+------+ | i | s1 | +------+------+ -| 1 | x | -| 2 | NULL | -| 3 | | +| 1 | x | +| 2 | NULL | +| 3 | | +------+------+ unhex('zz') NULL +-------------+ | unhex('zz') | +-------------+ -| NULL | +| NULL | +-------------+ create table t1(a int, b varchar(255), c int); Field Type Null Key Default Extra diff --git a/mysql-test/r/parser_not_embedded.result b/mysql-test/r/parser_not_embedded.result index 871eb226cc4..140b13c9864 100644 --- a/mysql-test/r/parser_not_embedded.result +++ b/mysql-test/r/parser_not_embedded.result @@ -5,45 +5,45 @@ +----------+--------+ | expected | result | +----------+--------+ -| 2 | 2 | +| 2 | 2 | +----------+--------+ +----------+--------+ | expected | result | +----------+--------+ -| 1 | 1 | +| 1 | 1 | +----------+--------+ +----------+--------+ | expected | result | +----------+--------+ -| 3 | 3 | +| 3 | 3 | +----------+--------+ +----------+--------+ | expected | result | +----------+--------+ -| 2 | 2 | +| 2 | 2 | +----------+--------+ +----------+--------+ | expected | result | +----------+--------+ -| 7 | 7 | +| 7 | 7 | +----------+--------+ +----------+--------+ | expected | result | +----------+--------+ -| 8 | 8 | +| 8 | 8 | +----------+--------+ +----------+--------+ | expected | result | +----------+--------+ -| 7 | 7 | +| 7 | 7 | +----------+--------+ +----------+--------+ | expected | result | +----------+--------+ -| 4 | 4 | +| 4 | 4 | +----------+--------+ +----------+--------+ | expected | result | +----------+--------+ -| 4 | 4 | +| 4 | 4 | +----------+--------+ From d57bb98ff5c62fff7d9912dd0a96ad99fcab3861 Mon Sep 17 00:00:00 2001 From: Jim Winstead Date: Wed, 20 May 2009 17:25:10 -0700 Subject: [PATCH 09/10] mysqladmin --count=X --sleep=Y would always delay Y seconds after the last iteration before exiting. (Bug #42639) --- client/mysqladmin.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/mysqladmin.cc b/client/mysqladmin.cc index 09821d6a995..a4e7c5ad0c9 100644 --- a/client/mysqladmin.cc +++ b/client/mysqladmin.cc @@ -371,7 +371,7 @@ int main(int argc,char *argv[]) } else { - while (!interrupted && (!opt_count_iterations || nr_iterations)) + while (!interrupted) { new_line = 0; if ((error=execute_commands(&mysql,argc,commands))) @@ -395,11 +395,11 @@ int main(int argc,char *argv[]) } if (interval) { + if (opt_count_iterations && --nr_iterations == 0) + break; sleep(interval); if (new_line) puts(""); - if (opt_count_iterations) - nr_iterations--; } else break; From f0f4efd77e3eb7d62176396b5ccf53d7a7029c85 Mon Sep 17 00:00:00 2001 From: Jim Winstead Date: Wed, 20 May 2009 18:31:10 -0700 Subject: [PATCH 10/10] mysqlcheck failed to fix table names when using the --fix-table-names and --all-in-1 options together. (Bug #31821) --- client/mysqlcheck.c | 4 ++-- mysql-test/r/mysqlcheck.result | 14 ++++++++++++++ mysql-test/t/mysqlcheck.test | 17 +++++++++++++++++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/client/mysqlcheck.c b/client/mysqlcheck.c index 1bdb28f5a11..83d2006b597 100644 --- a/client/mysqlcheck.c +++ b/client/mysqlcheck.c @@ -442,7 +442,7 @@ static int process_selected_tables(char *db, char **table_names, int tables) { if (use_db(db)) return 1; - if (opt_all_in_1) + if (opt_all_in_1 && what_to_do != DO_UPGRADE) { /* We need table list in form `a`, `b`, `c` @@ -536,7 +536,7 @@ static int process_all_tables_in_db(char *database) num_columns= mysql_num_fields(res); - if (opt_all_in_1) + if (opt_all_in_1 && what_to_do != DO_UPGRADE) { /* We need table list in form `a`, `b`, `c` diff --git a/mysql-test/r/mysqlcheck.result b/mysql-test/r/mysqlcheck.result index 704cd7ac3f4..5f1a0565b10 100644 --- a/mysql-test/r/mysqlcheck.result +++ b/mysql-test/r/mysqlcheck.result @@ -186,4 +186,18 @@ a 500 DROP DATABASE `a@b`; USE test; +# +# Bug #31821: --all-in-1 and --fix-table-names don't work together +# +drop table if exists `#mysql50#t1-1`; +create table `#mysql50#t1-1` (a int); +show tables like 't1-1'; +Tables_in_test (t1-1) +t1-1 +drop table `t1-1`; +create table `#mysql50#t1-1` (a int); +show tables like 't1-1'; +Tables_in_test (t1-1) +t1-1 +drop table `t1-1`; End of 5.1 tests diff --git a/mysql-test/t/mysqlcheck.test b/mysql-test/t/mysqlcheck.test index e834c60dcb5..986b5aba385 100644 --- a/mysql-test/t/mysqlcheck.test +++ b/mysql-test/t/mysqlcheck.test @@ -193,5 +193,22 @@ DROP DATABASE `a@b`; USE test; +--echo # +--echo # Bug #31821: --all-in-1 and --fix-table-names don't work together +--echo # + +--disable_warnings +drop table if exists `#mysql50#t1-1`; +--enable_warnings + +create table `#mysql50#t1-1` (a int); +--exec $MYSQL_CHECK --all-in-1 --fix-table-names --databases test +show tables like 't1-1'; +drop table `t1-1`; + +create table `#mysql50#t1-1` (a int); +--exec $MYSQL_CHECK --all-in-1 --fix-table-names test "#mysql50#t1-1" +show tables like 't1-1'; +drop table `t1-1`; --echo End of 5.1 tests