ixed overflow bug in MyISAM and ISAM when using packed tables with a lot of fields and blobs
isam/open.c: Fixed overflow bug when using packed tables and blobs isam/test_all.res: updated test results myisam/mi_dynrec.c: pack_bits not needed here as we do it on open myisam/mi_open.c: Fixed overflow bug when using packed tables and blobs
This commit is contained in:
parent
67f4bfd132
commit
5df8c7b0e2
@ -415,6 +415,9 @@ static void setup_functions(register ISAM_SHARE *share)
|
||||
share->read_rnd=_nisam_read_rnd_dynamic_record;
|
||||
share->delete_record=_nisam_delete_dynamic_record;
|
||||
share->compare_record=_nisam_cmp_dynamic_record;
|
||||
|
||||
/* add bits used to pack data to pack_reclength for faster allocation */
|
||||
share->base.pack_reclength+= share->base.pack_bits;
|
||||
if (share->base.blobs)
|
||||
{
|
||||
share->update_record=_nisam_update_blob_record;
|
||||
|
@ -1,367 +1,30 @@
|
||||
echo "test2 -L -K -W -P"
|
||||
test2 -L -K -W -P
|
||||
- Creating isam-file
|
||||
- Writing key:s
|
||||
- Delete
|
||||
- Update
|
||||
- Same key: first - next -> last - prev -> first
|
||||
- All keys: first - next -> last - prev -> first
|
||||
- Test if: Read first - next - prev - prev - next == first
|
||||
- Test if: Read last - prev - next - next - prev == last
|
||||
- Test read key-part
|
||||
- Read key (first) - next - delete - next -> last
|
||||
- Read last of key - prev - delete - prev -> first
|
||||
- Test if: Read rrnd - same
|
||||
- Test nisam_records_in_range
|
||||
- nisam_info
|
||||
- nisam_extra(CACHE) + nisam_rrnd.... + nisam_extra(NO_CACHE)
|
||||
- Removing keys
|
||||
|
||||
Following test have been made:
|
||||
Write records: 907
|
||||
Update records: 87
|
||||
Same-key-read: 6
|
||||
Delete records: 907
|
||||
Key cacheing used
|
||||
Write cacheing used
|
||||
Locking used
|
||||
echo "test2 -L -K -W -P -A"
|
||||
test2 -L -K -W -P -A
|
||||
- Creating isam-file
|
||||
- Writing key:s
|
||||
- Delete
|
||||
- Update
|
||||
- Same key: first - next -> last - prev -> first
|
||||
- All keys: first - next -> last - prev -> first
|
||||
- Test if: Read first - next - prev - prev - next == first
|
||||
- Test if: Read last - prev - next - next - prev == last
|
||||
- Test read key-part
|
||||
- Read key (first) - next - delete - next -> last
|
||||
- Read last of key - prev - delete - prev -> first
|
||||
- Test if: Read rrnd - same
|
||||
- Test nisam_records_in_range
|
||||
- nisam_info
|
||||
- nisam_extra(CACHE) + nisam_rrnd.... + nisam_extra(NO_CACHE)
|
||||
- Removing keys
|
||||
|
||||
Following test have been made:
|
||||
Write records: 907
|
||||
Update records: 87
|
||||
Same-key-read: 6
|
||||
Delete records: 907
|
||||
Key cacheing used
|
||||
Write cacheing used
|
||||
Asyncron io with locking used
|
||||
echo "test2 -L -K -W -P -S -R1 -m500"
|
||||
test2 -L -K -W -P -S -R1 -m500
|
||||
- Creating isam-file
|
||||
- Writing key:s
|
||||
- Delete
|
||||
- Update
|
||||
- Same key: first - next -> last - prev -> first
|
||||
- All keys: first - next -> last - prev -> first
|
||||
- Test if: Read first - next - prev - prev - next == first
|
||||
- Test if: Read last - prev - next - next - prev == last
|
||||
- Test read key-part
|
||||
- Read key (first) - next - delete - next -> last
|
||||
- Test if: Read rrnd - same
|
||||
- Test nisam_records_in_range
|
||||
- nisam_info
|
||||
- nisam_extra(CACHE) + nisam_rrnd.... + nisam_extra(NO_CACHE)
|
||||
- Removing keys
|
||||
|
||||
Following test have been made:
|
||||
Write records: 475
|
||||
Update records: 44
|
||||
Same-key-read: 4
|
||||
Delete records: 475
|
||||
Record pointer size: 1
|
||||
Key cacheing used
|
||||
Write cacheing used
|
||||
Locking used
|
||||
test2 -L -K -R1 -m2000 ; Should give error 135
|
||||
- Creating isam-file
|
||||
- Writing key:s
|
||||
- Delete
|
||||
- Update
|
||||
- Same key: first - next -> last - prev -> first
|
||||
- All keys: first - next -> last - prev -> first
|
||||
- Test if: Read first - next - prev - prev - next == first
|
||||
- Test if: Read last - prev - next - next - prev == last
|
||||
- Test read key-part
|
||||
- Read key (first) - next - delete - next -> last
|
||||
- Read last of key - prev - delete - prev -> first
|
||||
- Read first - delete - next -> last
|
||||
- Read last - delete - prev -> first
|
||||
- Test if: Read rrnd - same
|
||||
- Test nisam_records_in_range
|
||||
- nisam_info
|
||||
- nisam_extra(CACHE) + nisam_rrnd.... + nisam_extra(NO_CACHE)
|
||||
- Removing keys
|
||||
|
||||
Following test have been made:
|
||||
Write records: 1647
|
||||
Update records: 125
|
||||
Same-key-read: 8
|
||||
Delete records: 1647
|
||||
Record pointer size: 1
|
||||
Key cacheing used
|
||||
Locking used
|
||||
echo "test2 -L -K -R1 -m2000 ; Should give error 135"
|
||||
test2 -L -K -R1 -m2000
|
||||
echo "test2 -L -K -P -S -R3 -m50 -b1000000"
|
||||
test2 -L -K -P -S -R3 -m50 -b1000000
|
||||
- Creating isam-file
|
||||
- Writing key:s
|
||||
- Delete
|
||||
- Update
|
||||
- Same key: first - next -> last - prev -> first
|
||||
- All keys: first - next -> last - prev -> first
|
||||
- Test if: Read first - next - prev - prev - next == first
|
||||
- Test if: Read last - prev - next - next - prev == last
|
||||
- Test read key-part
|
||||
- Test if: Read rrnd - same
|
||||
- Test nisam_records_in_range
|
||||
- nisam_info
|
||||
- nisam_extra(CACHE) + nisam_rrnd.... + nisam_extra(NO_CACHE)
|
||||
- Removing keys
|
||||
|
||||
Following test have been made:
|
||||
Write records: 50
|
||||
Update records: 5
|
||||
Same-key-read: 2
|
||||
Delete records: 50
|
||||
Record pointer size: 3
|
||||
Key cacheing used
|
||||
Locking used
|
||||
echo "test2 -L -B"
|
||||
test2 -L -B
|
||||
- Creating isam-file
|
||||
- Writing key:s
|
||||
- Delete
|
||||
- Update
|
||||
- Same key: first - next -> last - prev -> first
|
||||
- All keys: first - next -> last - prev -> first
|
||||
- Test if: Read first - next - prev - prev - next == first
|
||||
- Test if: Read last - prev - next - next - prev == last
|
||||
- Test read key-part
|
||||
- Read key (first) - next - delete - next -> last
|
||||
- Read last of key - prev - delete - prev -> first
|
||||
- Test if: Read rrnd - same
|
||||
- Test nisam_records_in_range
|
||||
- nisam_info
|
||||
- nisam_extra(CACHE) + nisam_rrnd.... + nisam_extra(NO_CACHE)
|
||||
- Removing keys
|
||||
|
||||
Following test have been made:
|
||||
Write records: 903
|
||||
Update records: 86
|
||||
Same-key-read: 5
|
||||
Delete records: 903
|
||||
Locking used
|
||||
blobs used
|
||||
echo "test2 -L -K -W -P -m50 -l"
|
||||
test2 -L -K -W -P -m50 -l
|
||||
- Creating isam-file
|
||||
- Writing key:s
|
||||
- Delete
|
||||
- Update
|
||||
- Same key: first - next -> last - prev -> first
|
||||
- All keys: first - next -> last - prev -> first
|
||||
- Test if: Read first - next - prev - prev - next == first
|
||||
- Test if: Read last - prev - next - next - prev == last
|
||||
- Test read key-part
|
||||
- Test if: Read rrnd - same
|
||||
- Test nisam_records_in_range
|
||||
- nisam_info
|
||||
- nisam_extra(CACHE) + nisam_rrnd.... + nisam_extra(NO_CACHE)
|
||||
- Removing keys
|
||||
|
||||
Following test have been made:
|
||||
Write records: 50
|
||||
Update records: 5
|
||||
Same-key-read: 2
|
||||
Delete records: 50
|
||||
Key cacheing used
|
||||
Write cacheing used
|
||||
Locking used
|
||||
Commands Used count Errors Recover errors
|
||||
open 14 0 0
|
||||
write 700 0 0
|
||||
update 70 0 0
|
||||
delete 700 0 0
|
||||
close 14 0 0
|
||||
extra 84 0 0
|
||||
Total 1582 0 0
|
||||
isamlog
|
||||
echo "test2 -L -K -W -P -m50 -l -b100"
|
||||
test2 -L -K -W -P -m50 -l -b100
|
||||
- Creating isam-file
|
||||
- Writing key:s
|
||||
- Delete
|
||||
- Update
|
||||
- Same key: first - next -> last - prev -> first
|
||||
- All keys: first - next -> last - prev -> first
|
||||
- Test if: Read first - next - prev - prev - next == first
|
||||
- Test if: Read last - prev - next - next - prev == last
|
||||
- Test read key-part
|
||||
- Test if: Read rrnd - same
|
||||
- Test nisam_records_in_range
|
||||
- nisam_info
|
||||
- nisam_extra(CACHE) + nisam_rrnd.... + nisam_extra(NO_CACHE)
|
||||
- Removing keys
|
||||
|
||||
Following test have been made:
|
||||
Write records: 50
|
||||
Update records: 5
|
||||
Same-key-read: 2
|
||||
Delete records: 50
|
||||
Key cacheing used
|
||||
Write cacheing used
|
||||
Locking used
|
||||
Commands Used count Errors Recover errors
|
||||
open 15 0 0
|
||||
write 750 0 0
|
||||
update 75 0 0
|
||||
delete 750 0 0
|
||||
close 15 0 0
|
||||
extra 90 0 0
|
||||
Total 1695 0 0
|
||||
isamlog
|
||||
echo "time test2"
|
||||
time test2
|
||||
- Creating isam-file
|
||||
- Writing key:s
|
||||
- Delete
|
||||
- Update
|
||||
- Same key: first - next -> last - prev -> first
|
||||
- All keys: first - next -> last - prev -> first
|
||||
- Test if: Read first - next - prev - prev - next == first
|
||||
- Test if: Read last - prev - next - next - prev == last
|
||||
- Test read key-part
|
||||
- Read key (first) - next - delete - next -> last
|
||||
- Read last of key - prev - delete - prev -> first
|
||||
- Test if: Read rrnd - same
|
||||
- Test nisam_records_in_range
|
||||
- nisam_info
|
||||
- nisam_extra(CACHE) + nisam_rrnd.... + nisam_extra(NO_CACHE)
|
||||
- Removing keys
|
||||
|
||||
Following test have been made:
|
||||
Write records: 907
|
||||
Update records: 87
|
||||
Same-key-read: 6
|
||||
Delete records: 907
|
||||
echo "time test2 -K"
|
||||
time test2 -K
|
||||
- Creating isam-file
|
||||
- Writing key:s
|
||||
- Delete
|
||||
- Update
|
||||
- Same key: first - next -> last - prev -> first
|
||||
- All keys: first - next -> last - prev -> first
|
||||
- Test if: Read first - next - prev - prev - next == first
|
||||
- Test if: Read last - prev - next - next - prev == last
|
||||
- Test read key-part
|
||||
- Read key (first) - next - delete - next -> last
|
||||
- Read last of key - prev - delete - prev -> first
|
||||
- Test if: Read rrnd - same
|
||||
- Test nisam_records_in_range
|
||||
- nisam_info
|
||||
- nisam_extra(CACHE) + nisam_rrnd.... + nisam_extra(NO_CACHE)
|
||||
- Removing keys
|
||||
|
||||
Following test have been made:
|
||||
Write records: 907
|
||||
Update records: 87
|
||||
Same-key-read: 6
|
||||
Delete records: 907
|
||||
Key cacheing used
|
||||
echo "time test2 -L"
|
||||
time test2 -L
|
||||
- Creating isam-file
|
||||
- Writing key:s
|
||||
- Delete
|
||||
- Update
|
||||
- Same key: first - next -> last - prev -> first
|
||||
- All keys: first - next -> last - prev -> first
|
||||
- Test if: Read first - next - prev - prev - next == first
|
||||
- Test if: Read last - prev - next - next - prev == last
|
||||
- Test read key-part
|
||||
- Read key (first) - next - delete - next -> last
|
||||
- Read last of key - prev - delete - prev -> first
|
||||
- Test if: Read rrnd - same
|
||||
- Test nisam_records_in_range
|
||||
- nisam_info
|
||||
- nisam_extra(CACHE) + nisam_rrnd.... + nisam_extra(NO_CACHE)
|
||||
- Removing keys
|
||||
|
||||
Following test have been made:
|
||||
Write records: 907
|
||||
Update records: 87
|
||||
Same-key-read: 6
|
||||
Delete records: 907
|
||||
Locking used
|
||||
echo "time test2 -L -K"
|
||||
time test2 -L -K
|
||||
- Creating isam-file
|
||||
- Writing key:s
|
||||
- Delete
|
||||
- Update
|
||||
- Same key: first - next -> last - prev -> first
|
||||
- All keys: first - next -> last - prev -> first
|
||||
- Test if: Read first - next - prev - prev - next == first
|
||||
- Test if: Read last - prev - next - next - prev == last
|
||||
- Test read key-part
|
||||
- Read key (first) - next - delete - next -> last
|
||||
- Read last of key - prev - delete - prev -> first
|
||||
- Test if: Read rrnd - same
|
||||
- Test nisam_records_in_range
|
||||
- nisam_info
|
||||
- nisam_extra(CACHE) + nisam_rrnd.... + nisam_extra(NO_CACHE)
|
||||
- Removing keys
|
||||
|
||||
Following test have been made:
|
||||
Write records: 907
|
||||
Update records: 87
|
||||
Same-key-read: 6
|
||||
Delete records: 907
|
||||
Key cacheing used
|
||||
Locking used
|
||||
echo "time test2 -L -K -W"
|
||||
time test2 -L -K -W
|
||||
- Creating isam-file
|
||||
- Writing key:s
|
||||
- Delete
|
||||
- Update
|
||||
- Same key: first - next -> last - prev -> first
|
||||
- All keys: first - next -> last - prev -> first
|
||||
- Test if: Read first - next - prev - prev - next == first
|
||||
- Test if: Read last - prev - next - next - prev == last
|
||||
- Test read key-part
|
||||
- Read key (first) - next - delete - next -> last
|
||||
- Read last of key - prev - delete - prev -> first
|
||||
- Test if: Read rrnd - same
|
||||
- Test nisam_records_in_range
|
||||
- nisam_info
|
||||
- nisam_extra(CACHE) + nisam_rrnd.... + nisam_extra(NO_CACHE)
|
||||
- Removing keys
|
||||
|
||||
Following test have been made:
|
||||
Write records: 907
|
||||
Update records: 87
|
||||
Same-key-read: 6
|
||||
Delete records: 907
|
||||
Key cacheing used
|
||||
Write cacheing used
|
||||
Locking used
|
||||
echo "time test2 -L -K -W -S"
|
||||
time test2 -L -K -W -S
|
||||
- Creating isam-file
|
||||
- Writing key:s
|
||||
- Delete
|
||||
- Update
|
||||
- Same key: first - next -> last - prev -> first
|
||||
- All keys: first - next -> last - prev -> first
|
||||
- Test if: Read first - next - prev - prev - next == first
|
||||
- Test if: Read last - prev - next - next - prev == last
|
||||
- Test read key-part
|
||||
- Read key (first) - next - delete - next -> last
|
||||
- Read last of key - prev - delete - prev -> first
|
||||
- Test if: Read rrnd - same
|
||||
- Test nisam_records_in_range
|
||||
- nisam_info
|
||||
- nisam_extra(CACHE) + nisam_rrnd.... + nisam_extra(NO_CACHE)
|
||||
- Removing keys
|
||||
|
||||
Following test have been made:
|
||||
Write records: 907
|
||||
Update records: 87
|
||||
Same-key-read: 6
|
||||
Delete records: 907
|
||||
Key cacheing used
|
||||
Write cacheing used
|
||||
Locking used
|
||||
|
@ -62,7 +62,7 @@ int _mi_write_blob_record(MI_INFO *info, const byte *record)
|
||||
|
||||
extra=ALIGN_SIZE(MI_MAX_DYN_BLOCK_HEADER)+MI_SPLIT_LENGTH+
|
||||
MI_DYN_DELETE_BLOCK_HEADER+1;
|
||||
reclength= (info->s->base.pack_reclength+ info->s->base.pack_bits+
|
||||
reclength= (info->s->base.pack_reclength+
|
||||
_my_calc_total_blob_length(info,record)+ extra);
|
||||
if (reclength > MI_DYN_MAX_ROW_LENGTH)
|
||||
{
|
||||
|
@ -602,6 +602,8 @@ void mi_setup_functions(register MYISAM_SHARE *share)
|
||||
share->compare_unique=_mi_cmp_dynamic_unique;
|
||||
share->calc_checksum= mi_checksum;
|
||||
|
||||
/* add bits used to pack data to pack_reclength for faster allocation */
|
||||
share->base.pack_reclength+= share->base.pack_bits;
|
||||
if (share->base.blobs)
|
||||
{
|
||||
share->update_record=_mi_update_blob_record;
|
||||
|
Loading…
x
Reference in New Issue
Block a user