summaryrefslogtreecommitdiff
path: root/innobase/include/page0page.ic
diff options
context:
space:
mode:
authorunknown <marko@hundin.mysql.fi>2005-03-01 13:54:48 +0200
committerunknown <marko@hundin.mysql.fi>2005-03-01 13:54:48 +0200
commitb9b69440c10296bce67bbdaab2c4dbc0d9ba9243 (patch)
treee9beb9a3927aeb8ca7ad47994c4a5841947c0589 /innobase/include/page0page.ic
parent679088a2ae1353f14a970182fa64f58170e81b72 (diff)
downloadmariadb-git-b9b69440c10296bce67bbdaab2c4dbc0d9ba9243.tar.gz
InnoDB: Zero fill newly created pages and deleted records to
remove old junk and to improve compression ratio. InnoDB: Make implicit type conversions explicit. (Bug #8826) innobase/btr/btr0cur.c: Add "offsets" parameter to page_cur_delete_rec() calls btr_cur_optimistic_delete(): Simplify the logic with a flag variable btr_cur_pessimistic_delete(): Compute "offsets" earlier innobase/include/page0cur.h: page_cur_delete_rec(): Add parameter "offsets" innobase/include/page0page.h: page_mem_free(): Replace parameter "index" with "offsets" innobase/include/page0page.ic: page_mem_free(): Replace parameter "index" with "offsets". Clear the data bytes of the freed record. (The "extra" bytes will be needed by free space management.) innobase/include/rem0rec.h: Remove unnecessary function rec_get_size() innobase/log/log0recv.c: Remove function rec_apply_log_recs_for_backup() unless #ifdef UNIV_HOTBACKUP. innobase/page/page0cur.c: Add parameter "offsets" to page_cur_delete_rec(). innobase/page/page0page.c: page_create(): Zero fill the data area. page_delete_rec_list_start(): Add parameter "offsets" to page_cur_delete_rec(). innobase/rem/rem0rec.c: Remove unnecessary function rec_get_size(). Fix compiler warnings about implicit type conversions. (Bug #8826) innobase/srv/srv0srv.c: Fix compiler warnings about implicit type conversions. (Bug #8826) innobase/sync/sync0sync.c: Fix compiler warnings about implicit type conversions. (Bug #8826)
Diffstat (limited to 'innobase/include/page0page.ic')
-rw-r--r--innobase/include/page0page.ic12
1 files changed, 10 insertions, 2 deletions
diff --git a/innobase/include/page0page.ic b/innobase/include/page0page.ic
index a63b5ca4238..e3e93e9f756 100644
--- a/innobase/include/page0page.ic
+++ b/innobase/include/page0page.ic
@@ -777,20 +777,28 @@ page_mem_free(
/*==========*/
page_t* page, /* in: index page */
rec_t* rec, /* in: pointer to the (origin of) record */
- dict_index_t* index) /* in: record descriptor */
+ const ulint* offsets)/* in: array returned by rec_get_offsets() */
{
rec_t* free;
ulint garbage;
+ ut_ad(rec_offs_validate(rec, NULL, offsets));
free = page_header_get_ptr(page, PAGE_FREE);
page_rec_set_next(rec, free);
page_header_set_ptr(page, PAGE_FREE, rec);
+ /* Clear the data bytes of the deleted record in order to improve
+ the compression ratio of the page and to make it easier to read
+ page dumps in corruption reports. The extra bytes of the record
+ cannot be cleared, because page_mem_alloc() needs them in order
+ to determine the size of the deleted record. */
+ memset(rec, 0, rec_offs_data_size(offsets));
+
garbage = page_header_get_field(page, PAGE_GARBAGE);
page_header_set_field(page, PAGE_GARBAGE,
- garbage + rec_get_size(rec, index));
+ garbage + rec_offs_size(offsets));
}
#ifdef UNIV_MATERIALIZE