diff options
author | unknown <heikki@hundin.mysql.fi> | 2002-06-22 20:41:14 +0300 |
---|---|---|
committer | unknown <heikki@hundin.mysql.fi> | 2002-06-22 20:41:14 +0300 |
commit | 1081513a12851d432103eaabcb6533c84062196c (patch) | |
tree | cd94be28879d52101bd7438dc97dc04856d81739 /innobase/data | |
parent | b7b988b3c36fa7a1f0a284d6478bbccbe706c09f (diff) | |
download | mariadb-git-1081513a12851d432103eaabcb6533c84062196c.tar.gz |
Many files:
Merge 3.23.52
innobase/btr/btr0btr.c:
Merge 3.23.52
innobase/btr/btr0cur.c:
Merge 3.23.52
innobase/btr/btr0sea.c:
Merge 3.23.52
innobase/include/btr0btr.h:
Merge 3.23.52
innobase/include/btr0cur.h:
Merge 3.23.52
innobase/include/btr0sea.h:
Merge 3.23.52
innobase/include/buf0buf.h:
Merge 3.23.52
innobase/include/buf0rea.h:
Merge 3.23.52
innobase/include/data0data.h:
Merge 3.23.52
innobase/include/data0data.ic:
Merge 3.23.52
innobase/include/log0log.h:
Merge 3.23.52
innobase/include/log0log.ic:
Merge 3.23.52
innobase/include/os0file.h:
Merge 3.23.52
innobase/include/page0page.h:
Merge 3.23.52
innobase/include/page0page.ic:
Merge 3.23.52
innobase/include/row0mysql.h:
Merge 3.23.52
innobase/include/trx0roll.h:
Merge 3.23.52
innobase/include/trx0sys.h:
Merge 3.23.52
innobase/include/trx0trx.h:
Merge 3.23.52
innobase/include/ut0ut.h:
Merge 3.23.52
innobase/include/univ.i:
Merge 3.23.52
innobase/include/ut0ut.ic:
Merge 3.23.52
innobase/buf/buf0buf.c:
Merge 3.23.52
innobase/buf/buf0rea.c:
Merge 3.23.52
innobase/data/data0data.c:
Merge 3.23.52
innobase/dict/dict0crea.c:
Merge 3.23.52
innobase/dict/dict0dict.c:
Merge 3.23.52
innobase/dict/dict0load.c:
Merge 3.23.52
innobase/dict/dict0mem.c:
Merge 3.23.52
innobase/fsp/fsp0fsp.c:
Merge 3.23.52
innobase/ibuf/ibuf0ibuf.c:
Merge 3.23.52
innobase/lock/lock0lock.c:
Merge 3.23.52
innobase/log/log0log.c:
Merge 3.23.52
innobase/log/log0recv.c:
Merge 3.23.52
innobase/mtr/mtr0log.c:
Merge 3.23.52
innobase/mtr/mtr0mtr.c:
Merge 3.23.52
innobase/os/os0file.c:
Merge 3.23.52
innobase/page/page0cur.c:
Merge 3.23.52
innobase/page/page0page.c:
Merge 3.23.52
innobase/rem/rem0cmp.c:
Merge 3.23.52
innobase/row/row0ins.c:
Merge 3.23.52
innobase/row/row0mysql.c:
Merge 3.23.52
innobase/row/row0purge.c:
Merge 3.23.52
innobase/row/row0upd.c:
Merge 3.23.52
innobase/srv/srv0srv.c:
Merge 3.23.52
innobase/srv/srv0start.c:
Merge 3.23.52
innobase/trx/trx0roll.c:
Merge 3.23.52
innobase/trx/trx0sys.c:
Merge 3.23.52
innobase/trx/trx0trx.c:
Merge 3.23.52
innobase/trx/trx0undo.c:
Merge 3.23.52
innobase/ut/ut0mem.c:
Merge 3.23.52
innobase/ut/ut0ut.c:
Merge 3.23.52
Diffstat (limited to 'innobase/data')
-rw-r--r-- | innobase/data/data0data.c | 115 |
1 files changed, 113 insertions, 2 deletions
diff --git a/innobase/data/data0data.c b/innobase/data/data0data.c index 2254dcb6ae6..61a02f7efd0 100644 --- a/innobase/data/data0data.c +++ b/innobase/data/data0data.c @@ -64,6 +64,35 @@ dtuple_get_nth_field_noninline( return(dtuple_get_nth_field(tuple, n)); } +/************************************************************************* +Tests if dfield data length and content is equal to the given. */ + +ibool +dfield_data_is_binary_equal( +/*========================*/ + /* out: TRUE if equal */ + dfield_t* field, /* in: field */ + ulint len, /* in: data length or UNIV_SQL_NULL */ + byte* data) /* in: data */ +{ + if (len != field->len) { + + return(FALSE); + } + + if (len == UNIV_SQL_NULL) { + + return(TRUE); + } + + if (0 != ut_memcmp(field->data, data, len)) { + + return(FALSE); + } + + return(TRUE); +} + /**************************************************************** Returns TRUE if lengths of two dtuples are equal and respective data fields in them are equal when compared with collation in char fields (not as binary @@ -154,6 +183,69 @@ dtuple_set_n_fields( } /************************************************************** +Checks that a data field is typed. */ +static +ibool +dfield_check_typed_no_assert( +/*=========================*/ + /* out: TRUE if ok */ + dfield_t* field) /* in: data field */ +{ + if (dfield_get_type(field)->mtype > DATA_MYSQL + || dfield_get_type(field)->mtype < DATA_VARCHAR) { + + fprintf(stderr, +"InnoDB: Error: data field type %lu, len %lu\n", + dfield_get_type(field)->mtype, dfield_get_len(field)); + return(FALSE); + } + + return(TRUE); +} + +/************************************************************** +Checks that a data tuple is typed. */ + +ibool +dtuple_check_typed_no_assert( +/*=========================*/ + /* out: TRUE if ok */ + dtuple_t* tuple) /* in: tuple */ +{ + dfield_t* field; + ulint i; + char err_buf[1000]; + + if (dtuple_get_n_fields(tuple) > REC_MAX_N_FIELDS) { + fprintf(stderr, +"InnoDB: Error: index entry has %lu fields\n", + dtuple_get_n_fields(tuple)); + + dtuple_sprintf(err_buf, 900, tuple); + fprintf(stderr, +"InnoDB: Tuple contents: %s\n", err_buf); + + return(FALSE); + } + + for (i = 0; i < dtuple_get_n_fields(tuple); i++) { + + field = dtuple_get_nth_field(tuple, i); + + if (!dfield_check_typed_no_assert(field)) { + + dtuple_sprintf(err_buf, 900, tuple); + fprintf(stderr, +"InnoDB: Tuple contents: %s\n", err_buf); + + return(FALSE); + } + } + + return(TRUE); +} + +/************************************************************** Checks that a data field is typed. Asserts an error if not. */ ibool @@ -162,8 +254,15 @@ dfield_check_typed( /* out: TRUE if ok */ dfield_t* field) /* in: data field */ { - ut_a(dfield_get_type(field)->mtype <= DATA_MYSQL); - ut_a(dfield_get_type(field)->mtype >= DATA_VARCHAR); + if (dfield_get_type(field)->mtype > DATA_MYSQL + || dfield_get_type(field)->mtype < DATA_VARCHAR) { + + fprintf(stderr, +"InnoDB: Error: data field type %lu, len %lu\n", + dfield_get_type(field)->mtype, dfield_get_len(field)); + + ut_a(0); + } return(TRUE); } @@ -460,9 +559,21 @@ dtuple_convert_big_rec( ibool is_externally_stored; ulint i; ulint j; + char err_buf[1000]; + ut_a(dtuple_check_typed_no_assert(entry)); + size = rec_get_converted_size(entry); + if (size > 1000000000) { + fprintf(stderr, +"InnoDB: Warning: tuple size very big: %lu\n", size); + + dtuple_sprintf(err_buf, 900, entry); + fprintf(stderr, +"InnoDB: Tuple contents: %s\n", err_buf); + } + heap = mem_heap_create(size + dtuple_get_n_fields(entry) * sizeof(big_rec_field_t) + 1000); |