summaryrefslogtreecommitdiff
path: root/sql/ha_myisammrg.cc
diff options
context:
space:
mode:
authorunknown <svoj@mysql.com/april.(none)>2007-06-06 04:42:41 +0500
committerunknown <svoj@mysql.com/april.(none)>2007-06-06 04:42:41 +0500
commit55c765925d4723c1702d84aef8f305cd97691fea (patch)
tree544ef94aeb2e409c7f34a65dc70de75fee7ba4d4 /sql/ha_myisammrg.cc
parent12d55a8cc616670cf1c11338639c3e367c4fe3d4 (diff)
downloadmariadb-git-55c765925d4723c1702d84aef8f305cd97691fea.tar.gz
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: Added myrg_print_wrong_table declaration. myisammrg/myrg_open.c: 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: Updated test result. mysql-test/r/key_cache.result: Updated test result - removed duplicate error. mysql-test/r/lock.result: Updated test result - added summary row. mysql-test/r/merge.result: A test case for BUG#26976. mysql-test/r/preload.result: Updated test result - removed duplicate error, added summary row. mysql-test/r/ps.result: Updated test result - removed duplicate error, added summary row. mysql-test/r/repair.result: Updated test result - removed duplicate error, added summary row. mysql-test/r/rpl_failed_optimize.result: Updated test result - removed duplicate error, added summary row. mysql-test/r/sp.result: Updated test result - removed duplicate error, added summary row. mysql-test/r/view.result: Updated test result - removed duplicate error, added summary row. mysql-test/t/merge.test: A test case for BUG#26976. sql/ha_myisam.cc: Do not report same error twice. sql/ha_myisammrg.cc: 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: Added ha_myisammrg::check declaration. sql/share/errmsg.txt: 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: warning_level_* are now public. It is required by mysql_admin_table to report message level. sql/sql_error.h: warning_level_* are now public. It is required by mysql_admin_table to report message level. sql/sql_table.cc: Reorder mysql_admin_table arguments to meet it's definition. Report errors that are pending in thd->warn_list as results of admin function.
Diffstat (limited to 'sql/ha_myisammrg.cc')
-rw-r--r--sql/ha_myisammrg.cc26
1 files changed, 24 insertions, 2 deletions
diff --git a/sql/ha_myisammrg.cc b/sql/ha_myisammrg.cc
index 1202a733a16..e7baa6705ee 100644
--- a/sql/ha_myisammrg.cc
+++ b/sql/ha_myisammrg.cc
@@ -72,6 +72,13 @@ extern int check_definition(MI_KEYDEF *t1_keyinfo, MI_COLUMNDEF *t1_recinfo,
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, int mode, uint test_if_locked)
{
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, int mode, uint test_if_locked)
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)
@@ -597,3 +613,9 @@ void ha_myisammrg::append_create_info(String *packet)
}
packet->append(')');
}
+
+
+int ha_myisammrg::check(THD* thd, HA_CHECK_OPT* check_opt)
+{
+ return HA_ADMIN_OK;
+}