diff options
author | msvensson@pilot.blaudden <> | 2007-02-28 21:21:37 +0100 |
---|---|---|
committer | msvensson@pilot.blaudden <> | 2007-02-28 21:21:37 +0100 |
commit | ab61d07a30b73e3446b6eab9536ba464a0d55f74 (patch) | |
tree | 092ce11af31d8c456fe58b07c36dfe23b3c90471 /client | |
parent | 0b4598a4b3651c1bfbe785fb41e76564693b4b10 (diff) | |
parent | cc7e77c5fd7a316e3334a2c8696b572ed4c69d7b (diff) | |
download | mariadb-git-ab61d07a30b73e3446b6eab9536ba464a0d55f74.tar.gz |
Merge pilot.blaudden:/home/msvensson/mysql/bug25074/my50-bug25074
into pilot.blaudden:/home/msvensson/mysql/mysql-5.0-maint
Diffstat (limited to 'client')
-rw-r--r-- | client/mysql_upgrade.c | 120 |
1 files changed, 65 insertions, 55 deletions
diff --git a/client/mysql_upgrade.c b/client/mysql_upgrade.c index 8eb72af6b9d..e6870c23129 100644 --- a/client/mysql_upgrade.c +++ b/client/mysql_upgrade.c @@ -54,6 +54,8 @@ static char *default_dbug_option= (char*) "d:t:O,/tmp/mysql_upgrade.trace"; #endif static my_bool info_flag= 0, tty_password= 0; +static char **defaults_argv; + static struct my_option my_long_options[]= { {"help", '?', "Display this help message and exit.", 0, 0, 0, GET_NO_ARG, @@ -282,6 +284,10 @@ static int create_defaults_file(const char *path, const char *forced_path) DYNAMIC_STRING buf; extra_default_t *d; + DBUG_ENTER("create_defaults_file"); + DBUG_PRINT("enter", ("path: %s, forced_path: %s", path, forced_path)); + + /* Delete any previous defaults file generated by mysql_upgrade */ my_delete(path, MYF(0)); defaults_file= my_open(path, O_BINARY | O_CREAT | O_WRONLY | O_EXCL, @@ -298,6 +304,7 @@ static int create_defaults_file(const char *path, const char *forced_path) goto error; } + /* Copy forced_path file into the defaults_file being generated */ if (forced_path) { forced_file= my_open(forced_path, O_RDONLY, MYF(MY_FAE | MY_WME)); @@ -306,6 +313,7 @@ static int create_defaults_file(const char *path, const char *forced_path) ret= 1; goto error; } + DBUG_PRINT("info", ("Copying from %s to %s", forced_path, path)); do { cnt= my_read(forced_file, buf.str, buf.max_length, MYF(MY_WME)); @@ -316,10 +324,12 @@ static int create_defaults_file(const char *path, const char *forced_path) my_close(forced_file, MYF(0)); goto error; } + DBUG_PRINT("info", ("%s", buf.str)); } while (cnt == buf.max_length); my_close(forced_file, MYF(0)); } - + + /* Write all extra_default options into the [client] section */ dynstr_set(&buf, "\n[client]"); if (opt_password) { @@ -330,6 +340,7 @@ static int create_defaults_file(const char *path, const char *forced_path) goto error; } } + DBUG_PRINT("info", ("Writing extra_defaults to file")); while (extra_defaults) { int len; @@ -338,6 +349,7 @@ static int create_defaults_file(const char *path, const char *forced_path) len= d->n_len + d->v_len + 1; if (buf.length + len >= buf.max_length) /* to avoid realloc() */ { + if (my_write(defaults_file, buf.str, buf.length, MYF(MY_FNABP | MY_WME))) { ret= 1; @@ -345,15 +357,16 @@ static int create_defaults_file(const char *path, const char *forced_path) } dynstr_set(&buf, NULL); } - if (dynstr_append_mem(&buf, "\n", 1) - || dynstr_append_mem(&buf, d->name, d->n_len) - || (d->v_len && (dynstr_append_mem(&buf, "=", 1) - || dynstr_append_mem(&buf, d->value, d->v_len)))) + if (dynstr_append_mem(&buf, "\n", 1) || + dynstr_append_mem(&buf, d->name, d->n_len) || + (d->v_len && (dynstr_append_mem(&buf, "=", 1) || + dynstr_append_mem(&buf, d->value, d->v_len)))) { ret= 1; goto error; } - my_delete((gptr)d, MYF(0)); + DBUG_PRINT("info", ("%s", buf.str)); + my_free((gptr)d, MYF(0)); list_pop(extra_defaults); /* pop off the head */ } if (my_write(defaults_file, buf.str, buf.length, MYF(MY_FNABP | MY_WME))) @@ -373,7 +386,7 @@ error: my_delete(path, MYF(0)); out: - return ret; + DBUG_RETURN(ret); } @@ -449,13 +462,9 @@ int main(int argc, char **argv) char *forced_defaults_file; char *forced_extra_defaults; - char *defaults_group_suffix; - const char *script_line; - char *upgrade_defaults_path; - char *defaults_to_use= NULL; - int upgrade_defaults_created= 0; - - char path[FN_REFLEN]; + char *local_defaults_group_suffix; + + char path[FN_REFLEN], upgrade_defaults_path[FN_REFLEN]; DYNAMIC_STRING cmdline; MY_INIT(argv[0]); @@ -466,9 +475,10 @@ int main(int argc, char **argv) /* Check if we are forced to use specific defaults */ get_defaults_options(argc, argv, &forced_defaults_file, &forced_extra_defaults, - &defaults_group_suffix); + &local_defaults_group_suffix); load_defaults("my", load_default_groups, &argc, &argv); + defaults_argv= argv; /* Must init_dynamic_string before handle_options because string is freed @@ -516,25 +526,19 @@ int main(int argc, char **argv) goto error; } - /* - Create the modified defaults file to be used by mysqlcheck - and mysql tools + /* + Create the modified defaults file to be used by mysqlcheck + and mysql command line client */ - fn_format(path, UPGRADE_DEFAULTS_NAME, datadir, "", MYF(0)); - upgrade_defaults_path= my_strdup(path, MYF(0)); - - if (extra_defaults) - { - ret= create_defaults_file(upgrade_defaults_path, forced_extra_defaults); - if (ret) - goto error; - - defaults_to_use= upgrade_defaults_path; - upgrade_defaults_created= 1; - } - else - defaults_to_use= forced_extra_defaults; + fn_format(upgrade_defaults_path, UPGRADE_DEFAULTS_NAME, datadir, "", MYF(0)); + create_defaults_file(upgrade_defaults_path, forced_extra_defaults); + + /* + Read the mysql_upgrade_info file to check if mysql_upgrade + already has been done + Maybe this could be done a little earlier? + */ if (!find_file(MYSQL_UPGRADE_INFO_NAME, datadir, MY_SEARCH_SELF, path, sizeof(path), NULL, NullS) && !opt_force) @@ -553,7 +557,9 @@ int main(int argc, char **argv) goto fix_priv_tables; } } - + + + /* Find mysqlcheck */ if (find_file(mysqlcheck_name, basedir, MYF(0), path, sizeof(path), "bin", EXTRA_CLIENT_PATHS, NullS)) { @@ -575,13 +581,13 @@ int main(int argc, char **argv) dynstr_append_os_quoted(&cmdline, path, NullS); } - if (defaults_to_use) - { - dynstr_append(&cmdline, " "); - dynstr_append_os_quoted(&cmdline, "--defaults-extra-file=", - defaults_to_use, NullS); - } - + /* + All settings have been written to the "upgrade_defaults_path" + instruct mysqlcheck to only read options from that file + */ + dynstr_append(&cmdline, " "); + dynstr_append_os_quoted(&cmdline, "--defaults-file=", + upgrade_defaults_path, NullS); dynstr_append(&cmdline, " "); dynstr_append_os_quoted(&cmdline, "--check-upgrade", NullS); dynstr_append(&cmdline, " "); @@ -594,9 +600,10 @@ int main(int argc, char **argv) dynstr_append(&cmdline, "\""); #endif /* __WIN__ */ + /* Execute mysqlcheck */ if (opt_verbose) printf("Running %s\n", cmdline.str); - + DBUG_PRINT("info", ("Running: %s", cmdline.str)); ret= system(cmdline.str); if (ret) { @@ -610,6 +617,7 @@ int main(int argc, char **argv) goto error; fix_priv_tables: + /* Find mysql */ if (find_file(mysql_name, basedir, MYF(0), path, sizeof(path), "bin", EXTRA_CLIENT_PATHS, NullS)) { @@ -631,6 +639,7 @@ fix_priv_tables: dynstr_append_os_quoted(&cmdline, path, NullS); } + /* Find mysql_fix_privililege_tables.sql */ if (find_file(MYSQL_FIX_PRIV_TABLES_NAME, basedir, MYF(0), path, sizeof(path), "support_files", "share", "share/mysql", "scripts", @@ -646,15 +655,14 @@ fix_priv_tables: " where MySQL is installed"); goto error; } - else - script_line= my_strdup(path, MYF(0)); - if (defaults_to_use) - { - dynstr_append(&cmdline, " "); - dynstr_append_os_quoted(&cmdline, "--defaults-extra-file=", - defaults_to_use, NullS); - } + /* + All settings have been written to the "upgrade_defaults_path", + instruct mysql to only read options from that file + */ + dynstr_append(&cmdline, " "); + dynstr_append_os_quoted(&cmdline, "--defaults-file=", + upgrade_defaults_path, NullS); dynstr_append(&cmdline, " "); dynstr_append_os_quoted(&cmdline, "--force", NullS); dynstr_append(&cmdline, " "); @@ -666,14 +674,15 @@ fix_priv_tables: dynstr_append(&cmdline, " "); dynstr_append_os_quoted(&cmdline, "--database=mysql", NullS); dynstr_append(&cmdline, " < "); - dynstr_append_os_quoted(&cmdline, script_line, NullS); + dynstr_append_os_quoted(&cmdline, path, NullS); #ifdef __WIN__ dynstr_append(&cmdline, "\""); #endif /* __WIN__ */ + /* Execute "mysql --force < mysql_fix_privilege_tables.sql" */ if (opt_verbose) printf("Running %s\n", cmdline.str); - + DBUG_PRINT("info", ("Running: %s", cmdline.str)); ret= system(cmdline.str); if (ret) fprintf(stderr, "Error executing '%s'\n", cmdline.str); @@ -681,10 +690,11 @@ fix_priv_tables: error: dynstr_free(&cmdline); - if (upgrade_defaults_created) - my_delete(upgrade_defaults_path, MYF(0)); - - my_end(info_flag ? MY_CHECK_ERROR | MY_GIVE_INFO : 0); + /* Delete the generated defaults file */ + my_delete(upgrade_defaults_path, MYF(0)); + + free_defaults(defaults_argv); + my_end(info_flag ? MY_CHECK_ERROR : 0); return ret; } |