diff options
author | cmiller@zippy.cornsilk.net <> | 2007-04-03 18:12:31 -0400 |
---|---|---|
committer | cmiller@zippy.cornsilk.net <> | 2007-04-03 18:12:31 -0400 |
commit | 2e698f8c4e2cf51a82eb6a76d2e8d66f82862b5e (patch) | |
tree | 277a34e01d31a440fe065df2535c9f5ed815d67e /client/mysqlcheck.c | |
parent | 9816842b581d3f81030b97f83a46d19e1b08cdd5 (diff) | |
download | mariadb-git-2e698f8c4e2cf51a82eb6a76d2e8d66f82862b5e.tar.gz |
Backport:
Patch contributed by Jocelyn Fournier. CLA received 2007-02-27.
B-g#25347: mysqlcheck -A -r doesn't repair table marked as crashed
mysqlcheck tests nullness of the engine type to know whether the
"table" is a view or not. That also falsely catches tables that
are severly damaged.
Instead, use SHOW FULL TABLES to test whether a "table" is a view
or not.
(Don't add new function. Instead, get original data a smarter way.)
Make it safe for use against databases before when views appeared.
Diffstat (limited to 'client/mysqlcheck.c')
-rw-r--r-- | client/mysqlcheck.c | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/client/mysqlcheck.c b/client/mysqlcheck.c index b69e9201a28..2c23a0bdd14 100644 --- a/client/mysqlcheck.c +++ b/client/mysqlcheck.c @@ -453,14 +453,17 @@ static int process_all_tables_in_db(char *database) { MYSQL_RES *res; MYSQL_ROW row; + uint num_columns; LINT_INIT(res); if (use_db(database)) return 1; - if (mysql_query(sock, "SHOW TABLE STATUS") || + if (mysql_query(sock, "SHOW /*!50002 FULL*/ TABLES") || !((res= mysql_store_result(sock)))) return 1; + num_columns= mysql_num_fields(res); + if (opt_all_in_1) { /* @@ -483,12 +486,11 @@ static int process_all_tables_in_db(char *database) } for (end = tables + 1; (row = mysql_fetch_row(res)) ;) { - /* Skip tables with an engine of NULL (probably a view). */ - if (row[1]) - { - end= fix_table_name(end, row[0]); - *end++= ','; - } + if ((num_columns == 2) && (strcmp(row[1], "VIEW") == 0)) + continue; + + end= fix_table_name(end, row[0]); + *end++= ','; } *--end = 0; if (tot_length) @@ -498,11 +500,12 @@ static int process_all_tables_in_db(char *database) else { while ((row = mysql_fetch_row(res))) - /* Skip tables with an engine of NULL (probably a view). */ - if (row[1]) - { - handle_request_for_tables(row[0], strlen(row[0])); - } + { + if ((num_columns == 2) && (strcmp(row[1], "VIEW") == 0)) + continue; + + handle_request_for_tables(row[0], strlen(row[0])); + } } mysql_free_result(res); return 0; |