1
0
mirror of https://github.com/MariaDB/server.git synced 2026-01-06 05:22:24 +03:00

BUG#26138 - REPAIR TABLE with option USE_FRM erases all records in

ARCHIVE table
ARCHIVE table was truncated by REPAIR TABLE ... USE_FRM statement.
The table handler returned its file name extensions in a wrong order.
REPAIR TABLE believed it has to use the meta file to create a new table
from it.

With the fixed order, REPAIR TABLE does now use the data file to create
a new table. So REPAIR TABLE ... USE_FRM works well with ARCHIVE engine
now.

This issue affects 5.0 only, since in 5.1 ARCHIVE engine stores meta
information and data in the same file.


mysql-test/r/archive.result:
  A test case for bug#26138.
mysql-test/t/archive.test:
  A test case for bug#26138.
sql/examples/ha_example.cc:
  Added a comment.
sql/ha_archive.cc:
  First element of engine file name extentions array should be meta/index
  file extention. Second element - data file extention. This is true
  for engines that have separate meta/index file and data file.
  
  Reoder ha_archive_exts elements to meet described above requirement.
sql/handler.h:
  Added a comment.
sql/sql_table.cc:
  Added a comment.
This commit is contained in:
unknown
2007-03-30 13:00:21 +05:00
parent 817a474c3d
commit 0da1a0cdec
6 changed files with 40 additions and 2 deletions

View File

@@ -780,6 +780,17 @@ public:
virtual void free_foreign_key_create_info(char* str) {}
/* The following can be called without an open handler */
virtual const char *table_type() const =0;
/*
If frm_error() is called then we will use this to find out what file
extentions exist for the storage engine. This is also used by the default
rename_table and delete_table method in handler.cc.
For engines that have two file name extentions (separate meta/index file
and data file), the order of elements is relevant. First element of engine
file name extentions array should be meta/index file extention. Second
element - data file extention. This order is assumed by
prepare_for_repair() when REPAIR TABLE ... USE_FRM is issued.
*/
virtual const char **bas_ext() const =0;
virtual ulong table_flags(void) const =0;
virtual ulong index_flags(uint idx, uint part, bool all_parts) const =0;