summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuilhem Bichot <guilhem.bichot@oracle.com>2010-08-11 19:56:56 +0200
committerGuilhem Bichot <guilhem.bichot@oracle.com>2010-08-11 19:56:56 +0200
commit53c8b221166d6d94a98e00ad4b3ba58da4d3a7eb (patch)
tree04057e64c955392f0086f704b8da252379c58ff5
parenta1d90f124f30f30d3bc609d7a5783341089e54ce (diff)
downloadmariadb-git-53c8b221166d6d94a98e00ad4b3ba58da4d3a7eb.tar.gz
fix for Bug #55672 "mysql_upgrade dies with internal error":
it couldn't parse the --ssl option. client/mysql_upgrade.c: mysql_upgrade parses its options and passes some of them to the underlying tools (mysqlcheck etc). To do this passdown, it reconstructs a command-line-suitable text from the my_option object (which contains the option's name and option's value). For options which expect no parameter, it just had to use the option's name; for other options, it had to concatenate the option's name, a "=" symbol, and the option's value; it had code to handle this latter case, but only for GET_STR options (options taking a string as value). But since the work on WL 4738, the --ssl option, a GET_BOOL, which used to have no parameter (NO_ARG), can now have one (OPT_ARG), so with --ssl we came to the "default" label, error. Fixed by constructing the command-line-suitable representation for GET_BOOL too. For --ssl it will produce --ssl=1 ; for --ssl=0, it will produce --ssl=0. mysql-test/include/mysql_upgrade_preparation.inc: handles requirements of tests which use mysql_upgrade mysql-test/r/mysql_upgrade_ssl.result: result; without the code fix we would get "internal error". mysql-test/t/mysql_upgrade.test: This test has requirements before running; moved them to an include file in order to share with mysql_upgrade_ssl. mysql-test/t/mysql_upgrade_ssl.test: test for bug. Couldn't go into mysql_upgrade.test as this new test requires SSL support. --force is needed, in case mysql_upgrade.test run before (in which case mysql_upgrade_ssl would say that upgrade has already been done); --force forces the upgrade in all cases.
-rw-r--r--client/mysql_upgrade.c3
-rw-r--r--mysql-test/include/mysql_upgrade_preparation.inc30
-rw-r--r--mysql-test/r/mysql_upgrade_ssl.result32
-rw-r--r--mysql-test/t/mysql_upgrade.test29
-rw-r--r--mysql-test/t/mysql_upgrade_ssl.test10
5 files changed, 76 insertions, 28 deletions
diff --git a/client/mysql_upgrade.c b/client/mysql_upgrade.c
index eeab3611913..882350f813b 100644
--- a/client/mysql_upgrade.c
+++ b/client/mysql_upgrade.c
@@ -209,6 +209,9 @@ static void add_one_option(DYNAMIC_STRING* ds,
case GET_STR:
arg= argument;
break;
+ case GET_BOOL:
+ arg= (*(my_bool *)opt->value) ? "1" : "0";
+ break;
default:
die("internal error at %s: %d",__FILE__, __LINE__);
}
diff --git a/mysql-test/include/mysql_upgrade_preparation.inc b/mysql-test/include/mysql_upgrade_preparation.inc
new file mode 100644
index 00000000000..5de8a79d6e0
--- /dev/null
+++ b/mysql-test/include/mysql_upgrade_preparation.inc
@@ -0,0 +1,30 @@
+# Include this in any test using mysql_upgrade
+
+# Can't run test of external client with embedded server
+-- source include/not_embedded.inc
+
+# Only run test if "mysql_upgrade" is found
+--require r/have_mysql_upgrade.result
+--disable_query_log
+select LENGTH("$MYSQL_UPGRADE")>0 as have_mysql_upgrade;
+--enable_query_log
+
+#
+# Hack:
+#
+# If running with Valgrind ($VALGRIND_TEST <> 0) then the resource
+# consumption (CPU) for upgrading a large log table will be intense.
+# Therefore, truncate the log table in advance and issue a statement
+# that should be logged.
+#
+if (`SELECT $VALGRIND_TEST`)
+{
+ --disable_query_log
+ --disable_result_log
+ --disable_abort_on_error
+ TRUNCATE TABLE mysql.general_log;
+ SELECT 1;
+ --enable_abort_on_error
+ --enable_result_log
+ --enable_query_log
+}
diff --git a/mysql-test/r/mysql_upgrade_ssl.result b/mysql-test/r/mysql_upgrade_ssl.result
new file mode 100644
index 00000000000..f1229c4a405
--- /dev/null
+++ b/mysql-test/r/mysql_upgrade_ssl.result
@@ -0,0 +1,32 @@
+#
+# Bug#55672 mysql_upgrade dies with internal error
+#
+mtr.global_suppressions OK
+mtr.test_suppressions OK
+mysql.columns_priv OK
+mysql.db OK
+mysql.event OK
+mysql.func OK
+mysql.general_log
+Error : You can't use locks with log tables.
+status : OK
+mysql.help_category OK
+mysql.help_keyword OK
+mysql.help_relation OK
+mysql.help_topic OK
+mysql.host OK
+mysql.ndb_binlog_index OK
+mysql.plugin OK
+mysql.proc OK
+mysql.procs_priv OK
+mysql.servers OK
+mysql.slow_log
+Error : You can't use locks with log tables.
+status : OK
+mysql.tables_priv OK
+mysql.time_zone OK
+mysql.time_zone_leap_second OK
+mysql.time_zone_name OK
+mysql.time_zone_transition OK
+mysql.time_zone_transition_type OK
+mysql.user OK
diff --git a/mysql-test/t/mysql_upgrade.test b/mysql-test/t/mysql_upgrade.test
index 3ea612d2ca7..3c6cc45da38 100644
--- a/mysql-test/t/mysql_upgrade.test
+++ b/mysql-test/t/mysql_upgrade.test
@@ -1,31 +1,4 @@
-# Can't run test of external client with embedded server
--- source include/not_embedded.inc
-
-# Only run test if "mysql_upgrade" is found
---require r/have_mysql_upgrade.result
---disable_query_log
-select LENGTH("$MYSQL_UPGRADE")>0 as have_mysql_upgrade;
---enable_query_log
-
-#
-# Hack:
-#
-# If running with Valgrind ($VALGRIND_TEST <> 0) then the resource
-# consumption (CPU) for upgrading a large log table will be intense.
-# Therefore, truncate the log table in advance and issue a statement
-# that should be logged.
-#
-if (`SELECT $VALGRIND_TEST`)
-{
- --disable_query_log
- --disable_result_log
- --disable_abort_on_error
- TRUNCATE TABLE mysql.general_log;
- SELECT 1;
- --enable_abort_on_error
- --enable_result_log
- --enable_query_log
-}
+-- source include/mysql_upgrade_preparation.inc
#
# Basic test that we can run mysql_upgrde and that it finds the
diff --git a/mysql-test/t/mysql_upgrade_ssl.test b/mysql-test/t/mysql_upgrade_ssl.test
new file mode 100644
index 00000000000..d1c029bf33a
--- /dev/null
+++ b/mysql-test/t/mysql_upgrade_ssl.test
@@ -0,0 +1,10 @@
+# mysql_upgrade tests requiring SSL support
+
+-- source include/have_ssl_communication.inc
+-- source include/mysql_upgrade_preparation.inc
+
+--echo #
+--echo # Bug#55672 mysql_upgrade dies with internal error
+--echo #
+--exec $MYSQL_UPGRADE --skip-verbose --ssl --force 2>&1
+--exit