Commit 72a8d29e authored by Monty's avatar Monty Committed by Vicențiu Ciorbaru

Fixed archive to work with record[1]

ha_archive::max_row_length() and ha_archive::pack_row()
didn't use record parameter properly. Especially testing
of null was wrong for record[1]
parent 4cd2a0eb
...@@ -897,18 +897,19 @@ int ha_archive::real_write_row(uchar *buf, azio_stream *writer) ...@@ -897,18 +897,19 @@ int ha_archive::real_write_row(uchar *buf, azio_stream *writer)
the bytes required for the length in the header. the bytes required for the length in the header.
*/ */
uint32 ha_archive::max_row_length(const uchar *buf) uint32 ha_archive::max_row_length(const uchar *record)
{ {
uint32 length= (uint32)(table->s->reclength + table->s->fields*2); uint32 length= (uint32)(table->s->reclength + table->s->fields*2);
length+= ARCHIVE_ROW_HEADER_SIZE; length+= ARCHIVE_ROW_HEADER_SIZE;
my_ptrdiff_t const rec_offset= record - table->record[0];
uint *ptr, *end; uint *ptr, *end;
for (ptr= table->s->blob_field, end=ptr + table->s->blob_fields ; for (ptr= table->s->blob_field, end=ptr + table->s->blob_fields ;
ptr != end ; ptr != end ;
ptr++) ptr++)
{ {
if (!table->field[*ptr]->is_null()) if (!table->field[*ptr]->is_null(rec_offset))
length += 2 + ((Field_blob*)table->field[*ptr])->get_length(); length += 2 + ((Field_blob*)table->field[*ptr])->get_length(rec_offset);
} }
return length; return length;
...@@ -918,10 +919,9 @@ uint32 ha_archive::max_row_length(const uchar *buf) ...@@ -918,10 +919,9 @@ uint32 ha_archive::max_row_length(const uchar *buf)
unsigned int ha_archive::pack_row(uchar *record, azio_stream *writer) unsigned int ha_archive::pack_row(uchar *record, azio_stream *writer)
{ {
uchar *ptr; uchar *ptr;
my_ptrdiff_t const rec_offset= record - table->record[0];
DBUG_ENTER("ha_archive::pack_row"); DBUG_ENTER("ha_archive::pack_row");
if (fix_rec_buff(max_row_length(record))) if (fix_rec_buff(max_row_length(record)))
DBUG_RETURN(HA_ERR_OUT_OF_MEM); /* purecov: inspected */ DBUG_RETURN(HA_ERR_OUT_OF_MEM); /* purecov: inspected */
...@@ -935,7 +935,7 @@ unsigned int ha_archive::pack_row(uchar *record, azio_stream *writer) ...@@ -935,7 +935,7 @@ unsigned int ha_archive::pack_row(uchar *record, azio_stream *writer)
for (Field **field=table->field ; *field ; field++) for (Field **field=table->field ; *field ; field++)
{ {
if (!((*field)->is_null())) if (!((*field)->is_null(rec_offset)))
ptr= (*field)->pack(ptr, record + (*field)->offset(record)); ptr= (*field)->pack(ptr, record + (*field)->offset(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