summaryrefslogtreecommitdiff
path: root/innobase
diff options
context:
space:
mode:
Diffstat (limited to 'innobase')
-rw-r--r--innobase/buf/buf0buf.c3
-rw-r--r--innobase/dict/dict0crea.c5
-rw-r--r--innobase/include/rem0rec.ic14
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++) {