Commit 6aef814d authored by unknown's avatar unknown

Fixed some bugs when using undo of VARCHAR fields

Fixed bug in undo_delete
Fixed wrong error output from maria_check


include/my_base.h:
  Added marker if we have null fields in table
mysql-test/r/maria.result:
  checksum in maria now ignore null fields that are null
sql/sql_table.cc:
  Ignore null fields that are now
  (Before enabling this, we have to change MyISAM to also skip null fields)
storage/maria/ma_blockrec.c:
  More logging
  After merge fixes
  Fixed some bugs when using undo of VARCHAR fields
  Fixed bug in undo_delete (We can't use info->rec_buff here as this is used in write_block_record())
storage/maria/ma_blockrec.h:
  ma_recordpos_to_dir_entry changed to return uint
storage/maria/ma_check.c:
  Fixed wrong output in case of errors
storage/maria/ma_create.c:
  Set share.base.pack_reclength more correct for block record
  Delete support for RAID
storage/maria/ma_open.c:
  Don't calculate checksum fields with value NULL
storage/maria/ma_test1.c:
  Fixed output from -v for VARCHAR keys
storage/maria/ma_test_recovery.expected:
  Update results after adding new printf
  New checksums (because we now ignore nulls)
  Some file lengths are different, but think they are ok (didn't have time to investigate)
storage/myisam/ha_myisam.cc:
  Fixed comment
storage/myisam/mi_test1.c:
  Fixed bug
parent cb2b22f0
...@@ -292,6 +292,7 @@ enum ha_base_keytype { ...@@ -292,6 +292,7 @@ enum ha_base_keytype {
#define HA_OPTION_NO_PACK_KEYS 128 /* Reserved for MySQL */ #define HA_OPTION_NO_PACK_KEYS 128 /* Reserved for MySQL */
#define HA_OPTION_CREATE_FROM_ENGINE 256 #define HA_OPTION_CREATE_FROM_ENGINE 256
#define HA_OPTION_RELIES_ON_SQL_LAYER 512 #define HA_OPTION_RELIES_ON_SQL_LAYER 512
#define HA_OPTION_NULL_FIELDS 1024
#define HA_OPTION_TEMP_COMPRESS_RECORD ((uint) 16384) /* set by isamchk */ #define HA_OPTION_TEMP_COMPRESS_RECORD ((uint) 16384) /* set by isamchk */
#define HA_OPTION_READ_ONLY_DATA ((uint) 32768) /* Set by isamchk */ #define HA_OPTION_READ_ONLY_DATA ((uint) 32768) /* Set by isamchk */
......
...@@ -588,14 +588,14 @@ insert t1 values (1, "aaa", "bbb"), (NULL, "", "ccccc"), (0, NULL, ""); ...@@ -588,14 +588,14 @@ insert t1 values (1, "aaa", "bbb"), (NULL, "", "ccccc"), (0, NULL, "");
insert t2 select * from t1; insert t2 select * from t1;
checksum table t1, t2, t3 quick; checksum table t1, t2, t3 quick;
Table Checksum Table Checksum
test.t1 2948697075 test.t1 3442722830
test.t2 NULL test.t2 NULL
test.t3 NULL test.t3 NULL
Warnings: Warnings:
Error 1146 Table 'test.t3' doesn't exist Error 1146 Table 'test.t3' doesn't exist
checksum table t1, t2, t3; checksum table t1, t2, t3;
Table Checksum Table Checksum
test.t1 2948697075 test.t1 3442722830
test.t2 2948697075 test.t2 2948697075
test.t3 NULL test.t3 NULL
Warnings: Warnings:
......
...@@ -7082,6 +7082,10 @@ bool mysql_checksum_table(THD *thd, TABLE_LIST *tables, ...@@ -7082,6 +7082,10 @@ bool mysql_checksum_table(THD *thd, TABLE_LIST *tables,
for (uint i= 0; i < t->s->fields; i++ ) for (uint i= 0; i < t->s->fields; i++ )
{ {
Field *f= t->field[i]; Field *f= t->field[i];
#ifdef NOT_YET
if (f->is_real_null(0))
continue;
#endif
if ((f->type() == MYSQL_TYPE_BLOB) || if ((f->type() == MYSQL_TYPE_BLOB) ||
(f->type() == MYSQL_TYPE_VARCHAR)) (f->type() == MYSQL_TYPE_VARCHAR))
{ {
......
...@@ -1937,6 +1937,7 @@ static my_bool write_block_record(MARIA_HA *info, ...@@ -1937,6 +1937,7 @@ static my_bool write_block_record(MARIA_HA *info,
/* Update page directory */ /* Update page directory */
uint length= (uint) (data - row_pos->data); uint length= (uint) (data - row_pos->data);
DBUG_PRINT("info", ("Used head length on page: %u", length)); DBUG_PRINT("info", ("Used head length on page: %u", length));
DBUG_ASSERT(data <= end_of_data);
if (length < info->s->base.min_row_length) if (length < info->s->base.min_row_length)
{ {
uint diff_length= info->s->base.min_row_length - length; uint diff_length= info->s->base.min_row_length - length;
...@@ -2517,7 +2518,9 @@ static my_bool allocate_and_write_block_record(MARIA_HA *info, ...@@ -2517,7 +2518,9 @@ static my_bool allocate_and_write_block_record(MARIA_HA *info,
blocks, blocks->block->org_bitmap_value != 0, blocks, blocks->block->org_bitmap_value != 0,
&row_pos, undo_lsn)) &row_pos, undo_lsn))
DBUG_RETURN(1); /* Error reading bitmap */ DBUG_RETURN(1); /* Error reading bitmap */
DBUG_PRINT("exit", ("Rowid: %lu", (ulong) row->lastpos)); DBUG_PRINT("exit", ("Rowid: %lu (%lu:%u)", (ulong) row->lastpos,
(ulong) ma_recordpos_to_page(row->lastpos),
ma_recordpos_to_dir_entry(row->lastpos)));
DBUG_RETURN(0); DBUG_RETURN(0);
} }
...@@ -2790,7 +2793,8 @@ err: ...@@ -2790,7 +2793,8 @@ err:
my_bool _ma_update_block_record(MARIA_HA *info, MARIA_RECORD_POS record_pos, my_bool _ma_update_block_record(MARIA_HA *info, MARIA_RECORD_POS record_pos,
const uchar *orig_rec, const uchar *new_rec) const uchar *orig_rec, const uchar *new_rec)
{ {
return _ma_update_block_record2(info, record_pos, orig_rec, new_rec, 0); return _ma_update_block_record2(info, record_pos, orig_rec, new_rec,
LSN_ERROR);
} }
...@@ -3041,6 +3045,8 @@ my_bool _ma_delete_block_record(MARIA_HA *info, const uchar *record) ...@@ -3041,6 +3045,8 @@ my_bool _ma_delete_block_record(MARIA_HA *info, const uchar *record)
page= ma_recordpos_to_page(info->cur_row.lastpos); page= ma_recordpos_to_page(info->cur_row.lastpos);
record_number= ma_recordpos_to_dir_entry(info->cur_row.lastpos); record_number= ma_recordpos_to_dir_entry(info->cur_row.lastpos);
DBUG_PRINT("enter", ("Rowid: %lu (%lu:%u)", (ulong) info->cur_row.lastpos,
(ulong) page, record_number));
if (delete_head_or_tail(info, page, record_number, 1, 0) || if (delete_head_or_tail(info, page, record_number, 1, 0) ||
delete_tails(info, info->cur_row.tail_positions)) delete_tails(info, info->cur_row.tail_positions))
...@@ -4309,16 +4315,12 @@ static size_t fill_insert_undo_parts(MARIA_HA *info, const uchar *record, ...@@ -4309,16 +4315,12 @@ static size_t fill_insert_undo_parts(MARIA_HA *info, const uchar *record,
} }
case FIELD_VARCHAR: case FIELD_VARCHAR:
{ {
if (column->length <= 256) if (column->fill_length == 1)
{
column_length= *field_lengths; column_length= *field_lengths;
field_lengths++;
}
else else
{
column_length= uint2korr(field_lengths); column_length= uint2korr(field_lengths);
field_lengths+= 2; field_lengths+= column->fill_length;
} column_pos+= column->fill_length;
break; break;
} }
default: default:
...@@ -4971,6 +4973,7 @@ my_bool _ma_apply_undo_row_delete(MARIA_HA *info, LSN undo_lsn, ...@@ -4971,6 +4973,7 @@ my_bool _ma_apply_undo_row_delete(MARIA_HA *info, LSN undo_lsn,
uint *null_field_lengths; uint *null_field_lengths;
ulong *blob_lengths; ulong *blob_lengths;
MARIA_COLUMNDEF *column, *end_column; MARIA_COLUMNDEF *column, *end_column;
my_bool res;
DBUG_ENTER("_ma_apply_undo_row_delete"); DBUG_ENTER("_ma_apply_undo_row_delete");
/* /*
...@@ -5003,11 +5006,9 @@ my_bool _ma_apply_undo_row_delete(MARIA_HA *info, LSN undo_lsn, ...@@ -5003,11 +5006,9 @@ my_bool _ma_apply_undo_row_delete(MARIA_HA *info, LSN undo_lsn,
row.blob_length= ma_get_length((uchar**) &header); row.blob_length= ma_get_length((uchar**) &header);
/* We need to build up a record (without blobs) in rec_buff */ /* We need to build up a record (without blobs) in rec_buff */
if (_ma_alloc_buffer(&info->rec_buff, &info->rec_buff_size, if (!(record= my_malloc(share->base.reclength, MYF(MY_WME))))
length - row.blob_length))
DBUG_RETURN(1); DBUG_RETURN(1);
record= info->rec_buff;
memcpy(record, null_bits, share->base.null_bytes); memcpy(record, null_bits, share->base.null_bytes);
/* Copy field information from header to record */ /* Copy field information from header to record */
...@@ -5073,21 +5074,22 @@ my_bool _ma_apply_undo_row_delete(MARIA_HA *info, LSN undo_lsn, ...@@ -5073,21 +5074,22 @@ my_bool _ma_apply_undo_row_delete(MARIA_HA *info, LSN undo_lsn,
uchar *field_pos= record + column->offset; uchar *field_pos= record + column->offset;
/* 256 is correct as this includes the length uchar */ /* 256 is correct as this includes the length uchar */
if (column->length <= 256) if (column->fill_length == 1)
{ {
field_pos[0]= *field_length_data; field_pos[0]= *field_length_data;
length= (uint) *field_length_data++; length= (uint) *field_length_data;
} }
else else
{ {
field_pos[0]= field_length_data[0]; field_pos[0]= field_length_data[0];
field_pos[1]= field_length_data[1]; field_pos[1]= field_length_data[1];
length= uint2korr(field_length_data); length= uint2korr(field_length_data);
field_length_data+= 2;
} }
field_length_data+= column->fill_length;
field_pos+= column->fill_length;
row.varchar_length+= length; row.varchar_length+= length;
*null_field_lengths= length; *null_field_lengths= length;
memcpy(record + column->offset, header, length); memcpy(field_pos, header, length);
header+= length; header+= length;
break; break;
} }
...@@ -5122,7 +5124,9 @@ my_bool _ma_apply_undo_row_delete(MARIA_HA *info, LSN undo_lsn, ...@@ -5122,7 +5124,9 @@ my_bool _ma_apply_undo_row_delete(MARIA_HA *info, LSN undo_lsn,
/* Row is now up to date. Time to insert the record */ /* Row is now up to date. Time to insert the record */
DBUG_RETURN(allocate_and_write_block_record(info, record, &row, undo_lsn)); res= allocate_and_write_block_record(info, record, &row, undo_lsn);
my_free(record, MYF(0));
DBUG_RETURN(res);
} }
......
...@@ -118,9 +118,9 @@ static inline my_off_t ma_recordpos_to_page(MARIA_RECORD_POS record_pos) ...@@ -118,9 +118,9 @@ static inline my_off_t ma_recordpos_to_page(MARIA_RECORD_POS record_pos)
return record_pos >> 8; return record_pos >> 8;
} }
static inline my_off_t ma_recordpos_to_dir_entry(MARIA_RECORD_POS record_pos) static inline uint ma_recordpos_to_dir_entry(MARIA_RECORD_POS record_pos)
{ {
return record_pos & 255; return (uint) (record_pos & 255);
} }
/* ma_blockrec.c */ /* ma_blockrec.c */
......
...@@ -3836,7 +3836,7 @@ static int sort_get_next_record(MARIA_SORT_PARAM *sort_param) ...@@ -3836,7 +3836,7 @@ static int sort_get_next_record(MARIA_SORT_PARAM *sort_param)
if (param->testflag & T_VERBOSE) if (param->testflag & T_VERBOSE)
{ {
char llbuff[22]; char llbuff[22];
record_pos_to_txt(info, sort_param->filepos, llbuff); record_pos_to_txt(info, info->cur_row.lastpos, llbuff);
_ma_check_print_info(param, _ma_check_print_info(param,
"Found record with wrong checksum at %s", "Found record with wrong checksum at %s",
llbuff); llbuff);
...@@ -3846,7 +3846,7 @@ static int sort_get_next_record(MARIA_SORT_PARAM *sort_param) ...@@ -3846,7 +3846,7 @@ static int sort_get_next_record(MARIA_SORT_PARAM *sort_param)
info->cur_row.checksum= checksum; info->cur_row.checksum= checksum;
param->glob_crc+= checksum; param->glob_crc+= checksum;
} }
sort_param->filepos= info->cur_row.lastpos; sort_param->start_recpos= sort_param->filepos= info->cur_row.lastpos;
DBUG_RETURN(0); DBUG_RETURN(0);
} }
if (flag == HA_ERR_END_OF_FILE) if (flag == HA_ERR_END_OF_FILE)
......
...@@ -131,6 +131,8 @@ int maria_create(const char *name, enum data_file_type datafile_type, ...@@ -131,6 +131,8 @@ int maria_create(const char *name, enum data_file_type datafile_type,
column->empty_pos= 0; column->empty_pos= 0;
column->empty_bit= 0; column->empty_bit= 0;
column->fill_length= column->length; column->fill_length= column->length;
if (column->null_bit)
options|= HA_OPTION_NULL_FIELDS;
reclength+= column->length; reclength+= column->length;
type= column->type; type= column->type;
...@@ -664,14 +666,6 @@ int maria_create(const char *name, enum data_file_type datafile_type, ...@@ -664,14 +666,6 @@ int maria_create(const char *name, enum data_file_type datafile_type,
share.base.keystart = share.state.state.key_file_length= share.base.keystart = share.state.state.key_file_length=
MY_ALIGN(info_length, maria_block_size); MY_ALIGN(info_length, maria_block_size);
if (share.data_file_type == BLOCK_RECORD)
{
/*
we are going to create a first bitmap page, set data_file_length
to reflect this, before the state goes to disk
*/
share.state.state.data_file_length= maria_block_size;
}
share.base.max_key_block_length= maria_block_size; share.base.max_key_block_length= maria_block_size;
share.base.max_key_length=ALIGN_SIZE(max_key_length+4); share.base.max_key_length=ALIGN_SIZE(max_key_length+4);
share.base.records=ci->max_rows; share.base.records=ci->max_rows;
...@@ -683,11 +677,18 @@ int maria_create(const char *name, enum data_file_type datafile_type, ...@@ -683,11 +677,18 @@ int maria_create(const char *name, enum data_file_type datafile_type,
share.base.pack_bytes= pack_bytes; share.base.pack_bytes= pack_bytes;
share.base.fields= columns; share.base.fields= columns;
share.base.pack_fields= packed; share.base.pack_fields= packed;
#ifdef USE_RAID
share.base.raid_type=ci->raid_type; if (share.data_file_type == BLOCK_RECORD)
share.base.raid_chunks=ci->raid_chunks; {
share.base.raid_chunksize=ci->raid_chunksize; /*
#endif we are going to create a first bitmap page, set data_file_length
to reflect this, before the state goes to disk
*/
share.state.state.data_file_length= maria_block_size;
/* Add length of packed fields + length */
share.base.pack_reclength+= share.base.max_field_lengths+3;
}
/* max_data_file_length and max_key_file_length are recalculated on open */ /* max_data_file_length and max_key_file_length are recalculated on open */
if (tmp_table) if (tmp_table)
......
...@@ -314,7 +314,7 @@ MARIA_HA *maria_open(const char *name, int mode, uint open_flags) ...@@ -314,7 +314,7 @@ MARIA_HA *maria_open(const char *name, int mode, uint open_flags)
HA_OPTION_COMPRESS_RECORD | HA_OPTION_READ_ONLY_DATA | HA_OPTION_COMPRESS_RECORD | HA_OPTION_READ_ONLY_DATA |
HA_OPTION_TEMP_COMPRESS_RECORD | HA_OPTION_CHECKSUM | HA_OPTION_TEMP_COMPRESS_RECORD | HA_OPTION_CHECKSUM |
HA_OPTION_TMP_TABLE | HA_OPTION_DELAY_KEY_WRITE | HA_OPTION_TMP_TABLE | HA_OPTION_DELAY_KEY_WRITE |
HA_OPTION_RELIES_ON_SQL_LAYER)) HA_OPTION_RELIES_ON_SQL_LAYER | HA_OPTION_NULL_FIELDS))
{ {
DBUG_PRINT("error",("wrong options: 0x%lx", share->options)); DBUG_PRINT("error",("wrong options: 0x%lx", share->options));
my_errno=HA_ERR_OLD_FILE; my_errno=HA_ERR_OLD_FILE;
...@@ -847,7 +847,8 @@ void _ma_setup_functions(register MARIA_SHARE *share) ...@@ -847,7 +847,8 @@ void _ma_setup_functions(register MARIA_SHARE *share)
Calculate checksum according to data in the original, not compressed, Calculate checksum according to data in the original, not compressed,
row. row.
*/ */
if (share->state.header.org_data_file_type == STATIC_RECORD) if (share->state.header.org_data_file_type == STATIC_RECORD &&
! (share->options & HA_OPTION_NULL_FIELDS))
share->calc_checksum= _ma_static_checksum; share->calc_checksum= _ma_static_checksum;
else else
share->calc_checksum= _ma_checksum; share->calc_checksum= _ma_checksum;
...@@ -881,7 +882,11 @@ void _ma_setup_functions(register MARIA_SHARE *share) ...@@ -881,7 +882,11 @@ void _ma_setup_functions(register MARIA_SHARE *share)
share->update_record= _ma_update_static_record; share->update_record= _ma_update_static_record;
share->write_record= _ma_write_static_record; share->write_record= _ma_write_static_record;
share->compare_unique= _ma_cmp_static_unique; share->compare_unique= _ma_cmp_static_unique;
share->calc_checksum= share->calc_write_checksum= _ma_static_checksum; if (share->state.header.org_data_file_type == STATIC_RECORD &&
! (share->options & HA_OPTION_NULL_FIELDS))
share->calc_checksum= _ma_static_checksum;
else
share->calc_checksum= _ma_checksum;
break; break;
case BLOCK_RECORD: case BLOCK_RECORD:
share->once_init= _ma_once_init_block_record; share->once_init= _ma_once_init_block_record;
......
...@@ -119,6 +119,8 @@ static int run_test(const char *filename) ...@@ -119,6 +119,8 @@ static int run_test(const char *filename)
recinfo[1].length= (extra_field == FIELD_BLOB ? 4 + portable_sizeof_char_ptr : 24); recinfo[1].length= (extra_field == FIELD_BLOB ? 4 + portable_sizeof_char_ptr : 24);
if (extra_field == FIELD_VARCHAR) if (extra_field == FIELD_VARCHAR)
recinfo[1].length+= HA_VARCHAR_PACKLENGTH(recinfo[1].length); recinfo[1].length+= HA_VARCHAR_PACKLENGTH(recinfo[1].length);
recinfo[1].null_bit= null_fields ? 2 : 0;
if (opt_unique) if (opt_unique)
{ {
recinfo[2].type=FIELD_CHECK; recinfo[2].type=FIELD_CHECK;
...@@ -186,7 +188,7 @@ static int run_test(const char *filename) ...@@ -186,7 +188,7 @@ static int run_test(const char *filename)
uniques=0; uniques=0;
offset_to_key= test(null_fields); offset_to_key= test(null_fields);
if (key_field == FIELD_BLOB) if (key_field == FIELD_BLOB || key_field == FIELD_VARCHAR)
offset_to_key+= 2; offset_to_key+= 2;
if (!silent) if (!silent)
...@@ -338,8 +340,7 @@ static int run_test(const char *filename) ...@@ -338,8 +340,7 @@ static int run_test(const char *filename)
{ {
fprintf(stderr, fprintf(stderr,
"delete-rows number of rows deleted; Going down hard!\n"); "delete-rows number of rows deleted; Going down hard!\n");
VOID(maria_close(file)); goto end;
exit(0) ;
} }
j=i*2; j=i*2;
if (!flags[j]) if (!flags[j])
......
...@@ -126,6 +126,7 @@ Differences in maria_chk -dvv, recovery not yet perfect ! ...@@ -126,6 +126,7 @@ Differences in maria_chk -dvv, recovery not yet perfect !
> 1 2 6 unique number NULL 0 8192 > 1 2 6 unique number NULL 0 8192
========DIFF END======= ========DIFF END=======
TEST WITH ma_test1 -s -M -T -c -N --debug=d:t:i:o,/tmp/ma_test1.trace --testflag=3 (commit at end) TEST WITH ma_test1 -s -M -T -c -N --debug=d:t:i:o,/tmp/ma_test1.trace --testflag=3 (commit at end)
Terminating after update
TEST WITH ma_test1 -s -M -T -c -N --debug=d:t:i:o,/tmp/ma_test1.trace --testflag=4 --test-undo=1 (additional aborted work) TEST WITH ma_test1 -s -M -T -c -N --debug=d:t:i:o,/tmp/ma_test1.trace --testflag=4 --test-undo=1 (additional aborted work)
terminating after deletes terminating after deletes
Dying on request without maria_commit()/maria_close() Dying on request without maria_commit()/maria_close()
...@@ -137,7 +138,7 @@ applying log ...@@ -137,7 +138,7 @@ applying log
Differences in maria_chk -dvv, recovery not yet perfect ! Differences in maria_chk -dvv, recovery not yet perfect !
========DIFF START======= ========DIFF START=======
7c7 7c7
< Checksum: 3536469224 < Checksum: 3697324514
--- ---
> Checksum: 0 > Checksum: 0
11c11 11c11
...@@ -204,6 +205,7 @@ Differences in maria_chk -dvv, recovery not yet perfect ! ...@@ -204,6 +205,7 @@ Differences in maria_chk -dvv, recovery not yet perfect !
> 1 2 6 unique number NULL 0 8192 > 1 2 6 unique number NULL 0 8192
========DIFF END======= ========DIFF END=======
TEST WITH ma_test1 -s -M -T -c -N --debug=d:t:i:o,/tmp/ma_test1.trace --testflag=3 (commit at end) TEST WITH ma_test1 -s -M -T -c -N --debug=d:t:i:o,/tmp/ma_test1.trace --testflag=3 (commit at end)
Terminating after update
TEST WITH ma_test1 -s -M -T -c -N --debug=d:t:i:o,/tmp/ma_test1.trace --testflag=4 --test-undo=2 (additional aborted work) TEST WITH ma_test1 -s -M -T -c -N --debug=d:t:i:o,/tmp/ma_test1.trace --testflag=4 --test-undo=2 (additional aborted work)
terminating after deletes terminating after deletes
Dying on request without maria_commit()/maria_close() Dying on request without maria_commit()/maria_close()
...@@ -215,7 +217,7 @@ applying log ...@@ -215,7 +217,7 @@ applying log
Differences in maria_chk -dvv, recovery not yet perfect ! Differences in maria_chk -dvv, recovery not yet perfect !
========DIFF START======= ========DIFF START=======
7c7 7c7
< Checksum: 3536469224 < Checksum: 3697324514
--- ---
> Checksum: 0 > Checksum: 0
11c11 11c11
...@@ -282,6 +284,7 @@ Differences in maria_chk -dvv, recovery not yet perfect ! ...@@ -282,6 +284,7 @@ Differences in maria_chk -dvv, recovery not yet perfect !
> 1 2 6 unique number NULL 0 8192 > 1 2 6 unique number NULL 0 8192
========DIFF END======= ========DIFF END=======
TEST WITH ma_test1 -s -M -T -c -N --debug=d:t:i:o,/tmp/ma_test1.trace --testflag=3 (commit at end) TEST WITH ma_test1 -s -M -T -c -N --debug=d:t:i:o,/tmp/ma_test1.trace --testflag=3 (commit at end)
Terminating after update
TEST WITH ma_test1 -s -M -T -c -N --debug=d:t:i:o,/tmp/ma_test1.trace --testflag=4 --test-undo=3 (additional aborted work) TEST WITH ma_test1 -s -M -T -c -N --debug=d:t:i:o,/tmp/ma_test1.trace --testflag=4 --test-undo=3 (additional aborted work)
terminating after deletes terminating after deletes
Dying on request without maria_commit()/maria_close() Dying on request without maria_commit()/maria_close()
...@@ -293,7 +296,7 @@ applying log ...@@ -293,7 +296,7 @@ applying log
Differences in maria_chk -dvv, recovery not yet perfect ! Differences in maria_chk -dvv, recovery not yet perfect !
========DIFF START======= ========DIFF START=======
7c7 7c7
< Checksum: 3536469224 < Checksum: 3697324514
--- ---
> Checksum: 0 > Checksum: 0
11c11 11c11
...@@ -319,7 +322,7 @@ Differences in maria_chk -dvv, recovery not yet perfect ! ...@@ -319,7 +322,7 @@ Differences in maria_chk -dvv, recovery not yet perfect !
11c11 11c11
< Datafile length: 49152 Keyfile length: 16384 < Datafile length: 49152 Keyfile length: 16384
--- ---
> Datafile length: 57344 Keyfile length: 8192 > Datafile length: 49152 Keyfile length: 8192
18c18 18c18
< 1 2 6 unique varchar BLOB NULL 0 8192 8192 < 1 2 6 unique varchar BLOB NULL 0 8192 8192
--- ---
...@@ -336,7 +339,7 @@ Differences in maria_chk -dvv, recovery not yet perfect ! ...@@ -336,7 +339,7 @@ Differences in maria_chk -dvv, recovery not yet perfect !
11c11 11c11
< Datafile length: 49152 Keyfile length: 16384 < Datafile length: 49152 Keyfile length: 16384
--- ---
> Datafile length: 57344 Keyfile length: 8192 > Datafile length: 49152 Keyfile length: 8192
18c18 18c18
< 1 2 6 unique varchar BLOB NULL 0 8192 8192 < 1 2 6 unique varchar BLOB NULL 0 8192 8192
--- ---
...@@ -353,13 +356,14 @@ Differences in maria_chk -dvv, recovery not yet perfect ! ...@@ -353,13 +356,14 @@ Differences in maria_chk -dvv, recovery not yet perfect !
11c11 11c11
< Datafile length: 49152 Keyfile length: 16384 < Datafile length: 49152 Keyfile length: 16384
--- ---
> Datafile length: 57344 Keyfile length: 8192 > Datafile length: 49152 Keyfile length: 8192
18c18 18c18
< 1 2 6 unique varchar BLOB NULL 0 8192 8192 < 1 2 6 unique varchar BLOB NULL 0 8192 8192
--- ---
> 1 2 6 unique varchar BLOB NULL 0 8192 > 1 2 6 unique varchar BLOB NULL 0 8192
========DIFF END======= ========DIFF END=======
TEST WITH ma_test1 -s -M -T -c -N --debug=d:t:i:o,/tmp/ma_test1.trace -b --testflag=3 (commit at end) TEST WITH ma_test1 -s -M -T -c -N --debug=d:t:i:o,/tmp/ma_test1.trace -b --testflag=3 (commit at end)
Terminating after update
TEST WITH ma_test1 -s -M -T -c -N --debug=d:t:i:o,/tmp/ma_test1.trace -b --testflag=4 --test-undo=1 (additional aborted work) TEST WITH ma_test1 -s -M -T -c -N --debug=d:t:i:o,/tmp/ma_test1.trace -b --testflag=4 --test-undo=1 (additional aborted work)
terminating after deletes terminating after deletes
Dying on request without maria_commit()/maria_close() Dying on request without maria_commit()/maria_close()
...@@ -371,13 +375,13 @@ applying log ...@@ -371,13 +375,13 @@ applying log
Differences in maria_chk -dvv, recovery not yet perfect ! Differences in maria_chk -dvv, recovery not yet perfect !
========DIFF START======= ========DIFF START=======
7c7 7c7
< Checksum: 1984748106 < Checksum: 4024695312
--- ---
> Checksum: 0 > Checksum: 0
11c11 11c11
< Datafile length: 57344 Keyfile length: 16384 < Datafile length: 49152 Keyfile length: 16384
--- ---
> Datafile length: 57344 Keyfile length: 8192 > Datafile length: 49152 Keyfile length: 8192
18c18 18c18
< 1 2 6 unique varchar BLOB NULL 0 8192 8192 < 1 2 6 unique varchar BLOB NULL 0 8192 8192
--- ---
...@@ -397,7 +401,7 @@ Differences in maria_chk -dvv, recovery not yet perfect ! ...@@ -397,7 +401,7 @@ Differences in maria_chk -dvv, recovery not yet perfect !
11c11 11c11
< Datafile length: 49152 Keyfile length: 16384 < Datafile length: 49152 Keyfile length: 16384
--- ---
> Datafile length: 57344 Keyfile length: 8192 > Datafile length: 49152 Keyfile length: 8192
18c18 18c18
< 1 2 6 unique varchar BLOB NULL 0 8192 8192 < 1 2 6 unique varchar BLOB NULL 0 8192 8192
--- ---
...@@ -414,7 +418,7 @@ Differences in maria_chk -dvv, recovery not yet perfect ! ...@@ -414,7 +418,7 @@ Differences in maria_chk -dvv, recovery not yet perfect !
11c11 11c11
< Datafile length: 49152 Keyfile length: 16384 < Datafile length: 49152 Keyfile length: 16384
--- ---
> Datafile length: 57344 Keyfile length: 8192 > Datafile length: 49152 Keyfile length: 8192
18c18 18c18
< 1 2 6 unique varchar BLOB NULL 0 8192 8192 < 1 2 6 unique varchar BLOB NULL 0 8192 8192
--- ---
...@@ -431,13 +435,14 @@ Differences in maria_chk -dvv, recovery not yet perfect ! ...@@ -431,13 +435,14 @@ Differences in maria_chk -dvv, recovery not yet perfect !
11c11 11c11
< Datafile length: 49152 Keyfile length: 16384 < Datafile length: 49152 Keyfile length: 16384
--- ---
> Datafile length: 57344 Keyfile length: 8192 > Datafile length: 49152 Keyfile length: 8192
18c18 18c18
< 1 2 6 unique varchar BLOB NULL 0 8192 8192 < 1 2 6 unique varchar BLOB NULL 0 8192 8192
--- ---
> 1 2 6 unique varchar BLOB NULL 0 8192 > 1 2 6 unique varchar BLOB NULL 0 8192
========DIFF END======= ========DIFF END=======
TEST WITH ma_test1 -s -M -T -c -N --debug=d:t:i:o,/tmp/ma_test1.trace -b --testflag=3 (commit at end) TEST WITH ma_test1 -s -M -T -c -N --debug=d:t:i:o,/tmp/ma_test1.trace -b --testflag=3 (commit at end)
Terminating after update
TEST WITH ma_test1 -s -M -T -c -N --debug=d:t:i:o,/tmp/ma_test1.trace -b --testflag=4 --test-undo=2 (additional aborted work) TEST WITH ma_test1 -s -M -T -c -N --debug=d:t:i:o,/tmp/ma_test1.trace -b --testflag=4 --test-undo=2 (additional aborted work)
terminating after deletes terminating after deletes
Dying on request without maria_commit()/maria_close() Dying on request without maria_commit()/maria_close()
...@@ -449,13 +454,13 @@ applying log ...@@ -449,13 +454,13 @@ applying log
Differences in maria_chk -dvv, recovery not yet perfect ! Differences in maria_chk -dvv, recovery not yet perfect !
========DIFF START======= ========DIFF START=======
7c7 7c7
< Checksum: 1984748106 < Checksum: 4024695312
--- ---
> Checksum: 0 > Checksum: 0
11c11 11c11
< Datafile length: 57344 Keyfile length: 16384 < Datafile length: 49152 Keyfile length: 16384
--- ---
> Datafile length: 57344 Keyfile length: 8192 > Datafile length: 49152 Keyfile length: 8192
18c18 18c18
< 1 2 6 unique varchar BLOB NULL 0 8192 8192 < 1 2 6 unique varchar BLOB NULL 0 8192 8192
--- ---
...@@ -516,6 +521,7 @@ Differences in maria_chk -dvv, recovery not yet perfect ! ...@@ -516,6 +521,7 @@ Differences in maria_chk -dvv, recovery not yet perfect !
> 1 2 6 unique varchar BLOB NULL 0 8192 > 1 2 6 unique varchar BLOB NULL 0 8192
========DIFF END======= ========DIFF END=======
TEST WITH ma_test1 -s -M -T -c -N --debug=d:t:i:o,/tmp/ma_test1.trace -b --testflag=3 (commit at end) TEST WITH ma_test1 -s -M -T -c -N --debug=d:t:i:o,/tmp/ma_test1.trace -b --testflag=3 (commit at end)
Terminating after update
TEST WITH ma_test1 -s -M -T -c -N --debug=d:t:i:o,/tmp/ma_test1.trace -b --testflag=4 --test-undo=3 (additional aborted work) TEST WITH ma_test1 -s -M -T -c -N --debug=d:t:i:o,/tmp/ma_test1.trace -b --testflag=4 --test-undo=3 (additional aborted work)
terminating after deletes terminating after deletes
Dying on request without maria_commit()/maria_close() Dying on request without maria_commit()/maria_close()
...@@ -527,13 +533,13 @@ applying log ...@@ -527,13 +533,13 @@ applying log
Differences in maria_chk -dvv, recovery not yet perfect ! Differences in maria_chk -dvv, recovery not yet perfect !
========DIFF START======= ========DIFF START=======
7c7 7c7
< Checksum: 1984748106 < Checksum: 4024695312
--- ---
> Checksum: 0 > Checksum: 0
11c11 11c11
< Datafile length: 57344 Keyfile length: 16384 < Datafile length: 49152 Keyfile length: 16384
--- ---
> Datafile length: 57344 Keyfile length: 8192 > Datafile length: 49152 Keyfile length: 8192
18c18 18c18
< 1 2 6 unique varchar BLOB NULL 0 8192 8192 < 1 2 6 unique varchar BLOB NULL 0 8192 8192
--- ---
......
...@@ -252,7 +252,8 @@ int table2myisam(TABLE *table_arg, MI_KEYDEF **keydef_out, ...@@ -252,7 +252,8 @@ int table2myisam(TABLE *table_arg, MI_KEYDEF **keydef_out,
DBUG_PRINT("loop", ("found: 0x%lx recpos: %d minpos: %d length: %d", DBUG_PRINT("loop", ("found: 0x%lx recpos: %d minpos: %d length: %d",
(long) found, recpos, minpos, length)); (long) found, recpos, minpos, length));
if (recpos != minpos) if (recpos != minpos)
{ // Reserved space (Null bits?) {
/* reserve space for null bits */
bzero((char*) recinfo_pos, sizeof(*recinfo_pos)); bzero((char*) recinfo_pos, sizeof(*recinfo_pos));
recinfo_pos->type= (int) FIELD_NORMAL; recinfo_pos->type= (int) FIELD_NORMAL;
recinfo_pos++->length= (uint16) (minpos - recpos); recinfo_pos++->length= (uint16) (minpos - recpos);
......
...@@ -79,6 +79,8 @@ static int run_test(const char *filename) ...@@ -79,6 +79,8 @@ static int run_test(const char *filename)
recinfo[2].length= (extra_field == FIELD_BLOB ? 4 + portable_sizeof_char_ptr : 24); recinfo[2].length= (extra_field == FIELD_BLOB ? 4 + portable_sizeof_char_ptr : 24);
if (extra_field == FIELD_VARCHAR) if (extra_field == FIELD_VARCHAR)
recinfo[2].length+= HA_VARCHAR_PACKLENGTH(recinfo[2].length); recinfo[2].length+= HA_VARCHAR_PACKLENGTH(recinfo[2].length);
recinfo[1].null_bit= null_fields ? 2 : 0;
if (opt_unique) if (opt_unique)
{ {
recinfo[3].type=FIELD_CHECK; recinfo[3].type=FIELD_CHECK;
...@@ -258,7 +260,8 @@ static int run_test(const char *filename) ...@@ -258,7 +260,8 @@ static int run_test(const char *filename)
continue; continue;
create_key(key,j); create_key(key,j);
my_errno=0; my_errno=0;
if ((error = mi_rkey(file,read_record,0,key,0,HA_READ_KEY_EXACT))) if ((error = mi_rkey(file,read_record,0,key,HA_WHOLE_KEY,
HA_READ_KEY_EXACT)))
{ {
if (verbose || (flags[j] >= 1 || if (verbose || (flags[j] >= 1 ||
(error && my_errno != HA_ERR_KEY_NOT_FOUND))) (error && my_errno != HA_ERR_KEY_NOT_FOUND)))
...@@ -285,7 +288,7 @@ static int run_test(const char *filename) ...@@ -285,7 +288,7 @@ static int run_test(const char *filename)
{ {
create_key(key,i); create_key(key,i);
my_errno=0; my_errno=0;
error=mi_rkey(file,read_record,0,key,0,HA_READ_KEY_EXACT); error=mi_rkey(file,read_record,0,key,HA_WHOLE_KEY,HA_READ_KEY_EXACT);
if (verbose || if (verbose ||
(error == 0 && flags[i] == 0 && unique_key) || (error == 0 && flags[i] == 0 && unique_key) ||
(error && (flags[i] != 0 || my_errno != HA_ERR_KEY_NOT_FOUND))) (error && (flags[i] != 0 || my_errno != HA_ERR_KEY_NOT_FOUND)))
......
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