List:Internals« Previous MessageNext Message »
From:Marko Mäkelä Date:April 27 2005 9:28am
Subject:bk commit into 5.0 tree (marko:1.1864)
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of marko. When marko does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet
  1.1864 05/04/27 12:28:44 marko@stripped +8 -0
  Fix bugs found in previous optimizations.
  Make rec_get_deleted_flag() return zero/nonzero instead of FALSE/TRUE.

  innobase/row/row0vers.c
    1.17 05/04/27 12:28:35 marko@stripped +2 -2
    Note that rec_get_deleted_flag() returns zero/nonzero ulint
    instead of FALSE/TRUE ibool.

  innobase/row/row0sel.c
    1.91 05/04/27 12:28:35 marko@stripped +1 -1
    Make debug assertion stricter.

  innobase/rem/rem0rec.c
    1.18 05/04/27 12:28:35 marko@stripped +2 -7
    rec_init_offsets(): Fix bugs introduced in optimization.

  innobase/include/rem0rec.ic
    1.23 05/04/27 12:28:34 marko@stripped +9 -10
    rec_get_deleted_flag(), rec_set_deleted_flag(): Make the flag
    zero/nonzero in order to avoid FALSE/TRUE normalization in
    every rec_get_deleted_flag() call.

  innobase/include/rem0rec.h
    1.14 05/04/27 12:28:34 marko@stripped +3 -3
    rec_get_deleted_flag(), rec_set_deleted_flag(): Make the flag
    zero/nonzero in order to avoid FALSE/TRUE normalization in
    every rec_get_deleted_flag() call.

  innobase/include/page0page.ic
    1.13 05/04/27 12:28:34 marko@stripped +1 -1
    Move debug assertion to proper place.

  innobase/btr/btr0cur.c
    1.48 05/04/27 12:28:34 marko@stripped +13 -9
    Add debug assertions about page_rec_is_comp().
    Add UNIV_LIKELY and UNIV_UNLIKELY hints.
    Note that rec_get_deleted_flag() returns zero/nonzero ulint
    instead of FALSE/TRUE ibool.

  innobase/btr/btr0btr.c
    1.42 05/04/27 12:28:34 marko@stripped +6 -3
    btr_page_get_sure_split_rec(): Fix bug caused by optimization
    (dereferencing null pointer in page_rec_is_supremum())
    btr_page_insert_fits(): Correct a debug assertion.

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	marko
# Host:	hundin.mysql.fi
# Root:	/home/marko/mysql-5.0

--- 1.41/innobase/btr/btr0btr.c	Mon Apr 25 10:14:25 2005
+++ 1.42/innobase/btr/btr0btr.c	Wed Apr 27 12:28:34 2005
@@ -1273,17 +1273,20 @@
                     	    	supremum record of page */
 
 				if (rec == ins_rec) {
-					next_rec = NULL;
+					rec = NULL;
+					goto func_exit;
 				} else if (rec == NULL) {
 					next_rec = page_rec_get_next(ins_rec);
 				} else {
 					next_rec = page_rec_get_next(rec);
 				}
-				if (!page_rec_is_supremum(next_rec))) {
+				ut_ad(next_rec);
+				if (!page_rec_is_supremum(next_rec)) {
 					rec = next_rec;
 				}
                     	}
 
+		func_exit:
 			if (UNIV_LIKELY_NULL(heap)) {
 				mem_heap_free(heap);
 			}
@@ -1323,7 +1326,7 @@
 
 	ut_ad(!split_rec == !offsets);
 	ut_ad(!offsets
-		|| page_is_comp(page) == !!rec_offs_comp(offsets));
+		|| !page_is_comp(page) == !rec_offs_comp(offsets));
 	ut_ad(!offsets
 		|| rec_offs_validate(split_rec, cursor->index, offsets));
 

--- 1.47/innobase/btr/btr0cur.c	Mon Apr 25 10:14:25 2005
+++ 1.48/innobase/btr/btr0cur.c	Wed Apr 27 12:28:34 2005
@@ -1426,7 +1426,7 @@
 	rec_t*		rec;
 	dulint		roll_ptr	= ut_dulint_zero;
 	trx_t*		trx;
-	ibool		was_delete_marked;
+	ulint		was_delete_marked;
 	mem_heap_t*	heap		= NULL;
 	ulint		offsets_[REC_OFFS_NORMAL_SIZE];
 	ulint*		offsets		= offsets_;
@@ -1434,6 +1434,7 @@
 
 	rec = btr_cur_get_rec(cursor);
 	index = cursor->index;
+	ut_ad(!!page_rec_is_comp(rec) == index->table->comp);
 	trx = thr_get_trx(thr);
 	offsets = rec_get_offsets(rec, index, offsets, ULINT_UNDEFINED, &heap);
 
@@ -1547,6 +1548,7 @@
 	page = btr_cur_get_page(cursor);
 	rec = btr_cur_get_rec(cursor);
 	index = cursor->index;
+	ut_ad(!!page_rec_is_comp(rec) == index->table->comp);
 	
 	heap = mem_heap_create(1024);
 	offsets = rec_get_offsets(rec, index, NULL, ULINT_UNDEFINED, &heap);
@@ -1596,8 +1598,8 @@
 	old_rec_size = rec_offs_size(offsets);
 	new_rec_size = rec_get_converted_size(index, new_entry);
 	
-	if (new_rec_size >=
-			page_get_free_space_of_empty(page_is_comp(page)) / 2) {
+	if (UNIV_UNLIKELY(new_rec_size >= page_get_free_space_of_empty(
+				page_is_comp(page)) / 2)) {
 
 		mem_heap_free(heap);		
 
@@ -1607,8 +1609,9 @@
 	max_size = old_rec_size
 			+ page_get_max_insert_size_after_reorganize(page, 1);
 
-	if (page_get_data_size(page) - old_rec_size + new_rec_size
-					< BTR_CUR_PAGE_COMPRESS_LIMIT) {
+	if (UNIV_UNLIKELY(page_get_data_size(page)
+					- old_rec_size + new_rec_size
+					< BTR_CUR_PAGE_COMPRESS_LIMIT)) {
 
 		/* The page would become too empty */
 
@@ -2034,14 +2037,14 @@
 	page_t*		page)	/* in: page or NULL */
 {
 	ulint	flags;
-	ibool	val;
+	ulint	val;
 	ulint	pos;
 	dulint	trx_id;
 	dulint	roll_ptr;
 	ulint	offset;
 	rec_t*	rec;
 
-	ut_ad(!!page_is_comp(page) == index->table->comp);
+	ut_ad(!page || !!page_is_comp(page) == index->table->comp);
 
 	if (end_ptr < ptr + 2) {
 
@@ -2127,6 +2130,7 @@
 
 	rec = btr_cur_get_rec(cursor);
 	index = cursor->index;
+	ut_ad(!!page_rec_is_comp(rec) == index->table->comp);
 	offsets = rec_get_offsets(rec, index, offsets, ULINT_UNDEFINED, &heap);
 
 	if (btr_cur_print_record_ops && thr) {
@@ -2135,7 +2139,7 @@
 	}
 
 	ut_ad(index->type & DICT_CLUSTERED);
-	ut_ad(rec_get_deleted_flag(rec, index->table->comp) == FALSE);
+	ut_ad(!rec_get_deleted_flag(rec, rec_offs_comp(offsets)));
 
 	err = lock_clust_rec_modify_check_and_lock(flags,
 						rec, index, offsets, thr);
@@ -2230,7 +2234,7 @@
 	byte*		end_ptr,/* in: buffer end */
 	page_t*		page)	/* in: page or NULL */
 {
-	ibool	val;
+	ulint	val;
 	ulint	offset;
 	rec_t*	rec;
 

--- 1.12/innobase/include/page0page.ic	Mon Apr 25 10:14:26 2005
+++ 1.13/innobase/include/page0page.ic	Wed Apr 27 12:28:34 2005
@@ -593,10 +593,10 @@
 
 	ut_ad(page_rec_check(rec));	
 	ut_ad(!page_rec_is_supremum(rec));
-	ut_ad(!page_rec_is_infimum(next));
 	page = ut_align_down(rec, UNIV_PAGE_SIZE);
 
 	if (next) {
+		ut_ad(!page_rec_is_infimum(next));
 		ut_a(page == ut_align_down(next, UNIV_PAGE_SIZE));
 		offs = (ulint) (next - page);
 	} else {

--- 1.13/innobase/include/rem0rec.h	Fri Apr 22 15:17:00 2005
+++ 1.14/innobase/include/rem0rec.h	Wed Apr 27 12:28:34 2005
@@ -162,10 +162,10 @@
 /**********************************************************
 The following function tells if record is delete marked. */
 UNIV_INLINE
-ibool
+ulint
 rec_get_deleted_flag(
 /*=================*/
-			/* out: TRUE if delete marked */
+			/* out: nonzero if delete marked */
 	rec_t*	rec,	/* in: physical record */
 	ulint	comp);	/* in: nonzero=compact page format */
 /**********************************************************
@@ -176,7 +176,7 @@
 /*=================*/
 	rec_t*	rec,	/* in: physical record */
 	ulint	comp,	/* in: nonzero=compact page format */
-	ibool	flag);	/* in: TRUE if delete marked */
+	ulint	flag);	/* in: nonzero if delete marked */
 /**********************************************************
 The following function tells if a new-style record is a node pointer. */
 UNIV_INLINE

--- 1.22/innobase/include/rem0rec.ic	Mon Apr 25 10:14:26 2005
+++ 1.23/innobase/include/rem0rec.ic	Wed Apr 27 12:28:34 2005
@@ -578,19 +578,21 @@
 /**********************************************************
 The following function tells if record is delete marked. */
 UNIV_INLINE
-ibool
+ulint
 rec_get_deleted_flag(
 /*=================*/
-			/* out: TRUE if delete marked */
+			/* out: nonzero if delete marked */
 	rec_t*	rec,	/* in: physical record */
 	ulint	comp)	/* in: nonzero=compact page format */
 {
 	if (UNIV_EXPECT(comp, REC_OFFS_COMPACT)) {
-		return(0 != rec_get_bit_field_1(rec, REC_NEW_INFO_BITS,
-				REC_INFO_DELETED_FLAG, REC_INFO_BITS_SHIFT));
+		return(UNIV_UNLIKELY(rec_get_bit_field_1(rec,
+				REC_NEW_INFO_BITS, REC_INFO_DELETED_FLAG,
+				REC_INFO_BITS_SHIFT)));
 	} else {
-		return(0 != rec_get_bit_field_1(rec, REC_OLD_INFO_BITS,
-				REC_INFO_DELETED_FLAG, REC_INFO_BITS_SHIFT));
+		return(UNIV_UNLIKELY(rec_get_bit_field_1(rec,
+				REC_OLD_INFO_BITS, REC_INFO_DELETED_FLAG,
+				REC_INFO_BITS_SHIFT)));
 	}
 }
 
@@ -602,12 +604,9 @@
 /*=================*/
 	rec_t*	rec,	/* in: physical record */
 	ulint	comp,	/* in: nonzero=compact page format */
-	ibool	flag)	/* in: TRUE if delete marked */
+	ulint	flag)	/* in: nonzero if delete marked */
 {
 	ulint	val;
-
-	ut_ad(TRUE == 1);
-	ut_ad(flag <= TRUE);
 
 	val = rec_get_info_bits(rec, comp);
 	

--- 1.17/innobase/rem/rem0rec.c	Fri Apr 22 15:21:12 2005
+++ 1.18/innobase/rem/rem0rec.c	Wed Apr 27 12:28:35 2005
@@ -218,20 +218,15 @@
 					We do not advance offs, and we set
 					the length to zero and enable the
 					SQL NULL flag in offsets[]. */
-					len = REC_OFFS_SQL_NULL;
+					len = offs | REC_OFFS_SQL_NULL;
 					goto resolved;
 				}
 				null_mask <<= 1;
-
-				ut_ad(!field->fixed_len);
-				goto variable_length;
 			}
 
 			if (UNIV_UNLIKELY(!field->fixed_len)) {
-				dtype_t*	type;
-			variable_length:
 				/* Variable-length field: read the length */
-				type = dict_col_get_type(
+				dtype_t*	type = dict_col_get_type(
 						dict_field_get_col(field));
 				len = *lens--;
 				if (UNIV_UNLIKELY(dtype_get_len(type) > 255)

--- 1.90/innobase/row/row0sel.c	Mon Apr 25 10:14:26 2005
+++ 1.91/innobase/row/row0sel.c	Wed Apr 27 12:28:35 2005
@@ -3459,7 +3459,7 @@
 	/* PHASE 4: Look for matching records in a loop */
 	
 	rec = btr_pcur_get_rec(pcur);
-	ut_ad(!page_rec_is_comp(rec) == !index->table->comp);
+	ut_ad(!!page_rec_is_comp(rec) == index->table->comp);
 #ifdef UNIV_SEARCH_DEBUG
 /*
 	fputs("Using ", stderr);

--- 1.16/innobase/row/row0vers.c	Mon Apr 25 10:14:27 2005
+++ 1.17/innobase/row/row0vers.c	Wed Apr 27 12:28:35 2005
@@ -57,8 +57,8 @@
 	dtuple_t*	entry	= NULL; /* assignment to eliminate compiler
 					warning */
 	trx_t*		trx;
-	ibool		vers_del;
-	ibool		rec_del;
+	ulint		vers_del;
+	ulint		rec_del;
 	ulint		err;
 	mtr_t		mtr;
 	ulint		comp;
Thread
bk commit into 5.0 tree (marko:1.1864)Marko Mäkelä27 Apr