List:Commits« Previous MessageNext Message »
From:Chad MILLER Date:January 23 2008 5:37pm
Subject:bk commit into 5.0 tree (cmiller:1.2563) BUG#25347
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of cmiller.  When cmiller does a push these changes
will be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2008-01-23 11:37:46-05:00, cmiller@stripped +3 -0
  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.

  client/mysqlcheck.c@stripped, 2008-01-23 11:37:44-05:00, cmiller@stripped +12 -7
    Use SHOW FULL TABLES to test better whether a name in the table
    list is one of a view.  Checking that the engine is NULL is 
    insufficient.
    
    Implemented suggestion from jimw that involved removing most of 
    original patch and getting data a better way

  mysql-test/r/mysqlcheck.result@stripped, 2008-01-23 11:37:44-05:00,
cmiller@stripped +10 -0
    Verify that tables that have NULL/unreadable engine types are 
    processed and not interpreted as views.

  mysql-test/t/mysqlcheck.test@stripped, 2008-01-23 11:37:44-05:00, cmiller@stripped
+16 -0
    Verify that tables that have NULL/unreadable engine types are 
    processed and not interpreted as views.

diff -Nrup a/client/mysqlcheck.c b/client/mysqlcheck.c
--- a/client/mysqlcheck.c	2007-10-30 04:51:55 -04:00
+++ b/client/mysqlcheck.c	2008-01-23 11:37:44 -05:00
@@ -483,14 +483,17 @@ static int process_all_tables_in_db(char
 {
   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
     }
     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
       /* 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]));
       }
   }
diff -Nrup a/mysql-test/r/mysqlcheck.result b/mysql-test/r/mysqlcheck.result
--- a/mysql-test/r/mysqlcheck.result	2007-10-30 04:51:55 -04:00
+++ b/mysql-test/r/mysqlcheck.result	2008-01-23 11:37:44 -05:00
@@ -46,4 +46,14 @@ create table `t 1`(a int);
 test.t 1                                           OK
 test.t`1                                           OK
 drop table `t``1`, `t 1`;
+create database d_bug25347;
+use d_bug25347;
+create table t_bug25347 (a int);
+create view v_bug25347 as select * from t_bug25347;
+removing and creating
+d_bug25347.t_bug25347                              OK
+drop view v_bug25347;
+drop table t_bug25347;
+drop database d_bug25347;
+use test;
 End of 5.0 tests
diff -Nrup a/mysql-test/t/mysqlcheck.test b/mysql-test/t/mysqlcheck.test
--- a/mysql-test/t/mysqlcheck.test	2007-10-30 04:51:56 -04:00
+++ b/mysql-test/t/mysqlcheck.test	2008-01-23 11:37:44 -05:00
@@ -40,4 +40,20 @@ create table `t 1`(a int);
 --exec $MYSQL_CHECK --databases test
 drop table `t``1`, `t 1`;
 
+#
+# Bug#25347: mysqlcheck -A -r doesn't repair table marked as crashed
+#
+create database d_bug25347;
+use d_bug25347;
+create table t_bug25347 (a int);
+create view v_bug25347 as select * from t_bug25347;
+--echo removing and creating
+--exec rm    $MYSQLTEST_VARDIR/master-data/d_bug25347/t_bug25347.MYI;
+--exec touch $MYSQLTEST_VARDIR/master-data/d_bug25347/t_bug25347.MYI;
+--exec $MYSQL_CHECK --repair --databases d_bug25347
+drop view v_bug25347;
+drop table t_bug25347;
+drop database d_bug25347;
+use test;
+
 --echo End of 5.0 tests
Thread
bk commit into 5.0 tree (cmiller:1.2563) BUG#25347Chad MILLER23 Jan 2008