Commit cd25e169 authored by monty@narttu.mysql.fi's avatar monty@narttu.mysql.fi

ixed overflow bug in MyISAM and ISAM when using packed tables with a lot of fields and blobs

parent 5c57eb22
......@@ -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;
......
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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment