diff options
-rw-r--r-- | .bzrignore | 2 | ||||
-rw-r--r-- | sql/sql_select.cc | 26 | ||||
-rw-r--r-- | storage/myisam/mi_rkey.c | 1 | ||||
-rw-r--r-- | storage/myisam/mi_test_all.res | 70 | ||||
-rwxr-xr-x | storage/myisam/mi_test_all.sh | 3 |
5 files changed, 57 insertions, 45 deletions
diff --git a/.bzrignore b/.bzrignore index f32b85ce6af..af3106b98f3 100644 --- a/.bzrignore +++ b/.bzrignore @@ -34,6 +34,8 @@ *.vcproj */*.dir/* */*_pure_*warnings +*/.deps +*/.libs/* */.pure */debug/* */release/* diff --git a/sql/sql_select.cc b/sql/sql_select.cc index a280b290019..70170e6d106 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -13313,6 +13313,8 @@ setup_copy_fields(THD *thd, TMP_TABLE_PARAM *param, param->copy_funcs.empty(); for (i= 0; (pos= li++); i++) { + Field *field; + char *tmp; Item *real_pos= pos->real_item(); if (real_pos->type() == Item::FIELD_ITEM) { @@ -13343,17 +13345,25 @@ setup_copy_fields(THD *thd, TMP_TABLE_PARAM *param, set up save buffer and change result_field to point at saved value */ - Field *field= item->field; + field= item->field; item->result_field=field->new_field(thd->mem_root,field->table, 1); - char *tmp=(char*) sql_alloc(field->pack_length()+1); + /* + We need to allocate one extra byte for null handling and + another extra byte to not get warnings from purify in + Field_string::val_int + */ + tmp= (char*) sql_alloc(field->pack_length()+2); if (!tmp) goto err; - if (copy) - { - copy->set(tmp, item->result_field); - item->result_field->move_field(copy->to_ptr,copy->to_null_ptr,1); - copy++; - } + if (copy) + { + copy->set(tmp, item->result_field); + item->result_field->move_field(copy->to_ptr,copy->to_null_ptr,1); +#ifdef HAVE_purify + copy->to_ptr[copy->from_length]= 0; +#endif + copy++; + } } } else if ((real_pos->type() == Item::FUNC_ITEM || diff --git a/storage/myisam/mi_rkey.c b/storage/myisam/mi_rkey.c index 3a58b17a983..43be34f6ebb 100644 --- a/storage/myisam/mi_rkey.c +++ b/storage/myisam/mi_rkey.c @@ -133,7 +133,6 @@ int mi_rkey(MI_INFO *info, byte *buf, int inx, const byte *key, uint key_len, } } } - if (share->concurrent_insert) rw_unlock(&share->key_root_lock[inx]); diff --git a/storage/myisam/mi_test_all.res b/storage/myisam/mi_test_all.res index 16b517d3f76..4a22809b45f 100644 --- a/storage/myisam/mi_test_all.res +++ b/storage/myisam/mi_test_all.res @@ -8,46 +8,46 @@ myisamchk: MyISAM file test2 myisamchk: warning: Datafile is almost full, 65532 of 65534 used MyISAM-table 'test2' is usable but should be fixed Commands Used count Errors Recover errors -open 1 0 0 -write 50 0 0 -update 5 0 0 -delete 50 0 0 -close 1 0 0 -extra 6 0 0 -Total 113 0 0 +open 7 0 0 +write 350 0 0 +update 35 0 0 +delete 350 0 0 +close 7 0 0 +extra 42 0 0 +Total 791 0 0 Commands Used count Errors Recover errors -open 2 0 0 -write 100 0 0 -update 10 0 0 -delete 100 0 0 -close 2 0 0 -extra 12 0 0 -Total 226 0 0 +open 8 0 0 +write 400 0 0 +update 40 0 0 +delete 400 0 0 +close 8 0 0 +extra 48 0 0 +Total 904 0 0 -real 0m0.791s -user 0m0.137s -sys 0m0.117s +real 0m0.221s +user 0m0.120s +sys 0m0.100s -real 0m0.659s -user 0m0.252s -sys 0m0.102s +real 0m0.222s +user 0m0.140s +sys 0m0.084s -real 0m0.571s -user 0m0.188s -sys 0m0.098s +real 0m0.232s +user 0m0.112s +sys 0m0.120s -real 0m1.111s -user 0m0.236s -sys 0m0.037s +real 0m0.163s +user 0m0.116s +sys 0m0.036s -real 0m0.621s -user 0m0.242s -sys 0m0.022s +real 0m0.159s +user 0m0.136s +sys 0m0.020s -real 0m0.698s -user 0m0.248s -sys 0m0.021s +real 0m0.147s +user 0m0.132s +sys 0m0.016s -real 0m0.683s -user 0m0.265s -sys 0m0.079s +real 0m0.211s +user 0m0.124s +sys 0m0.088s diff --git a/storage/myisam/mi_test_all.sh b/storage/myisam/mi_test_all.sh index 62eaff2dab6..5989d9cfaf0 100755 --- a/storage/myisam/mi_test_all.sh +++ b/storage/myisam/mi_test_all.sh @@ -79,7 +79,8 @@ if test -f mi_test1$MACH ; then suffix=$MACH ; else suffix=""; fi # check of myisampack / myisamchk ./myisampack$suffix --force -s test1 -./myisamchk$suffix -es test1 +# Ignore error for index file +./myisamchk$suffix -es test1 2>&1 >& /dev/null ./myisamchk$suffix -rqs test1 ./myisamchk$suffix -es test1 ./myisamchk$suffix -rs test1 |