diff options
Diffstat (limited to 'innobase')
-rw-r--r-- | innobase/buf/buf0buf.c | 3 | ||||
-rw-r--r-- | innobase/dict/dict0crea.c | 5 | ||||
-rw-r--r-- | innobase/include/rem0rec.ic | 14 |
3 files changed, 20 insertions, 2 deletions
diff --git a/innobase/buf/buf0buf.c b/innobase/buf/buf0buf.c index b9dfa3df82a..adb61bfbb56 100644 --- a/innobase/buf/buf0buf.c +++ b/innobase/buf/buf0buf.c @@ -1158,6 +1158,9 @@ buf_page_init( block->n_hash_helps = 0; block->is_hashed = FALSE; + block->n_fields = 1; + block->n_bytes = 0; + block->side = BTR_SEARCH_LEFT_SIDE; block->file_page_was_freed = FALSE; } diff --git a/innobase/dict/dict0crea.c b/innobase/dict/dict0crea.c index 906683ca643..7b9255b4e27 100644 --- a/innobase/dict/dict0crea.c +++ b/innobase/dict/dict0crea.c @@ -1234,9 +1234,12 @@ loop: que_graph_free(graph); if (error != DB_SUCCESS) { + fprintf(stderr, + "InnoDB: foreign constraint creation failed;\n" + "InnoDB: internal error number %lu\n", error); + ut_a(error == DB_OUT_OF_FILE_SPACE); - fprintf(stderr, "InnoDB: foreign constraint creation failed\n"); fprintf(stderr, "InnoDB: tablespace is full\n"); trx_general_rollback_for_mysql(trx, FALSE, NULL); diff --git a/innobase/include/rem0rec.ic b/innobase/include/rem0rec.ic index 1e9ecb47e2e..6b96e3056fa 100644 --- a/innobase/include/rem0rec.ic +++ b/innobase/include/rem0rec.ic @@ -947,7 +947,8 @@ rec_get_converted_size( } /**************************************************************** -Folds a prefix of a physical record to a ulint. */ +Folds a prefix of a physical record to a ulint. Folds only existing fields, +that is, checks that we do not run out of the record. */ UNIV_INLINE ulint rec_fold( @@ -963,6 +964,7 @@ rec_fold( byte* data; ulint len; ulint fold; + ulint n_fields_rec; ut_ad(rec_validate(rec)); ut_ad(n_fields <= rec_get_n_fields(rec)); @@ -971,6 +973,16 @@ rec_fold( /* Only the page supremum and infimum records have 1 field: */ ut_ad(rec_get_n_fields(rec) > 1); + n_fields_rec = rec_get_n_fields(rec); + + if (n_fields > n_fields_rec) { + n_fields = n_fields_rec; + } + + if (n_fields == n_fields_rec) { + n_bytes = 0; + } + fold = ut_fold_dulint(tree_id); for (i = 0; i < n_fields; i++) { |