List:Commits« Previous MessageNext Message »
From:Sergey Vojtovich Date:June 6 2007 1:42am
Subject:bk commit into 5.0 tree (svoj:1.2504) BUG#26976
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of svoj. When svoj 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, 2007-06-06 04:42:41+05:00, svoj@stripped +20 -0
  BUG#26976 - Missing table in merge not noted in related error msg +
              SHOW CREATE TABLE fails
  
  Underlying table names, that merge engine fails to open were not
  reported.
  
  With this fix CHECK TABLE issued against merge table reports all
  underlying table names that it fails to open. Other statements
  are unaffected, that is underlying table names are not included
  into error message.
  
  This fix doesn't solve SHOW CREATE TABLE issue.

  myisammrg/myrg_def.h@stripped, 2007-06-06 04:42:39+05:00, svoj@stripped +4 -1
    Added myrg_print_wrong_table declaration.

  myisammrg/myrg_open.c@stripped, 2007-06-06 04:42:39+05:00, svoj@stripped +12 -0
    If HA_OPEN_FOR_REPAIR is passed to merge engine open function,
    report names of tables that we fail to open.

  mysql-test/r/backup.result@stripped, 2007-06-06 04:42:39+05:00, svoj@stripped +2 -4
    Updated test result.

  mysql-test/r/key_cache.result@stripped, 2007-06-06 04:42:39+05:00, svoj@stripped +1 -3
    Updated test result - removed duplicate error.

  mysql-test/r/lock.result@stripped, 2007-06-06 04:42:39+05:00, svoj@stripped +2 -1
    Updated test result - added summary row.

  mysql-test/r/merge.result@stripped, 2007-06-06 04:42:39+05:00, svoj@stripped +32 -0
    A test case for BUG#26976.

  mysql-test/r/preload.result@stripped, 2007-06-06 04:42:39+05:00, svoj@stripped +5 -8
    Updated test result - removed duplicate error, added summary row.

  mysql-test/r/ps.result@stripped, 2007-06-06 04:42:39+05:00, svoj@stripped +12 -18
    Updated test result - removed duplicate error, added summary row.

  mysql-test/r/repair.result@stripped, 2007-06-06 04:42:39+05:00, svoj@stripped +4 -6
    Updated test result - removed duplicate error, added summary row.

  mysql-test/r/rpl_failed_optimize.result@stripped, 2007-06-06 04:42:39+05:00, svoj@stripped
+2 -3
    Updated test result - removed duplicate error, added summary row.

  mysql-test/r/sp.result@stripped, 2007-06-06 04:42:39+05:00, svoj@stripped +18 -15
    Updated test result - removed duplicate error, added summary row.

  mysql-test/r/view.result@stripped, 2007-06-06 04:42:39+05:00, svoj@stripped +33 -25
    Updated test result - removed duplicate error, added summary row.

  mysql-test/t/merge.test@stripped, 2007-06-06 04:42:39+05:00, svoj@stripped +21 -0
    A test case for BUG#26976.

  sql/ha_myisam.cc@stripped, 2007-06-06 04:42:39+05:00, svoj@stripped +10 -11
    Do not report same error twice.

  sql/ha_myisammrg.cc@stripped, 2007-06-06 04:42:39+05:00, svoj@stripped +24 -2
    If HA_OPEN_FOR_REPAIR is passed to merge engine open function,
    report names of tables that we fail to open.
    
    Added dummy ha_myisammrg::check to not confuse users with
    "not implemented" error in case all underlying tables are
    fine.

  sql/ha_myisammrg.h@stripped, 2007-06-06 04:42:39+05:00, svoj@stripped +1 -0
     Added ha_myisammrg::check declaration.

  sql/share/errmsg.txt@stripped, 2007-06-06 04:42:39+05:00, svoj@stripped +2 -1
    Added ER_ADMIN_WRONG_MRG_TABLE errno. It is used instead
    of ER_WRONG_MRG_TABLE in case HA_OPEN_FOR_REPAIR is
    passed to merge engine handler open function.

  sql/sql_error.cc@stripped, 2007-06-06 04:42:39+05:00, svoj@stripped +2 -2
    warning_level_* are now public. It is required by mysql_admin_table to
    report message level.

  sql/sql_error.h@stripped, 2007-06-06 04:42:39+05:00, svoj@stripped +2 -0
    warning_level_* are now public. It is required by mysql_admin_table to
    report message level.

  sql/sql_table.cc@stripped, 2007-06-06 04:42:39+05:00, svoj@stripped +24 -25
    Reorder mysql_admin_table arguments to meet it's definition.
    
    Report errors that are pending in thd->warn_list as results of
    admin function.

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	svoj
# Host:	april.(none)
# Root:	/home/svoj/devel/mysql/BUG26976/mysql-5.0-engines

--- 1.13/myisammrg/myrg_def.h	2007-06-06 04:42:48 +05:00
+++ 1.14/myisammrg/myrg_def.h	2007-06-06 04:42:48 +05:00
@@ -29,4 +29,7 @@ extern pthread_mutex_t THR_LOCK_open;
 
 int _myrg_init_queue(MYRG_INFO *info,int inx,enum ha_rkey_function search_flag);
 int _myrg_mi_read_record(MI_INFO *info, byte *buf);
-
+#ifdef __cplusplus
+extern "C" 
+#endif
+void myrg_print_wrong_table(const char *table_name);

--- 1.35/myisammrg/myrg_open.c	2007-06-06 04:42:48 +05:00
+++ 1.36/myisammrg/myrg_open.c	2007-06-06 04:42:48 +05:00
@@ -90,6 +90,11 @@ MYRG_INFO *myrg_open(const char *name, i
     if (!(isam=mi_open(buff,mode,(handle_locking?HA_OPEN_WAIT_IF_LOCKED:0))))
     {
       my_errno= HA_ERR_WRONG_MRG_TABLE_DEF;
+      if (handle_locking & HA_OPEN_FOR_REPAIR)
+      {
+        myrg_print_wrong_table(buff);
+        continue;
+      }
       goto err;
     }
     if (!m_info)                                /* First file */
@@ -118,6 +123,11 @@ MYRG_INFO *myrg_open(const char *name, i
     if (m_info->reclength != isam->s->base.reclength)
     {
       my_errno=HA_ERR_WRONG_MRG_TABLE_DEF;
+      if (handle_locking & HA_OPEN_FOR_REPAIR)
+      {
+        myrg_print_wrong_table(buff);
+        continue;
+      }
       goto err;
     }
     m_info->options|= isam->s->options;
@@ -131,6 +141,8 @@ MYRG_INFO *myrg_open(const char *name, i
                                      m_info->tables);
   }
 
+  if (my_errno == HA_ERR_WRONG_MRG_TABLE_DEF)
+    goto err;
   if (!m_info && !(m_info= (MYRG_INFO*) my_malloc(sizeof(MYRG_INFO),
                                                   MYF(MY_WME | MY_ZEROFILL))))
     goto err;

--- 1.179/sql/ha_myisam.cc	2007-06-06 04:42:48 +05:00
+++ 1.180/sql/ha_myisam.cc	2007-06-06 04:42:48 +05:00
@@ -109,6 +109,14 @@ static void mi_check_print_msg(MI_CHECK 
   }
   length=(uint) (strxmov(name, param->db_name,".",param->table_name,NullS) -
 		 name);
+  /*
+    TODO: switch from protocol to push_warning here. The main reason we didn't
+    it yet is parallel repair. Due to following trace:
+    mi_check_print_msg/push_warning/sql_alloc/my_pthread_getspecific_ptr.
+
+    Also we likely need to lock mutex here (in both cases with protocol and
+    push_warning).
+  */
   protocol->prepare_for_resend();
   protocol->store(name, length, system_charset_info);
   protocol->store(param->op_name, system_charset_info);
@@ -1138,11 +1146,7 @@ int ha_myisam::assign_to_keycache(THD* t
     /* We only come here when the user did specify an index map */
     key_map kmap;
     if (get_key_map_from_key_list(&kmap, table, table_list->use_index))
-    {
-      errmsg= thd->net.last_error;
-      error= HA_ADMIN_FAILED;
-      goto err;
-    }
+      DBUG_RETURN(HA_ADMIN_FAILED);
     map= kmap.to_ulonglong();
   }
 
@@ -1155,7 +1159,6 @@ int ha_myisam::assign_to_keycache(THD* t
     error= HA_ADMIN_CORRUPT;
   }
 
- err:
   if (error != HA_ADMIN_OK)
   {
     /* Send error to user */
@@ -1192,11 +1195,7 @@ int ha_myisam::preload_keys(THD* thd, HA
     key_map kmap;
     get_key_map_from_key_list(&kmap, table, table_list->use_index);
     if (kmap.is_set_all())
-    {
-      errmsg= thd->net.last_error;
-      error= HA_ADMIN_FAILED;
-      goto err;
-    }
+      DBUG_RETURN(HA_ADMIN_FAILED);
     if (!kmap.is_clear_all())
       map= kmap.to_ulonglong();
   }

--- 1.89/sql/ha_myisammrg.cc	2007-06-06 04:42:48 +05:00
+++ 1.90/sql/ha_myisammrg.cc	2007-06-06 04:42:48 +05:00
@@ -72,6 +72,13 @@ extern int check_definition(MI_KEYDEF *t
                             uint t1_keys, uint t1_recs,
                             MI_KEYDEF *t2_keyinfo, MI_COLUMNDEF *t2_recinfo,
                             uint t2_keys, uint t2_recs, bool strict);
+extern "C" void myrg_print_wrong_table(const char *table_name)
+{
+  push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_ERROR,
+                      ER_ADMIN_WRONG_MRG_TABLE, ER(ER_ADMIN_WRONG_MRG_TABLE),
+                      table_name);
+}
+
 
 const char **ha_myisammrg::bas_ext() const
 {
@@ -121,6 +128,8 @@ int ha_myisammrg::open(const char *name,
   {
     DBUG_PRINT("error",("reclength: %lu  mean_rec_length: %lu",
 			table->s->reclength, mean_rec_length));
+    if (test_if_locked & HA_OPEN_FOR_REPAIR)
+      myrg_print_wrong_table(file->open_tables->table->filename);
     error= HA_ERR_WRONG_MRG_TABLE_DEF;
     goto err;
   }
@@ -139,12 +148,19 @@ int ha_myisammrg::open(const char *name,
                          u_table->table->s->base.keys,
                          u_table->table->s->base.fields, false))
     {
-      my_free((gptr) recinfo, MYF(0));
       error= HA_ERR_WRONG_MRG_TABLE_DEF;
-      goto err;
+      if (test_if_locked & HA_OPEN_FOR_REPAIR)
+        myrg_print_wrong_table(u_table->table->filename);
+      else
+      {
+        my_free((gptr) recinfo, MYF(0));
+        goto err;
+      }
     }
   }
   my_free((gptr) recinfo, MYF(0));
+  if (error == HA_ERR_WRONG_MRG_TABLE_DEF)
+    goto err;
 #if !defined(BIG_TABLES) || SIZEOF_OFF_T == 4
   /* Merge table has more than 2G rows */
   if (table->s->crashed)
@@ -596,4 +612,10 @@ void ha_myisammrg::append_create_info(St
     append_identifier(thd, packet, name.str, name.length);
   }
   packet->append(')');
+}
+
+
+int ha_myisammrg::check(THD* thd, HA_CHECK_OPT* check_opt)
+{
+  return HA_ADMIN_OK;
 }

--- 1.45/sql/ha_myisammrg.h	2007-06-06 04:42:48 +05:00
+++ 1.46/sql/ha_myisammrg.h	2007-06-06 04:42:48 +05:00
@@ -81,4 +81,5 @@ class ha_myisammrg: public handler
   void update_create_info(HA_CREATE_INFO *create_info);
   void append_create_info(String *packet);
   MYRG_INFO *myrg_info() { return file; }
+  int check(THD* thd, HA_CHECK_OPT* check_opt);
 };

--- 1.343/sql/sql_table.cc	2007-06-06 04:42:48 +05:00
+++ 1.344/sql/sql_table.cc	2007-06-06 04:42:48 +05:00
@@ -2283,33 +2283,16 @@ static bool mysql_admin_table(THD* thd, 
     */
     if (!table->table)
     {
-      char buf[ERRMSGSIZE+ERRMSGSIZE+2];
-      const char *err_msg;
-      protocol->prepare_for_resend();
-      protocol->store(table_name, system_charset_info);
-      protocol->store(operator_name, system_charset_info);
-      protocol->store(STRING_WITH_LEN("error"), system_charset_info);
-      if (!(err_msg=thd->net.last_error))
-	err_msg=ER(ER_CHECK_NO_SUCH_TABLE);
+      if (!thd->warn_list.elements)
+        push_warning(thd, MYSQL_ERROR::WARN_LEVEL_ERROR,
+                     ER_CHECK_NO_SUCH_TABLE, ER(ER_CHECK_NO_SUCH_TABLE));
       /* if it was a view will check md5 sum */
       if (table->view &&
           view_checksum(thd, table) == HA_ADMIN_WRONG_CHECKSUM)
-      {
-        strxmov(buf, err_msg, "; ", ER(ER_VIEW_CHECKSUM), NullS);
-        err_msg= (const char *)buf;
-      }
-      protocol->store(err_msg, system_charset_info);
-      lex->cleanup_after_one_table_open();
-      thd->clear_error();
-      /*
-        View opening can be interrupted in the middle of process so some
-        tables can be left opening
-      */
-      close_thread_tables(thd);
-      lex->reset_query_tables_list(FALSE);
-      if (protocol->write())
-	goto err;
-      continue;
+        push_warning(thd, MYSQL_ERROR::WARN_LEVEL_ERROR,
+                     ER_VIEW_CHECKSUM, ER(ER_VIEW_CHECKSUM));
+      result_code= HA_ADMIN_CORRUPT;
+      goto send_result;
     }
 
     if (table->view)
@@ -2391,6 +2374,22 @@ send_result:
 
     lex->cleanup_after_one_table_open();
     thd->clear_error();  // these errors shouldn't get client
+    {
+      List_iterator_fast<MYSQL_ERROR> it(thd->warn_list);
+      MYSQL_ERROR *err;
+      while ((err= it++))
+      {
+        protocol->prepare_for_resend();
+        protocol->store(table_name, system_charset_info);
+        protocol->store((char*) operator_name, system_charset_info);
+        protocol->store(warning_level_names[err->level],
+                        warning_level_length[err->level], system_charset_info);
+        protocol->store(err->msg, system_charset_info);
+        if (protocol->write())
+          goto err;
+      }
+      mysql_reset_errors(thd, true);
+    }
     protocol->prepare_for_resend();
     protocol->store(table_name, system_charset_info);
     protocol->store(operator_name, system_charset_info);
@@ -2924,7 +2923,7 @@ bool mysql_check_table(THD* thd, TABLE_L
   DBUG_ENTER("mysql_check_table");
   DBUG_RETURN(mysql_admin_table(thd, tables, check_opt,
 				"check", lock_type,
-				0, HA_OPEN_FOR_REPAIR, 0, 0,
+				0, 0, HA_OPEN_FOR_REPAIR, 0,
 				&handler::ha_check, &view_checksum));
 }
 

--- 1.78/sql/share/errmsg.txt	2007-06-06 04:42:48 +05:00
+++ 1.79/sql/share/errmsg.txt	2007-06-06 04:42:48 +05:00
@@ -5633,4 +5633,5 @@ ER_WRONG_STRING_LENGTH
 	eng "String '%-.70s' is too long for %s (should be no longer than %d)"
 ER_NON_INSERTABLE_TABLE  
 	eng "The target table %-.100s of the %s is not insertable-into"
-
+ER_ADMIN_WRONG_MRG_TABLE
+	eng "Table '%-.64s' is differently defined or of non-MyISAM type or doesn't exist"

--- 1.200/mysql-test/r/view.result	2007-06-06 04:42:48 +05:00
+++ 1.201/mysql-test/r/view.result	2007-06-06 04:42:48 +05:00
@@ -1377,7 +1377,9 @@ test.t1	check	status	OK
 drop table t1;
 check table v1;
 Table	Op	Msg_type	Msg_text
-test.v1	check	error	View 'test.v1' references invalid table(s) or column(s) or
function(s) or definer/invoker of view lack rights to use them
+test.v1	check	Error	Table 'test.t1' doesn't exist
+test.v1	check	Error	View 'test.v1' references invalid table(s) or column(s) or
function(s) or definer/invoker of view lack rights to use them
+test.v1	check	error	Corrupt
 drop view v1;
 create table t1 (a int);
 create table t2 (a int);
@@ -1901,11 +1903,17 @@ CREATE VIEW v6 AS SELECT CONVERT_TZ(col1
 DROP TABLE t1;
 CHECK TABLE v1, v2, v3, v4, v5, v6;
 Table	Op	Msg_type	Msg_text
-test.v1	check	error	View 'test.v1' references invalid table(s) or column(s) or
function(s) or definer/invoker of view lack rights to use them
+test.v1	check	Error	Table 'test.t1' doesn't exist
+test.v1	check	Error	View 'test.v1' references invalid table(s) or column(s) or
function(s) or definer/invoker of view lack rights to use them
+test.v1	check	error	Corrupt
 test.v2	check	status	OK
-test.v3	check	error	View 'test.v3' references invalid table(s) or column(s) or
function(s) or definer/invoker of view lack rights to use them
+test.v3	check	Error	Table 'test.t1' doesn't exist
+test.v3	check	Error	View 'test.v3' references invalid table(s) or column(s) or
function(s) or definer/invoker of view lack rights to use them
+test.v3	check	error	Corrupt
 test.v4	check	status	OK
-test.v5	check	error	View 'test.v5' references invalid table(s) or column(s) or
function(s) or definer/invoker of view lack rights to use them
+test.v5	check	Error	Table 'test.t1' doesn't exist
+test.v5	check	Error	View 'test.v5' references invalid table(s) or column(s) or
function(s) or definer/invoker of view lack rights to use them
+test.v5	check	error	Corrupt
 test.v6	check	status	OK
 drop view v1, v2, v3, v4, v5, v6;
 drop table t2;
@@ -1925,11 +1933,17 @@ CREATE VIEW v6 AS SELECT f2() FROM t3;
 drop function f1;
 CHECK TABLE v1, v2, v3, v4, v5, v6;
 Table	Op	Msg_type	Msg_text
-test.v1	check	error	View 'test.v1' references invalid table(s) or column(s) or
function(s) or definer/invoker of view lack rights to use them
+test.v1	check	Error	FUNCTION test.f1 does not exist
+test.v1	check	Error	View 'test.v1' references invalid table(s) or column(s) or
function(s) or definer/invoker of view lack rights to use them
+test.v1	check	error	Corrupt
 test.v2	check	status	OK
-test.v3	check	error	View 'test.v3' references invalid table(s) or column(s) or
function(s) or definer/invoker of view lack rights to use them
+test.v3	check	Error	FUNCTION test.f1 does not exist
+test.v3	check	Error	View 'test.v3' references invalid table(s) or column(s) or
function(s) or definer/invoker of view lack rights to use them
+test.v3	check	error	Corrupt
 test.v4	check	status	OK
-test.v5	check	error	View 'test.v5' references invalid table(s) or column(s) or
function(s) or definer/invoker of view lack rights to use them
+test.v5	check	Error	FUNCTION test.f1 does not exist
+test.v5	check	Error	View 'test.v5' references invalid table(s) or column(s) or
function(s) or definer/invoker of view lack rights to use them
+test.v5	check	error	Corrupt
 test.v6	check	status	OK
 create function f1 () returns int return (select max(col1) from t1);
 DROP TABLE t1;
@@ -2376,35 +2390,29 @@ CREATE TABLE t1(id INT);
 CREATE VIEW v1 AS SELECT id FROM t1;
 OPTIMIZE TABLE v1;
 Table	Op	Msg_type	Msg_text
-test.v1	optimize	error	'test.v1' is not BASE TABLE
-Warnings:
-Error	1347	'test.v1' is not BASE TABLE
+test.v1	optimize	Error	'test.v1' is not BASE TABLE
+test.v1	optimize	error	Corrupt
 ANALYZE TABLE v1;
 Table	Op	Msg_type	Msg_text
-test.v1	analyze	error	'test.v1' is not BASE TABLE
-Warnings:
-Error	1347	'test.v1' is not BASE TABLE
+test.v1	analyze	Error	'test.v1' is not BASE TABLE
+test.v1	analyze	error	Corrupt
 REPAIR TABLE v1;
 Table	Op	Msg_type	Msg_text
-test.v1	repair	error	'test.v1' is not BASE TABLE
-Warnings:
-Error	1347	'test.v1' is not BASE TABLE
+test.v1	repair	Error	'test.v1' is not BASE TABLE
+test.v1	repair	error	Corrupt
 DROP TABLE t1;
 OPTIMIZE TABLE v1;
 Table	Op	Msg_type	Msg_text
-test.v1	optimize	error	'test.v1' is not BASE TABLE
-Warnings:
-Error	1347	'test.v1' is not BASE TABLE
+test.v1	optimize	Error	'test.v1' is not BASE TABLE
+test.v1	optimize	error	Corrupt
 ANALYZE TABLE v1;
 Table	Op	Msg_type	Msg_text
-test.v1	analyze	error	'test.v1' is not BASE TABLE
-Warnings:
-Error	1347	'test.v1' is not BASE TABLE
+test.v1	analyze	Error	'test.v1' is not BASE TABLE
+test.v1	analyze	error	Corrupt
 REPAIR TABLE v1;
 Table	Op	Msg_type	Msg_text
-test.v1	repair	error	'test.v1' is not BASE TABLE
-Warnings:
-Error	1347	'test.v1' is not BASE TABLE
+test.v1	repair	Error	'test.v1' is not BASE TABLE
+test.v1	repair	error	Corrupt
 DROP VIEW v1;
 create definer = current_user() sql security invoker view v1 as select 1;
 show create view v1;

--- 1.11/mysql-test/r/preload.result	2007-06-06 04:42:48 +05:00
+++ 1.12/mysql-test/r/preload.result	2007-06-06 04:42:48 +05:00
@@ -143,10 +143,9 @@ Key_read_requests	0
 Key_reads	0
 load index into cache t3, t2 key (primary,b) ;
 Table	Op	Msg_type	Msg_text
-test.t3	preload_keys	error	Table 'test.t3' doesn't exist
+test.t3	preload_keys	Error	Table 'test.t3' doesn't exist
+test.t3	preload_keys	error	Corrupt
 test.t2	preload_keys	status	OK
-Warnings:
-Error	1146	Table 'test.t3' doesn't exist
 show status like "key_read%";
 Variable_name	Value
 Key_read_requests	478
@@ -159,12 +158,10 @@ Key_read_requests	0
 Key_reads	0
 load index into cache t3 key (b), t2 key (c) ;
 Table	Op	Msg_type	Msg_text
-test.t3	preload_keys	error	Table 'test.t3' doesn't exist
-test.t2	preload_keys	error	Key 'c' doesn't exist in table 't2'
+test.t3	preload_keys	Error	Table 'test.t3' doesn't exist
+test.t3	preload_keys	error	Corrupt
+test.t2	preload_keys	Error	Key 'c' doesn't exist in table 't2'
 test.t2	preload_keys	status	Operation failed
-Warnings:
-Error	1146	Table 'test.t3' doesn't exist
-Error	1176	Key 'c' doesn't exist in table 't2'
 show status like "key_read%";
 Variable_name	Value
 Key_read_requests	0

--- 1.4/mysql-test/r/rpl_failed_optimize.result	2007-06-06 04:42:49 +05:00
+++ 1.5/mysql-test/r/rpl_failed_optimize.result	2007-06-06 04:42:49 +05:00
@@ -15,7 +15,6 @@ Warnings:
 Error	1205	Lock wait timeout exceeded; try restarting transaction
 OPTIMIZE TABLE non_existing;
 Table	Op	Msg_type	Msg_text
-test.non_existing	optimize	error	Table 'test.non_existing' doesn't exist
-Warnings:
-Error	1146	Table 'test.non_existing' doesn't exist
+test.non_existing	optimize	Error	Table 'test.non_existing' doesn't exist
+test.non_existing	optimize	error	Corrupt
 drop table t1;

--- 1.60/mysql-test/r/merge.result	2007-06-06 04:42:49 +05:00
+++ 1.61/mysql-test/r/merge.result	2007-06-06 04:42:49 +05:00
@@ -844,4 +844,36 @@ insert into t1 values (1);
 ERROR HY000: Table 't1' is read only
 drop table t2;
 drop table t1;
+CREATE TABLE tm1(a INT) ENGINE=MERGE UNION=(t1, t2);
+SELECT * FROM tm1;
+ERROR HY000: Unable to open underlying table which is differently defined or of
non-MyISAM type or doesn't exist
+CHECK TABLE tm1;
+Table	Op	Msg_type	Msg_text
+test.tm1	check	Error	Table './test/t1' is differently defined or of non-MyISAM type or
doesn't exist
+test.tm1	check	Error	Table './test/t2' is differently defined or of non-MyISAM type or
doesn't exist
+test.tm1	check	Error	Unable to open underlying table which is differently defined or of
non-MyISAM type or doesn't exist
+test.tm1	check	error	Corrupt
+CREATE TABLE t1(a INT);
+SELECT * FROM tm1;
+ERROR HY000: Unable to open underlying table which is differently defined or of
non-MyISAM type or doesn't exist
+CHECK TABLE tm1;
+Table	Op	Msg_type	Msg_text
+test.tm1	check	Error	Table './test/t2' is differently defined or of non-MyISAM type or
doesn't exist
+test.tm1	check	Error	Unable to open underlying table which is differently defined or of
non-MyISAM type or doesn't exist
+test.tm1	check	error	Corrupt
+CREATE TABLE t2(a BLOB);
+SELECT * FROM tm1;
+ERROR HY000: Unable to open underlying table which is differently defined or of
non-MyISAM type or doesn't exist
+CHECK TABLE tm1;
+Table	Op	Msg_type	Msg_text
+test.tm1	check	Error	Table './test/t2' is differently defined or of non-MyISAM type or
doesn't exist
+test.tm1	check	Error	Unable to open underlying table which is differently defined or of
non-MyISAM type or doesn't exist
+test.tm1	check	error	Corrupt
+ALTER TABLE t2 MODIFY a INT;
+SELECT * FROM tm1;
+a
+CHECK TABLE tm1;
+Table	Op	Msg_type	Msg_text
+test.tm1	check	status	OK
+DROP TABLE tm1, t1, t2;
 End of 5.0 tests

--- 1.50/mysql-test/t/merge.test	2007-06-06 04:42:49 +05:00
+++ 1.51/mysql-test/t/merge.test	2007-06-06 04:42:49 +05:00
@@ -486,4 +486,25 @@ insert into t1 values (1);
 drop table t2;
 drop table t1;
 
+#
+# BUG#26976 - Missing table in merge not noted in related error msg + SHOW
+#             CREATE TABLE fails
+#
+CREATE TABLE tm1(a INT) ENGINE=MERGE UNION=(t1, t2);
+--error 1168
+SELECT * FROM tm1;
+CHECK TABLE tm1;
+CREATE TABLE t1(a INT);
+--error 1168
+SELECT * FROM tm1;
+CHECK TABLE tm1;
+CREATE TABLE t2(a BLOB);
+--error 1168
+SELECT * FROM tm1;
+CHECK TABLE tm1;
+ALTER TABLE t2 MODIFY a INT;
+SELECT * FROM tm1;
+CHECK TABLE tm1;
+DROP TABLE tm1, t1, t2;
+
 --echo End of 5.0 tests

--- 1.17/mysql-test/r/lock.result	2007-06-06 04:42:49 +05:00
+++ 1.18/mysql-test/r/lock.result	2007-06-06 04:42:49 +05:00
@@ -40,7 +40,8 @@ test.t1	check	status	OK
 lock tables t1 write;
 check table t2;
 Table	Op	Msg_type	Msg_text
-test.t2	check	error	Table 't2' was not locked with LOCK TABLES
+test.t2	check	Error	Table 't2' was not locked with LOCK TABLES
+test.t2	check	error	Corrupt
 insert into t1 select index1,nr from t1;
 ERROR HY000: Table 't1' was not locked with LOCK TABLES
 unlock tables;

--- 1.21/mysql-test/r/key_cache.result	2007-06-06 04:42:49 +05:00
+++ 1.22/mysql-test/r/key_cache.result	2007-06-06 04:42:49 +05:00
@@ -191,10 +191,8 @@ cache index t1 in unknown_key_cache;
 ERROR HY000: Unknown key cache 'unknown_key_cache'
 cache index t1 key (unknown_key) in keycache1;
 Table	Op	Msg_type	Msg_text
-test.t1	assign_to_keycache	error	Key 'unknown_key' doesn't exist in table 't1'
+test.t1	assign_to_keycache	Error	Key 'unknown_key' doesn't exist in table 't1'
 test.t1	assign_to_keycache	status	Operation failed
-Warnings:
-Error	1176	Key 'unknown_key' doesn't exist in table 't1'
 select @@keycache2.key_buffer_size;
 @@keycache2.key_buffer_size
 4194304

--- 1.2/sql/sql_error.h	2007-06-06 04:42:49 +05:00
+++ 1.3/sql/sql_error.h	2007-06-06 04:42:49 +05:00
@@ -39,3 +39,5 @@ void push_warning_printf(THD *thd, MYSQL
 			 uint code, const char *format, ...);
 void mysql_reset_errors(THD *thd, bool force);
 bool mysqld_show_warnings(THD *thd, ulong levels_to_show);
+extern const char *warning_level_names[];
+extern int warning_level_length[];

--- 1.227/mysql-test/r/sp.result	2007-06-06 04:42:49 +05:00
+++ 1.228/mysql-test/r/sp.result	2007-06-06 04:42:49 +05:00
@@ -4409,55 +4409,58 @@ Table	Op	Msg_type	Msg_text
 test.t1	repair	status	OK
 test.t2	repair	status	OK
 test.t3	repair	status	OK
-test.v1	repair	error	'test.v1' is not BASE TABLE
+test.v1	repair	Error	'test.v1' is not BASE TABLE
+test.v1	repair	error	Corrupt
 Table	Op	Msg_type	Msg_text
 test.t1	optimize	status	OK
 test.t2	optimize	status	OK
 test.t3	optimize	status	OK
-test.v1	optimize	error	'test.v1' is not BASE TABLE
+test.v1	optimize	Error	'test.v1' is not BASE TABLE
+test.v1	optimize	error	Corrupt
 Table	Op	Msg_type	Msg_text
 test.t1	analyze	status	Table is already up to date
 test.t2	analyze	status	Table is already up to date
 test.t3	analyze	status	Table is already up to date
-test.v1	analyze	error	'test.v1' is not BASE TABLE
-Warnings:
-Error	1347	'test.v1' is not BASE TABLE
+test.v1	analyze	Error	'test.v1' is not BASE TABLE
+test.v1	analyze	error	Corrupt
 call bug13012()|
 Table	Op	Msg_type	Msg_text
 test.t1	repair	status	OK
 test.t2	repair	status	OK
 test.t3	repair	status	OK
-test.v1	repair	error	'test.v1' is not BASE TABLE
+test.v1	repair	Error	'test.v1' is not BASE TABLE
+test.v1	repair	error	Corrupt
 Table	Op	Msg_type	Msg_text
 test.t1	optimize	status	OK
 test.t2	optimize	status	OK
 test.t3	optimize	status	OK
-test.v1	optimize	error	'test.v1' is not BASE TABLE
+test.v1	optimize	Error	'test.v1' is not BASE TABLE
+test.v1	optimize	error	Corrupt
 Table	Op	Msg_type	Msg_text
 test.t1	analyze	status	Table is already up to date
 test.t2	analyze	status	Table is already up to date
 test.t3	analyze	status	Table is already up to date
-test.v1	analyze	error	'test.v1' is not BASE TABLE
-Warnings:
-Error	1347	'test.v1' is not BASE TABLE
+test.v1	analyze	Error	'test.v1' is not BASE TABLE
+test.v1	analyze	error	Corrupt
 call bug13012()|
 Table	Op	Msg_type	Msg_text
 test.t1	repair	status	OK
 test.t2	repair	status	OK
 test.t3	repair	status	OK
-test.v1	repair	error	'test.v1' is not BASE TABLE
+test.v1	repair	Error	'test.v1' is not BASE TABLE
+test.v1	repair	error	Corrupt
 Table	Op	Msg_type	Msg_text
 test.t1	optimize	status	OK
 test.t2	optimize	status	OK
 test.t3	optimize	status	OK
-test.v1	optimize	error	'test.v1' is not BASE TABLE
+test.v1	optimize	Error	'test.v1' is not BASE TABLE
+test.v1	optimize	error	Corrupt
 Table	Op	Msg_type	Msg_text
 test.t1	analyze	status	Table is already up to date
 test.t2	analyze	status	Table is already up to date
 test.t3	analyze	status	Table is already up to date
-test.v1	analyze	error	'test.v1' is not BASE TABLE
-Warnings:
-Error	1347	'test.v1' is not BASE TABLE
+test.v1	analyze	Error	'test.v1' is not BASE TABLE
+test.v1	analyze	error	Corrupt
 drop procedure bug13012|
 drop view v1;
 select * from t1|

--- 1.12/mysql-test/r/backup.result	2007-06-06 04:42:49 +05:00
+++ 1.13/mysql-test/r/backup.result	2007-06-06 04:42:49 +05:00
@@ -4,18 +4,16 @@ create table t4(n int);
 backup table t4 to '../bogus';
 Table	Op	Msg_type	Msg_text
 test.t4	backup	error	Failed copying .frm file (errno: X)
+test.t4	backup	Error	Can't create/write to file 'MYSQLTEST_VARDIR/bogus/t4.frm' (Errcode:
X)
 test.t4	backup	status	Operation failed
-Warnings:
-Error	1	Can't create/write to file 'MYSQLTEST_VARDIR/bogus/t4.frm' (Errcode: X)
 backup table t4 to '../tmp';
 Table	Op	Msg_type	Msg_text
 test.t4	backup	status	OK
 backup table t4 to '../tmp';
 Table	Op	Msg_type	Msg_text
 test.t4	backup	error	Failed copying .frm file (errno: X)
+test.t4	backup	Error	Can't create/write to file 'MYSQLTEST_VARDIR/tmp/t4.frm' (Errcode:
X)
 test.t4	backup	status	Operation failed
-Warnings:
-Error	1	Can't create/write to file 'MYSQLTEST_VARDIR/tmp/t4.frm' (Errcode: X)
 drop table t4;
 restore table t4 from '../tmp';
 Table	Op	Msg_type	Msg_text

--- 1.24/mysql-test/r/repair.result	2007-06-06 04:42:49 +05:00
+++ 1.25/mysql-test/r/repair.result	2007-06-06 04:42:49 +05:00
@@ -26,16 +26,14 @@ t1	1	st_key	1	st	A	NULL	NULL	NULL	YES	BT
 drop table t1;
 repair table t1 use_frm;
 Table	Op	Msg_type	Msg_text
-test.t1	repair	error	Table 'test.t1' doesn't exist
-Warnings:
-Error	1146	Table 'test.t1' doesn't exist
+test.t1	repair	Error	Table 'test.t1' doesn't exist
+test.t1	repair	error	Corrupt
 create table t1 engine=myisam SELECT 1,"table 1";
 flush tables;
 repair table t1;
 Table	Op	Msg_type	Msg_text
-test.t1	repair	error	Incorrect file format 't1'
-Warnings:
-Error	130	Incorrect file format 't1'
+test.t1	repair	Error	Incorrect file format 't1'
+test.t1	repair	error	Corrupt
 repair table t1 use_frm;
 Table	Op	Msg_type	Msg_text
 test.t1	repair	warning	Number of rows changed from 0 to 1

--- 1.92/mysql-test/r/ps.result	2007-06-06 04:42:49 +05:00
+++ 1.93/mysql-test/r/ps.result	2007-06-06 04:42:49 +05:00
@@ -1378,45 +1378,39 @@ prepare stmt from "repair table t1, t4, 
 execute stmt;
 Table	Op	Msg_type	Msg_text
 test.t1	repair	status	OK
-test.t4	repair	error	Table 'test.t4' doesn't exist
+test.t4	repair	Error	Table 'test.t4' doesn't exist
+test.t4	repair	error	Corrupt
 test.t3	repair	status	OK
-Warnings:
-Error	1146	Table 'test.t4' doesn't exist
 execute stmt;
 Table	Op	Msg_type	Msg_text
 test.t1	repair	status	OK
-test.t4	repair	error	Table 'test.t4' doesn't exist
+test.t4	repair	Error	Table 'test.t4' doesn't exist
+test.t4	repair	error	Corrupt
 test.t3	repair	status	OK
-Warnings:
-Error	1146	Table 'test.t4' doesn't exist
 prepare stmt from "optimize table t1, t3, t4";
 execute stmt;
 Table	Op	Msg_type	Msg_text
 test.t1	optimize	status	OK
 test.t3	optimize	status	OK
-test.t4	optimize	error	Table 'test.t4' doesn't exist
-Warnings:
-Error	1146	Table 'test.t4' doesn't exist
+test.t4	optimize	Error	Table 'test.t4' doesn't exist
+test.t4	optimize	error	Corrupt
 execute stmt;
 Table	Op	Msg_type	Msg_text
 test.t1	optimize	status	Table is already up to date
 test.t3	optimize	status	Table is already up to date
-test.t4	optimize	error	Table 'test.t4' doesn't exist
-Warnings:
-Error	1146	Table 'test.t4' doesn't exist
+test.t4	optimize	Error	Table 'test.t4' doesn't exist
+test.t4	optimize	error	Corrupt
 prepare stmt from "analyze table t4, t1";
 execute stmt;
 Table	Op	Msg_type	Msg_text
-test.t4	analyze	error	Table 'test.t4' doesn't exist
+test.t4	analyze	Error	Table 'test.t4' doesn't exist
+test.t4	analyze	error	Corrupt
 test.t1	analyze	status	Table is already up to date
-Warnings:
-Error	1146	Table 'test.t4' doesn't exist
 execute stmt;
 Table	Op	Msg_type	Msg_text
-test.t4	analyze	error	Table 'test.t4' doesn't exist
+test.t4	analyze	Error	Table 'test.t4' doesn't exist
+test.t4	analyze	error	Corrupt
 test.t1	analyze	status	Table is already up to date
-Warnings:
-Error	1146	Table 'test.t4' doesn't exist
 deallocate prepare stmt;
 drop table t1, t2, t3;
 create database mysqltest_long_database_name_to_thrash_heap;

--- 1.39/sql/sql_error.cc	2007-06-06 04:42:49 +05:00
+++ 1.40/sql/sql_error.cc	2007-06-06 04:42:49 +05:00
@@ -205,8 +205,8 @@ void push_warning_printf(THD *thd, MYSQL
     TRUE  Error sending data to client
 */
 
-static const char *warning_level_names[]= {"Note", "Warning", "Error", "?"};
-static int warning_level_length[]= { 4, 7, 5, 1 };
+const char *warning_level_names[]= {"Note", "Warning", "Error", "?"};
+int warning_level_length[]= { 4, 7, 5, 1 };
 
 bool mysqld_show_warnings(THD *thd, ulong levels_to_show)
 {  
Thread
bk commit into 5.0 tree (svoj:1.2504) BUG#26976Sergey Vojtovich5 Jun