summaryrefslogtreecommitdiff
path: root/sql/table.cc
diff options
context:
space:
mode:
authormonty@tik.mysql.com <>2000-10-11 00:06:37 +0300
committermonty@tik.mysql.com <>2000-10-11 00:06:37 +0300
commit09dce662e273113029cc404af07d82b9c9c56fb6 (patch)
treecf18eb0d045153270d68aec8884a4732e953e883 /sql/table.cc
parent16f11f94b2fa7c7fca19fb5160b27c902c446a3c (diff)
downloadmariadb-git-09dce662e273113029cc404af07d82b9c9c56fb6.tar.gz
Automatic repair of MyISAM tables + portability fixes
Diffstat (limited to 'sql/table.cc')
-rw-r--r--sql/table.cc28
1 files changed, 18 insertions, 10 deletions
diff --git a/sql/table.cc b/sql/table.cc
index c7fe81c182c..c0c4fd1eba2 100644
--- a/sql/table.cc
+++ b/sql/table.cc
@@ -212,17 +212,24 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag,
error=2;
if (db_stat)
{
- if ((outparam->file->
- ha_open(index_file,
- (db_stat & HA_READ_ONLY ? O_RDONLY : O_RDWR),
- (db_stat & HA_OPEN_TEMPORARY ? HA_OPEN_TMP_TABLE :
- (db_stat & HA_WAIT_IF_LOCKED ||
- specialflag & SPECIAL_WAIT_IF_LOCKED) ?
- HA_OPEN_WAIT_IF_LOCKED :
- (db_stat & (HA_ABORT_IF_LOCKED | HA_GET_INFO)) ?
- HA_OPEN_ABORT_IF_LOCKED :
- HA_OPEN_IGNORE_IF_LOCKED) | ha_open_flags)))
+ int err;
+ if ((err=(outparam->file->
+ ha_open(index_file,
+ (db_stat & HA_READ_ONLY ? O_RDONLY : O_RDWR),
+ (db_stat & HA_OPEN_TEMPORARY ? HA_OPEN_TMP_TABLE :
+ ((db_stat & HA_WAIT_IF_LOCKED) ||
+ (specialflag & SPECIAL_WAIT_IF_LOCKED)) ?
+ HA_OPEN_WAIT_IF_LOCKED :
+ (db_stat & (HA_ABORT_IF_LOCKED | HA_GET_INFO)) ?
+ HA_OPEN_ABORT_IF_LOCKED :
+ HA_OPEN_IGNORE_IF_LOCKED) | ha_open_flags))))
+ {
+ /* Set a flag if the table is crashed and it can be auto. repaired */
+ outparam->crashed=(err == HA_ERR_CRASHED &&
+ outparam->file->auto_repair() &&
+ !(ha_open_flags & HA_OPEN_FOR_REPAIR));
goto err_not_open; /* purecov: inspected */
+ }
}
outparam->db_low_byte_first=outparam->file->low_byte_first();
@@ -549,6 +556,7 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag,
delete crypted;
my_pthread_setspecific_ptr(THR_MALLOC,old_root);
frm_error(error,outparam,name,ME_ERROR+ME_WAITTANG);
+ delete outparam->file;
outparam->file=0; // For easyer errorchecking
free_root(&outparam->mem_root,MYF(0));
my_free(outparam->table_name,MYF(MY_ALLOW_ZERO_PTR));