mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
mysqlcheck.c:
WL#3046 Migration tool for 5.1 table-name encoding client/mysqlcheck.c: WL#3046 Migration tool for 5.1 table-name encoding
This commit is contained in:
@ -34,7 +34,8 @@ static my_bool opt_alldbs = 0, opt_check_only_changed = 0, opt_extended = 0,
|
|||||||
opt_compress = 0, opt_databases = 0, opt_fast = 0,
|
opt_compress = 0, opt_databases = 0, opt_fast = 0,
|
||||||
opt_medium_check = 0, opt_quick = 0, opt_all_in_1 = 0,
|
opt_medium_check = 0, opt_quick = 0, opt_all_in_1 = 0,
|
||||||
opt_silent = 0, opt_auto_repair = 0, ignore_errors = 0,
|
opt_silent = 0, opt_auto_repair = 0, ignore_errors = 0,
|
||||||
tty_password = 0, opt_frm = 0;
|
tty_password = 0, opt_frm = 0,
|
||||||
|
opt_fix_table_names= 0, opt_fix_db_names= 0;
|
||||||
static uint verbose = 0, opt_mysql_port=0;
|
static uint verbose = 0, opt_mysql_port=0;
|
||||||
static my_string opt_mysql_unix_port = 0;
|
static my_string opt_mysql_unix_port = 0;
|
||||||
static char *opt_password = 0, *current_user = 0,
|
static char *opt_password = 0, *current_user = 0,
|
||||||
@ -48,7 +49,7 @@ static char *shared_memory_base_name=0;
|
|||||||
static uint opt_protocol=0;
|
static uint opt_protocol=0;
|
||||||
static CHARSET_INFO *charset_info= &my_charset_latin1;
|
static CHARSET_INFO *charset_info= &my_charset_latin1;
|
||||||
|
|
||||||
enum operations {DO_CHECK, DO_REPAIR, DO_ANALYZE, DO_OPTIMIZE};
|
enum operations { DO_CHECK, DO_REPAIR, DO_ANALYZE, DO_OPTIMIZE, DO_UPGRADE };
|
||||||
|
|
||||||
static struct my_option my_long_options[] =
|
static struct my_option my_long_options[] =
|
||||||
{
|
{
|
||||||
@ -98,6 +99,12 @@ static struct my_option my_long_options[] =
|
|||||||
{"fast",'F', "Check only tables that haven't been closed properly.",
|
{"fast",'F', "Check only tables that haven't been closed properly.",
|
||||||
(gptr*) &opt_fast, (gptr*) &opt_fast, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0,
|
(gptr*) &opt_fast, (gptr*) &opt_fast, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0,
|
||||||
0},
|
0},
|
||||||
|
{"fix-db-names", OPT_FIX_DB_NAMES, "Fix database names.",
|
||||||
|
(gptr*) &opt_fix_db_names, (gptr*) &opt_fix_db_names,
|
||||||
|
0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
|
{"fix-table-names", OPT_FIX_TABLE_NAMES, "Fix table names.",
|
||||||
|
(gptr*) &opt_fix_table_names, (gptr*) &opt_fix_table_names,
|
||||||
|
0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"force", 'f', "Continue even if we get an sql-error.",
|
{"force", 'f', "Continue even if we get an sql-error.",
|
||||||
(gptr*) &ignore_errors, (gptr*) &ignore_errors, 0, GET_BOOL, NO_ARG, 0, 0,
|
(gptr*) &ignore_errors, (gptr*) &ignore_errors, 0, GET_BOOL, NO_ARG, 0, 0,
|
||||||
0, 0, 0, 0},
|
0, 0, 0, 0},
|
||||||
@ -171,6 +178,7 @@ static int process_all_databases();
|
|||||||
static int process_databases(char **db_names);
|
static int process_databases(char **db_names);
|
||||||
static int process_selected_tables(char *db, char **table_names, int tables);
|
static int process_selected_tables(char *db, char **table_names, int tables);
|
||||||
static int process_all_tables_in_db(char *database);
|
static int process_all_tables_in_db(char *database);
|
||||||
|
static int process_one_db(char *database);
|
||||||
static int use_db(char *database);
|
static int use_db(char *database);
|
||||||
static int handle_request_for_tables(char *tables, uint length);
|
static int handle_request_for_tables(char *tables, uint length);
|
||||||
static int dbConnect(char *host, char *user,char *passwd);
|
static int dbConnect(char *host, char *user,char *passwd);
|
||||||
@ -251,6 +259,15 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
|||||||
case 'o':
|
case 'o':
|
||||||
what_to_do = DO_OPTIMIZE;
|
what_to_do = DO_OPTIMIZE;
|
||||||
break;
|
break;
|
||||||
|
case OPT_FIX_DB_NAMES:
|
||||||
|
what_to_do= DO_UPGRADE;
|
||||||
|
default_charset= (char*) "utf8";
|
||||||
|
opt_databases= 1;
|
||||||
|
break;
|
||||||
|
case OPT_FIX_TABLE_NAMES:
|
||||||
|
what_to_do= DO_UPGRADE;
|
||||||
|
default_charset= (char*) "utf8";
|
||||||
|
break;
|
||||||
case 'p':
|
case 'p':
|
||||||
if (argument)
|
if (argument)
|
||||||
{
|
{
|
||||||
@ -369,7 +386,7 @@ static int process_all_databases()
|
|||||||
}
|
}
|
||||||
while ((row = mysql_fetch_row(tableres)))
|
while ((row = mysql_fetch_row(tableres)))
|
||||||
{
|
{
|
||||||
if (process_all_tables_in_db(row[0]))
|
if (process_one_db(row[0]))
|
||||||
result = 1;
|
result = 1;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
@ -382,7 +399,7 @@ static int process_databases(char **db_names)
|
|||||||
int result = 0;
|
int result = 0;
|
||||||
for ( ; *db_names ; db_names++)
|
for ( ; *db_names ; db_names++)
|
||||||
{
|
{
|
||||||
if (process_all_tables_in_db(*db_names))
|
if (process_one_db(*db_names))
|
||||||
result = 1;
|
result = 1;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
@ -495,6 +512,43 @@ static int process_all_tables_in_db(char *database)
|
|||||||
} /* process_all_tables_in_db */
|
} /* process_all_tables_in_db */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static int fix_object_name(const char *obj, const char *name)
|
||||||
|
{
|
||||||
|
char qbuf[100 + NAME_LEN*4];
|
||||||
|
int rc= 0;
|
||||||
|
if (strncmp(name, "#mysql50#", 9))
|
||||||
|
return 1;
|
||||||
|
sprintf(qbuf, "RENAME %s `%s` TO `%s`", obj, name, name + 9);
|
||||||
|
if (mysql_query(sock, qbuf))
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Failed to %s\n", qbuf);
|
||||||
|
fprintf(stderr, "Error: %s\n", mysql_error(sock));
|
||||||
|
rc= 1;
|
||||||
|
}
|
||||||
|
if (verbose)
|
||||||
|
printf("%-50s %s\n", name, rc ? "FAILED" : "OK");
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int process_one_db(char *database)
|
||||||
|
{
|
||||||
|
if (what_to_do == DO_UPGRADE)
|
||||||
|
{
|
||||||
|
int rc= 0;
|
||||||
|
if (opt_fix_db_names && !strncmp(database,"#mysql50#", 9))
|
||||||
|
{
|
||||||
|
rc= fix_object_name("DATABASE", database);
|
||||||
|
database+= 9;
|
||||||
|
}
|
||||||
|
if (rc || !opt_fix_table_names)
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
return process_all_tables_in_db(database);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int use_db(char *database)
|
static int use_db(char *database)
|
||||||
{
|
{
|
||||||
if (mysql_get_server_version(sock) >= 50003 &&
|
if (mysql_get_server_version(sock) >= 50003 &&
|
||||||
@ -538,6 +592,8 @@ static int handle_request_for_tables(char *tables, uint length)
|
|||||||
case DO_OPTIMIZE:
|
case DO_OPTIMIZE:
|
||||||
op = "OPTIMIZE";
|
op = "OPTIMIZE";
|
||||||
break;
|
break;
|
||||||
|
case DO_UPGRADE:
|
||||||
|
return fix_object_name("TABLE", tables);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(query =(char *) my_malloc((sizeof(char)*(length+110)), MYF(MY_WME))))
|
if (!(query =(char *) my_malloc((sizeof(char)*(length+110)), MYF(MY_WME))))
|
||||||
|
Reference in New Issue
Block a user