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 |