From e4ed7666b4f496698e6d576c440b44ad48ab7d2c Mon Sep 17 00:00:00 2001 From: marko <> Date: Fri, 21 Sep 2007 14:33:49 +0000 Subject: [PATCH] branches/zip: row_merge_read_clustered_index(): After writing out the merge buffer, write the next record to the beginning of the emptied buffer. This fixes one of the bugs mentioned in r1872. --- row/row0merge.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/row/row0merge.c b/row/row0merge.c index d1448ebd1ea..d37cac760bf 100644 --- a/row/row0merge.c +++ b/row/row0merge.c @@ -1119,6 +1119,8 @@ row_merge_read_clustered_index( continue; } + /* The buffer must be sufficiently large + to hold at least one record. */ ut_ad(buf->n_tuples || !has_next); /* We have enough data tuples to form a block. @@ -1143,6 +1145,16 @@ row_merge_read_clustered_index( UNIV_MEM_INVALID(block[0], sizeof block[0]); merge_buf[i] = row_merge_buf_empty(buf); + + /* Try writing the record again, now that + the buffer has been written out and emptied. */ + + if (UNIV_UNLIKELY + (row && !row_merge_buf_add(buf, row, ext))) { + /* An empty buffer should have enough + room for at least one record. */ + ut_error; + } } mem_heap_empty(row_heap);