From db32810d02ca5cae3a5619d5008923a197425e84 Mon Sep 17 00:00:00 2001
From: unknown <marko@hundin.mysql.fi>
Date: Wed, 9 Mar 2005 22:04:55 +0200
Subject: InnoDB: Improve performance by about 10% by removing implicit
 memcpy() calls, by not initializing the offsets_[] arrays. InnoDB: Remove a
 Microsoft compiler warning in page0page.c.

innobase/btr/btr0btr.c:
  Only initialize the first element of offsets_[]
innobase/btr/btr0cur.c:
  Only initialize the first element of offsets_[]
innobase/btr/btr0sea.c:
  Only initialize the first element of offsets_[]
innobase/lock/lock0lock.c:
  Only initialize the first element of offsets_[]
innobase/page/page0cur.c:
  Only initialize the first element of offsets_[]
innobase/page/page0page.c:
  page_validate(): Silence a warning about unsigned/signed comparison.
  Other places: Only initialize the first element of offsets_[].
innobase/rem/rem0rec.c:
  Only initialize the first element of offsets_[]
innobase/row/row0ins.c:
  Only initialize the first element of offsets_[]
innobase/row/row0mysql.c:
  Only initialize the first element of offsets_[]
innobase/row/row0purge.c:
  Only initialize the first element of offsets_[]
innobase/row/row0row.c:
  Only initialize the first element of offsets_[]
innobase/row/row0sel.c:
  Only initialize the first element of offsets_[]
innobase/row/row0undo.c:
  Only initialize the first element of offsets_[]
innobase/row/row0upd.c:
  Only initialize the first element of offsets_[]
innobase/trx/trx0rec.c:
  Only initialize the first element of offsets_[]
---
 innobase/btr/btr0btr.c | 14 ++++++++------
 innobase/btr/btr0cur.c | 32 ++++++++++++++++++++++----------
 innobase/btr/btr0sea.c | 18 ++++++++++++------
 3 files changed, 42 insertions(+), 22 deletions(-)

(limited to 'innobase/btr')

diff --git a/innobase/btr/btr0btr.c b/innobase/btr/btr0btr.c
index 4fb930da50f..232d7f0f53b 100644
--- a/innobase/btr/btr0btr.c
+++ b/innobase/btr/btr0btr.c
@@ -567,8 +567,9 @@ btr_page_get_father_for_rec(
 	btr_cur_t	cursor;
 	rec_t*		node_ptr;
 	dict_index_t*	index;
-	ulint		offsets_[100] = { 100, };
+	ulint		offsets_[100];
 	ulint*		offsets	= offsets_;
+	*offsets_ = (sizeof offsets_) / sizeof *offsets_;
 
 	ut_ad(mtr_memo_contains(mtr, dict_tree_get_lock(tree),
 							MTR_MEMO_X_LOCK));
@@ -2098,7 +2099,8 @@ btr_compress(
 		btr_node_ptr_delete(tree, page, mtr);
 	} else {
 		mem_heap_t*	heap		= NULL;
-		ulint		offsets_[100]	= { 100, };
+		ulint		offsets_[100];
+		*offsets_ = (sizeof offsets_) / sizeof *offsets_;
 		/* Replace the address of the old child node (= page) with the 
 		address of the merge page to the right */
 
@@ -2387,9 +2389,9 @@ btr_print_tree(
 	mtr_t		mtr;
 	page_t*		root;
 	mem_heap_t*	heap	= NULL;
-	ulint		offsets_[100]
-				= { 100, };
+	ulint		offsets_[100];
 	ulint*		offsets	= offsets_;
+	*offsets_ = (sizeof offsets_) / sizeof *offsets_;
 
 	fputs("--------------------------\n"
 		"INDEX TREE PRINT\n", stderr);
@@ -2489,9 +2491,9 @@ btr_index_rec_validate(
 	ulint		i;
 	page_t*		page;
 	mem_heap_t*	heap	= NULL;
-	ulint		offsets_[100]
-				= { 100, };
+	ulint		offsets_[100];
 	ulint*		offsets	= offsets_;
+	*offsets_ = (sizeof offsets_) / sizeof *offsets_;
 
 	page = buf_frame_align(rec);
 	
diff --git a/innobase/btr/btr0cur.c b/innobase/btr/btr0cur.c
index 91ba47224ef..6279ac79d3a 100644
--- a/innobase/btr/btr0cur.c
+++ b/innobase/btr/btr0cur.c
@@ -275,8 +275,9 @@ btr_cur_search_to_nth_level(
 	btr_search_t*	info;
 #endif
 	mem_heap_t*	heap		= NULL;
-	ulint		offsets_[100]	= { 100, };
+	ulint		offsets_[100];
 	ulint*		offsets		= offsets_;
+	*offsets_ = (sizeof offsets_) / sizeof *offsets_;
 	/* Currently, PAGE_CUR_LE is the only search mode used for searches
 	ending to upper levels */
 
@@ -578,8 +579,9 @@ btr_cur_open_at_index_side(
 	ulint		estimate;
 	ulint           savepoint;
 	mem_heap_t*	heap		= NULL;
-	ulint		offsets_[100]	= { 100, };
+	ulint		offsets_[100];
 	ulint*		offsets		= offsets_;
+	*offsets_ = (sizeof offsets_) / sizeof *offsets_;
 
 	estimate = latch_mode & BTR_ESTIMATE;
 	latch_mode = latch_mode & ~BTR_ESTIMATE;
@@ -703,8 +705,9 @@ btr_cur_open_at_rnd_pos(
 	ulint		height;
 	rec_t*		node_ptr;
 	mem_heap_t*	heap		= NULL;
-	ulint		offsets_[100]	= { 100, };
+	ulint		offsets_[100];
 	ulint*		offsets		= offsets_;
+	*offsets_ = (sizeof offsets_) / sizeof *offsets_;
 
 	tree = index->tree;
 	
@@ -1252,7 +1255,9 @@ btr_cur_upd_lock_and_undo(
 
 	if (!(flags & BTR_NO_LOCKING_FLAG)) {
 		mem_heap_t*	heap		= NULL;
-		ulint		offsets_[100]	= { 100, };
+		ulint		offsets_[100];
+		*offsets_ = (sizeof offsets_) / sizeof *offsets_;
+
 		err = lock_clust_rec_modify_check_and_lock(flags, rec, index,
 			rec_get_offsets(rec, index, offsets_,
 				ULINT_UNDEFINED, &heap), thr);
@@ -1426,8 +1431,9 @@ btr_cur_update_in_place(
 	trx_t*		trx;
 	ibool		was_delete_marked;
 	mem_heap_t*	heap		= NULL;
-	ulint		offsets_[100]	= { 100, };
+	ulint		offsets_[100];
 	ulint*		offsets		= offsets_;
+	*offsets_ = (sizeof offsets_) / sizeof *offsets_;
 
 	rec = btr_cur_get_rec(cursor);
 	index = cursor->index;
@@ -2065,7 +2071,9 @@ btr_cur_parse_del_mark_set_clust_rec(
 	
 		if (!(flags & BTR_KEEP_SYS_FLAG)) {
 			mem_heap_t*	heap		= NULL;
-			ulint		offsets_[100]	= { 100, };
+			ulint		offsets_[100];
+			*offsets_ = (sizeof offsets_) / sizeof *offsets_;
+
 			row_upd_rec_sys_fields_in_recovery(rec,
 					rec_get_offsets(rec, index, offsets_,
 					ULINT_UNDEFINED, &heap),
@@ -2109,8 +2117,9 @@ btr_cur_del_mark_set_clust_rec(
 	rec_t*		rec;
 	trx_t*		trx;
 	mem_heap_t*	heap		= NULL;
-	ulint		offsets_[100]	= { 100, };
+	ulint		offsets_[100];
 	ulint*		offsets		= offsets_;
+	*offsets_ = (sizeof offsets_) / sizeof *offsets_;
 
 	rec = btr_cur_get_rec(cursor);
 	index = cursor->index;
@@ -2399,9 +2408,10 @@ btr_cur_optimistic_delete(
 	ulint		max_ins_size;
 	rec_t*		rec;
 	mem_heap_t*	heap		= NULL;
-	ulint		offsets_[100]	= { 100, };
+	ulint		offsets_[100];
 	ulint*		offsets		= offsets_;
 	ibool		no_compress_needed;
+	*offsets_ = (sizeof offsets_) / sizeof *offsets_;
 
 	ut_ad(mtr_memo_contains(mtr, buf_block_align(btr_cur_get_page(cursor)),
 							MTR_MEMO_PAGE_X_FIX));
@@ -2803,10 +2813,12 @@ btr_estimate_number_of_different_key_vals(
 	ulint		add_on;
 	mtr_t		mtr;
 	mem_heap_t*	heap		= NULL;
-	ulint		offsets1_[100]	= { 100, };
-	ulint		offsets2_[100]	= { 100, };
+	ulint		offsets1_[100];
+	ulint		offsets2_[100];
 	ulint*		offsets1	= offsets1_;
 	ulint*		offsets2	= offsets2_;
+	*offsets1_ = (sizeof offsets1_) / sizeof *offsets1_;
+	*offsets2_ = (sizeof offsets2_) / sizeof *offsets2_;
 
 	n_cols = dict_index_get_n_unique(index);
 
diff --git a/innobase/btr/btr0sea.c b/innobase/btr/btr0sea.c
index dc712f650e7..5f95937a2cb 100644
--- a/innobase/btr/btr0sea.c
+++ b/innobase/btr/btr0sea.c
@@ -420,7 +420,8 @@ btr_search_update_hash_ref(
 	    && (block->curr_n_bytes == info->n_bytes)
 	    && (block->curr_side == info->side)) {
 		mem_heap_t*	heap		= NULL;
-		ulint		offsets_[100]	= { 100, };
+		ulint		offsets_[100];
+		*offsets_ = (sizeof offsets_) / sizeof *offsets_;
 
 	    	rec = btr_cur_get_rec(cursor);
 
@@ -552,9 +553,10 @@ btr_search_check_guess(
 	ulint		bytes;
 	int		cmp;
 	mem_heap_t*	heap		= NULL;
-	ulint		offsets_[100]	= { 100, };
+	ulint		offsets_[100];
 	ulint*		offsets		= offsets_;
 	ibool		success		= FALSE;
+	*offsets_ = (sizeof offsets_) / sizeof *offsets_;
 
 	n_unique = dict_index_get_n_unique_in_tree(cursor->index);
 	
@@ -1098,8 +1100,9 @@ btr_search_build_page_hash_index(
 	rec_t**		recs;
 	ulint		i;
 	mem_heap_t*	heap		= NULL;
-	ulint		offsets_[100]	= { 100, };
+	ulint		offsets_[100];
 	ulint*		offsets		= offsets_;
+	*offsets_ = (sizeof offsets_) / sizeof *offsets_;
 
 	ut_ad(index);
 
@@ -1341,8 +1344,9 @@ btr_search_update_hash_on_delete(
 	ulint		fold;
 	dulint		tree_id;
 	ibool		found;
-	ulint		offsets_[100]	= { 100, };
+	ulint		offsets_[100];
 	mem_heap_t*	heap		= NULL;
+	*offsets_ = (sizeof offsets_) / sizeof *offsets_;
 
 	rec = btr_cur_get_rec(cursor);
 
@@ -1452,8 +1456,9 @@ btr_search_update_hash_on_insert(
 	ulint		side;
 	ibool		locked		= FALSE;
 	mem_heap_t*	heap		= NULL;
-	ulint		offsets_[100]	= { 100, };
+	ulint		offsets_[100];
 	ulint*		offsets		= offsets_;
+	*offsets_ = (sizeof offsets_) / sizeof *offsets_;
 
 	table = btr_search_sys->hash_index;
 
@@ -1591,8 +1596,9 @@ btr_search_validate(void)
 	ibool		ok		= TRUE;
 	ulint		i;
 	mem_heap_t*	heap		= NULL;
-	ulint		offsets_[100]	= { 100, };
+	ulint		offsets_[100];
 	ulint*		offsets		= offsets_;
+	*offsets_ = (sizeof offsets_) / sizeof *offsets_;
 	
 	rw_lock_x_lock(&btr_search_latch);
 
-- 
cgit v1.2.1