summaryrefslogtreecommitdiff
path: root/innobase/page
diff options
context:
space:
mode:
authorunknown <heikki@donna.mysql.fi>2001-06-03 22:58:03 +0300
committerunknown <heikki@donna.mysql.fi>2001-06-03 22:58:03 +0300
commit9d4272bbac3678fbd8594027dd6ad62e69d065f3 (patch)
treece963973f9fcd0dfa6b854cc66c3c0d53fc93ea0 /innobase/page
parent5ec76be436655eefc2a6403b21606fad914ac814 (diff)
downloadmariadb-git-9d4272bbac3678fbd8594027dd6ad62e69d065f3.tar.gz
manual.texi website address change
row0sel.c CHECK TABLE now also for InnoDB, a join speed optimization trx0trx.c CHECK TABLE now also for InnoDB, a join speed optimization rem0cmp.c CHECK TABLE now also for InnoDB, a join speed optimization row0mysql.c CHECK TABLE now also for InnoDB, a join speed optimization page0page.c CHECK TABLE now also for InnoDB, a join speed optimization row0mysql.h CHECK TABLE now also for InnoDB, a join speed optimization trx0trx.h CHECK TABLE now also for InnoDB, a join speed optimization btr0btr.h CHECK TABLE now also for InnoDB, a join speed optimization btr0cur.h CHECK TABLE now also for InnoDB, a join speed optimization btr0pcur.h CHECK TABLE now also for InnoDB, a join speed optimization btr0pcur.ic CHECK TABLE now also for InnoDB, a join speed optimization btr0btr.c CHECK TABLE now also for InnoDB, a join speed optimization btr0cur.c CHECK TABLE now also for InnoDB, a join speed optimization btr0sea.c CHECK TABLE now also for InnoDB, a join speed optimization innodb.result CHECK TABLE now also for InnoDB, a join speed optimization ha_innobase.cc CHECK TABLE now also for InnoDB, a join speed optimization ha_innobase.h CHECK TABLE now also for InnoDB, a join speed optimization sql/ha_innobase.cc: CHECK TABLE now also for InnoDB, a join speed optimization sql/ha_innobase.h: CHECK TABLE now also for InnoDB, a join speed optimization mysql-test/r/innodb.result: CHECK TABLE now also for InnoDB, a join speed optimization innobase/btr/btr0btr.c: CHECK TABLE now also for InnoDB, a join speed optimization innobase/btr/btr0cur.c: CHECK TABLE now also for InnoDB, a join speed optimization innobase/btr/btr0sea.c: CHECK TABLE now also for InnoDB, a join speed optimization innobase/include/btr0btr.h: CHECK TABLE now also for InnoDB, a join speed optimization innobase/include/btr0cur.h: CHECK TABLE now also for InnoDB, a join speed optimization innobase/include/btr0pcur.h: CHECK TABLE now also for InnoDB, a join speed optimization innobase/include/btr0pcur.ic: CHECK TABLE now also for InnoDB, a join speed optimization innobase/include/row0mysql.h: CHECK TABLE now also for InnoDB, a join speed optimization innobase/include/trx0trx.h: CHECK TABLE now also for InnoDB, a join speed optimization innobase/page/page0page.c: CHECK TABLE now also for InnoDB, a join speed optimization innobase/rem/rem0cmp.c: CHECK TABLE now also for InnoDB, a join speed optimization innobase/row/row0mysql.c: CHECK TABLE now also for InnoDB, a join speed optimization innobase/row/row0sel.c: CHECK TABLE now also for InnoDB, a join speed optimization innobase/trx/trx0trx.c: CHECK TABLE now also for InnoDB, a join speed optimization Docs/manual.texi: website address change
Diffstat (limited to 'innobase/page')
-rw-r--r--innobase/page/page0page.c142
1 files changed, 117 insertions, 25 deletions
diff --git a/innobase/page/page0page.c b/innobase/page/page0page.c
index 7986684fd07..511191ecd89 100644
--- a/innobase/page/page0page.c
+++ b/innobase/page/page0page.c
@@ -1199,8 +1199,16 @@ page_rec_validate(
n_owned = rec_get_n_owned(rec);
heap_no = rec_get_heap_no(rec);
- ut_a(n_owned <= PAGE_DIR_SLOT_MAX_N_OWNED);
- ut_a(heap_no < page_header_get_field(page, PAGE_N_HEAP));
+ if (!(n_owned <= PAGE_DIR_SLOT_MAX_N_OWNED)) {
+ fprintf(stderr, "Dir slot n owned too big %lu\n", n_owned);
+ return(FALSE);
+ }
+
+ if (!(heap_no < page_header_get_field(page, PAGE_N_HEAP))) {
+ fprintf(stderr, "Heap no too big %lu %lu\n", heap_no,
+ page_header_get_field(page, PAGE_N_HEAP));
+ return(FALSE);
+ }
return(TRUE);
}
@@ -1216,20 +1224,21 @@ page_validate(
dict_index_t* index) /* in: data dictionary index containing
the page record type definition */
{
+ page_dir_slot_t* slot;
mem_heap_t* heap;
+ page_cur_t cur;
byte* buf;
ulint i;
ulint count;
ulint own_count;
ulint slot_no;
ulint data_size;
- page_cur_t cur;
rec_t* rec;
rec_t* old_rec = NULL;
- page_dir_slot_t* slot;
ulint offs;
ulint n_slots;
-
+ ibool ret = FALSE;
+
heap = mem_heap_create(UNIV_PAGE_SIZE);
/* The following buffer is used to check that the
@@ -1244,8 +1253,16 @@ page_validate(
overlap. */
n_slots = page_dir_get_n_slots(page);
- ut_ad(page_header_get_ptr(page, PAGE_HEAP_TOP) <=
- page_dir_get_nth_slot(page, n_slots - 1));
+
+ if (!(page_header_get_ptr(page, PAGE_HEAP_TOP) <=
+ page_dir_get_nth_slot(page, n_slots - 1))) {
+ fprintf(stderr,
+ "Record heap and dir overlap on a page in index %s, %lu, %lu\n",
+ index->name, page_header_get_ptr(page, PAGE_HEAP_TOP),
+ page_dir_get_nth_slot(page, n_slots - 1));
+
+ goto func_exit;
+ }
/* Validate the record list in a loop checking also that
it is consistent with the directory. */
@@ -1259,11 +1276,20 @@ page_validate(
for (;;) {
rec = (&cur)->rec;
- page_rec_validate(rec);
+
+ if (!page_rec_validate(rec)) {
+ goto func_exit;
+ }
/* Check that the records are in the ascending order */
if ((count >= 2) && (!page_cur_is_after_last(&cur))) {
- ut_a(1 == cmp_rec_rec(rec, old_rec, index));
+ if (!(1 == cmp_rec_rec(rec, old_rec, index))) {
+ fprintf(stderr,
+ "Records in wrong order in index %s\n",
+ index->name);
+
+ goto func_exit;
+ }
}
if ((rec != page_get_supremum_rec(page))
@@ -1275,16 +1301,38 @@ page_validate(
offs = rec_get_start(rec) - page;
for (i = 0; i < rec_get_size(rec); i++) {
- ut_a(buf[offs + i] == 0); /* No other record may
- overlap this */
+ if (!buf[offs + i] == 0) {
+ /* No other record may overlap this */
+
+ fprintf(stderr,
+ "Record overlaps another in index %s \n",
+ index->name);
+
+ goto func_exit;
+ }
+
buf[offs + i] = 1;
}
if (rec_get_n_owned(rec) != 0) {
/* This is a record pointed to by a dir slot */
- ut_a(rec_get_n_owned(rec) == own_count);
+ if (rec_get_n_owned(rec) != own_count) {
+ fprintf(stderr,
+ "Wrong owned count %lu, %lu, in index %s\n",
+ rec_get_n_owned(rec), own_count,
+ index->name);
- ut_a(page_dir_slot_get_rec(slot) == rec);
+ goto func_exit;
+ }
+
+ if (page_dir_slot_get_rec(slot) != rec) {
+ fprintf(stderr,
+ "Dir slot does not point to right rec in %s\n",
+ index->name);
+
+ goto func_exit;
+ }
+
page_dir_slot_check(slot);
own_count = 0;
@@ -1297,45 +1345,89 @@ page_validate(
if (page_cur_is_after_last(&cur)) {
break;
}
-
- count++;
+
+ if (rec_get_next_offs(rec) < FIL_PAGE_DATA
+ || rec_get_next_offs(rec) >= UNIV_PAGE_SIZE) {
+ fprintf(stderr,
+ "Next record offset wrong %lu in index %s\n",
+ rec_get_next_offs(rec), index->name);
+
+ goto func_exit;
+ }
+
+ count++;
page_cur_move_to_next(&cur);
own_count++;
old_rec = rec;
}
- ut_a(rec_get_n_owned(rec) != 0);
- ut_a(slot_no == n_slots - 1);
- ut_a(page_header_get_field(page, PAGE_N_RECS) + 2 == count + 1);
+ if (rec_get_n_owned(rec) == 0) {
+ fprintf(stderr, "n owned is zero in index %s\n", index->name);
+
+ goto func_exit;
+ }
+
+ if (slot_no != n_slots - 1) {
+ fprintf(stderr, "n slots wrong %lu %lu in index %s\n",
+ slot_no, n_slots - 1, index->name);
+ goto func_exit;
+ }
+
+ if (page_header_get_field(page, PAGE_N_RECS) + 2 != count + 1) {
+ fprintf(stderr, "n recs wrong %lu %lu in index %s\n",
+ page_header_get_field(page, PAGE_N_RECS) + 2, count + 1,
+ index->name);
+
+ goto func_exit;
+ }
if (data_size != page_get_data_size(page)) {
- printf("Summed data size %lu, returned by func %lu\n",
+ fprintf(stderr, "Summed data size %lu, returned by func %lu\n",
data_size, page_get_data_size(page));
- ut_error;
+ goto func_exit;
}
/* Check then the free list */
rec = page_header_get_ptr(page, PAGE_FREE);
while (rec != NULL) {
- page_rec_validate(rec);
+ if (!page_rec_validate(rec)) {
+
+ goto func_exit;
+ }
count++;
offs = rec_get_start(rec) - page;
for (i = 0; i < rec_get_size(rec); i++) {
- ut_a(buf[offs + i] == 0);
+
+ if (buf[offs + i] != 0) {
+ fprintf(stderr,
+ "Record overlaps another in free list, index %s \n",
+ index->name);
+
+ goto func_exit;
+ }
+
buf[offs + i] = 1;
}
rec = page_rec_get_next(rec);
}
- ut_a(page_header_get_field(page, PAGE_N_HEAP) == count + 1);
-
+ if (page_header_get_field(page, PAGE_N_HEAP) != count + 1) {
+
+ fprintf(stderr, "N heap is wrong %lu %lu in index %s\n",
+ page_header_get_field(page, PAGE_N_HEAP), count + 1,
+ index->name);
+ }
+
+ ret = TRUE;
+
+func_exit:
mem_heap_free(heap);
- return(TRUE);
+ return(ret);
}
/*******************************************************************