1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-27 18:02:13 +03:00

Patch contributed by Jocelyn Fournier. CLA received 2007-02-27.

Bug#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.
This commit is contained in:
cmiller@zippy.cornsilk.net
2008-01-23 11:37:46 -05:00
parent c13d726f5d
commit 71316696a1
3 changed files with 38 additions and 7 deletions

View File

@ -483,14 +483,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)
{
/*
@ -513,12 +516,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)
@ -531,6 +533,9 @@ static int process_all_tables_in_db(char *database)
/* Skip tables with an engine of NULL (probably a view). */
if (row[1])
{
if ((num_columns == 2) && (strcmp(row[1], "VIEW") == 0))
continue;
handle_request_for_tables(row[0], fixed_name_length(row[0]));
}
}