diff options
Diffstat (limited to 'myisammrg')
-rw-r--r-- | myisammrg/myrg_delete.c | 9 | ||||
-rw-r--r-- | myisammrg/myrg_extra.c | 12 | ||||
-rw-r--r-- | myisammrg/myrg_locking.c | 4 | ||||
-rw-r--r-- | myisammrg/myrg_open.c | 8 | ||||
-rw-r--r-- | myisammrg/myrg_rnext.c | 3 | ||||
-rw-r--r-- | myisammrg/myrg_rprev.c | 3 | ||||
-rw-r--r-- | myisammrg/myrg_rrnd.c | 10 | ||||
-rw-r--r-- | myisammrg/myrg_rsame.c | 10 | ||||
-rw-r--r-- | myisammrg/myrg_update.c | 3 | ||||
-rw-r--r-- | myisammrg/myrg_write.c | 2 |
10 files changed, 37 insertions, 27 deletions
diff --git a/myisammrg/myrg_delete.c b/myisammrg/myrg_delete.c index 94fa9835d3d..8b89ed62ac1 100644 --- a/myisammrg/myrg_delete.c +++ b/myisammrg/myrg_delete.c @@ -18,13 +18,10 @@ #include "myrg_def.h" -int myrg_delete( -MYRG_INFO *info, -const byte *record) +int myrg_delete(MYRG_INFO *info, const byte *record) { if (!info->current_table) - { - return(my_errno=HA_ERR_NO_ACTIVE_RECORD); - } + return (my_errno= HA_ERR_NO_ACTIVE_RECORD); + return mi_delete(info->current_table->table,record); } diff --git a/myisammrg/myrg_extra.c b/myisammrg/myrg_extra.c index 5434d30a50e..ad17b0f82f2 100644 --- a/myisammrg/myrg_extra.c +++ b/myisammrg/myrg_extra.c @@ -22,7 +22,8 @@ #include "myrg_def.h" -int myrg_extra(MYRG_INFO *info,enum ha_extra_function function) +int myrg_extra(MYRG_INFO *info,enum ha_extra_function function, + void *extra_arg) { int error,save_error=0; MYRG_TABLE *file; @@ -30,7 +31,11 @@ int myrg_extra(MYRG_INFO *info,enum ha_extra_function function) DBUG_PRINT("info",("function: %d",(ulong) function)); if (function == HA_EXTRA_CACHE) + { info->cache_in_use=1; + info->cache_size= (extra_arg ? *(long*) extra_arg : + my_default_record_cache_size); + } else { if (function == HA_EXTRA_NO_CACHE || function == HA_EXTRA_RESET) @@ -41,12 +46,15 @@ int myrg_extra(MYRG_INFO *info,enum ha_extra_function function) info->last_used_table=info->open_tables; } for (file=info->open_tables ; file != info->end_table ; file++) - if ((error=mi_extra(file->table,function))) + { + if ((error=mi_extra(file->table, function, extra_arg))) save_error=error; + } } DBUG_RETURN(save_error); } + void myrg_extrafunc(MYRG_INFO *info, invalidator_by_filename inv) { MYRG_TABLE *file; diff --git a/myisammrg/myrg_locking.c b/myisammrg/myrg_locking.c index 41c972f72c0..e5a8d3f3d9d 100644 --- a/myisammrg/myrg_locking.c +++ b/myisammrg/myrg_locking.c @@ -20,9 +20,7 @@ #include "myrg_def.h" -int myrg_lock_database( -MYRG_INFO *info, -int lock_type) +int myrg_lock_database(MYRG_INFO *info, int lock_type) { int error,new_error; MYRG_TABLE *file; diff --git a/myisammrg/myrg_open.c b/myisammrg/myrg_open.c index 668744442a6..9360f582958 100644 --- a/myisammrg/myrg_open.c +++ b/myisammrg/myrg_open.c @@ -23,10 +23,10 @@ #include "mrg_static.c" #endif -/* +/* open a MyISAM MERGE table - if handle_locking is 0 then exit with error if some database is locked - if handle_locking is 1 then wait if database is locked + if handle_locking is 0 then exit with error if some table is locked + if handle_locking is 1 then wait if table is locked */ @@ -78,7 +78,7 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking) sizeof(name_buff)-1-dir_length)); VOID(cleanup_dirname(buff,name_buff)); } - if (!(isam=mi_open(buff,mode,test(handle_locking)))) + if (!(isam=mi_open(buff,mode,(handle_locking?HA_OPEN_WAIT_IF_LOCKED:0)))) goto err; files++; last_isam=isam; diff --git a/myisammrg/myrg_rnext.c b/myisammrg/myrg_rnext.c index abb9ef95e44..6d657b5926c 100644 --- a/myisammrg/myrg_rnext.c +++ b/myisammrg/myrg_rnext.c @@ -25,6 +25,9 @@ int myrg_rnext(MYRG_INFO *info, byte *buf, int inx) int err; MI_INFO *mi; + if (!info->current_table) + return (HA_ERR_KEY_NOT_FOUND); + /* at first, do rnext for the table found before */ if ((err=mi_rnext(info->current_table->table,NULL,inx))) { diff --git a/myisammrg/myrg_rprev.c b/myisammrg/myrg_rprev.c index bd7e6a1f6d2..c21ca06dacd 100644 --- a/myisammrg/myrg_rprev.c +++ b/myisammrg/myrg_rprev.c @@ -25,6 +25,9 @@ int myrg_rprev(MYRG_INFO *info, byte *buf, int inx) int err; MI_INFO *mi; + if (!info->current_table) + return (HA_ERR_KEY_NOT_FOUND); + /* at first, do rprev for the table found before */ if ((err=mi_rprev(info->current_table->table,NULL,inx))) { diff --git a/myisammrg/myrg_rrnd.c b/myisammrg/myrg_rrnd.c index d50d077e6ba..d623ea8ea9c 100644 --- a/myisammrg/myrg_rrnd.c +++ b/myisammrg/myrg_rrnd.c @@ -24,7 +24,7 @@ static MYRG_TABLE *find_table(MYRG_TABLE *start,MYRG_TABLE *end,ulonglong pos); /* - If filepos == HA_OFFSET_ERROR, read next + If filepos == HA_OFFSET_ERROR, read next Returns same as mi_rrnd: 0 = Ok. HA_ERR_RECORD_DELETED = Record is deleted. @@ -48,7 +48,7 @@ int myrg_rrnd(MYRG_INFO *info,byte *buf,ulonglong filepos) } isam_info=(info->current_table=info->open_tables)->table; if (info->cache_in_use) - mi_extra(isam_info,HA_EXTRA_CACHE); + mi_extra(isam_info,HA_EXTRA_CACHE,(byte*) &info->cache_size); filepos=isam_info->s->pack.header_length; isam_info->lastinx= (uint) -1; /* Can't forward or backward */ } @@ -66,13 +66,15 @@ int myrg_rrnd(MYRG_INFO *info,byte *buf,ulonglong filepos) HA_ERR_END_OF_FILE) DBUG_RETURN(error); if (info->cache_in_use) - mi_extra(info->current_table->table,HA_EXTRA_NO_CACHE); + mi_extra(info->current_table->table, HA_EXTRA_NO_CACHE, + (byte*) &info->cache_size); if (info->current_table+1 == info->end_table) DBUG_RETURN(HA_ERR_END_OF_FILE); info->current_table++; info->last_used_table=info->current_table; if (info->cache_in_use) - mi_extra(info->current_table->table,HA_EXTRA_CACHE); + mi_extra(info->current_table->table, HA_EXTRA_CACHE, + (byte*) &info->cache_size); info->current_table->file_offset= info->current_table[-1].file_offset+ info->current_table[-1].table->state->data_file_length; diff --git a/myisammrg/myrg_rsame.c b/myisammrg/myrg_rsame.c index ddc77f85913..f6b2164dc21 100644 --- a/myisammrg/myrg_rsame.c +++ b/myisammrg/myrg_rsame.c @@ -19,12 +19,10 @@ int myrg_rsame(MYRG_INFO *info,byte *record,int inx) { if (inx) /* not yet used, should be 0 */ - { - return(my_errno=HA_ERR_WRONG_INDEX); - } + return (my_errno=HA_ERR_WRONG_INDEX); + if (!info->current_table) - { - return(my_errno=HA_ERR_NO_ACTIVE_RECORD); - } + return (my_errno=HA_ERR_NO_ACTIVE_RECORD); + return mi_rsame(info->current_table->table,record,inx); } diff --git a/myisammrg/myrg_update.c b/myisammrg/myrg_update.c index cb1b0b51ef9..7b9f614b965 100644 --- a/myisammrg/myrg_update.c +++ b/myisammrg/myrg_update.c @@ -21,6 +21,7 @@ int myrg_update(register MYRG_INFO *info,const byte *oldrec, byte *newrec) { if (!info->current_table) - return(my_errno=HA_ERR_NO_ACTIVE_RECORD); + return (my_errno=HA_ERR_NO_ACTIVE_RECORD); + return mi_update(info->current_table->table,oldrec,newrec); } diff --git a/myisammrg/myrg_write.c b/myisammrg/myrg_write.c index 4e597005503..0f191edc23c 100644 --- a/myisammrg/myrg_write.c +++ b/myisammrg/myrg_write.c @@ -26,5 +26,5 @@ int myrg_write(register MYRG_INFO *info, byte *rec) else if (info->merge_insert_method == MERGE_INSERT_TO_LAST) return mi_write(info->end_table[-1].table,rec); else /* unsupported insertion method */ - return (my_errno=HA_ERR_WRONG_COMMAND); + return (my_errno= HA_ERR_WRONG_COMMAND); } |