summaryrefslogtreecommitdiff
path: root/myisammrg
diff options
context:
space:
mode:
Diffstat (limited to 'myisammrg')
-rw-r--r--myisammrg/myrg_delete.c9
-rw-r--r--myisammrg/myrg_extra.c12
-rw-r--r--myisammrg/myrg_locking.c4
-rw-r--r--myisammrg/myrg_open.c8
-rw-r--r--myisammrg/myrg_rnext.c3
-rw-r--r--myisammrg/myrg_rprev.c3
-rw-r--r--myisammrg/myrg_rrnd.c10
-rw-r--r--myisammrg/myrg_rsame.c10
-rw-r--r--myisammrg/myrg_update.c3
-rw-r--r--myisammrg/myrg_write.c2
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);
}