diff options
author | unknown <heikki@donna.mysql.fi> | 2001-06-03 22:58:03 +0300 |
---|---|---|
committer | unknown <heikki@donna.mysql.fi> | 2001-06-03 22:58:03 +0300 |
commit | 9d4272bbac3678fbd8594027dd6ad62e69d065f3 (patch) | |
tree | ce963973f9fcd0dfa6b854cc66c3c0d53fc93ea0 /innobase/page | |
parent | 5ec76be436655eefc2a6403b21606fad914ac814 (diff) | |
download | mariadb-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.c | 142 |
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); } /******************************************************************* |