diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2019-12-13 10:08:57 +0200 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2019-12-13 10:08:57 +0200 |
commit | 3466b47b0d2f0aca0a2191574c593c7eaea0b0b8 (patch) | |
tree | 883e5c638ae861638582aba6e6534377e2564706 | |
parent | 0a20e5ab77f8a6532b41ea2518626397059ccf42 (diff) | |
parent | f0aa073f2bf3d8d85b3d028df89cdb4cdfc4002d (diff) | |
download | mariadb-git-3466b47b0d2f0aca0a2191574c593c7eaea0b0b8.tar.gz |
Merge 10.2 into 10.3
67 files changed, 834 insertions, 800 deletions
diff --git a/storage/innobase/btr/btr0btr.cc b/storage/innobase/btr/btr0btr.cc index 2f353c9e7e7..ed3b632b300 100644 --- a/storage/innobase/btr/btr0btr.cc +++ b/storage/innobase/btr/btr0btr.cc @@ -775,7 +775,7 @@ btr_node_ptr_set_child_page_no( rec_t* rec, /*!< in: node pointer record */ page_zip_des_t* page_zip,/*!< in/out: compressed page whose uncompressed part will be updated, or NULL */ - const ulint* offsets,/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets,/*!< in: array returned by rec_get_offsets() */ ulint page_no,/*!< in: child node address */ mtr_t* mtr) /*!< in: mtr */ { @@ -810,7 +810,7 @@ btr_node_ptr_get_child( /*===================*/ const rec_t* node_ptr,/*!< in: node pointer */ dict_index_t* index, /*!< in: index */ - const ulint* offsets,/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets,/*!< in: array returned by rec_get_offsets() */ mtr_t* mtr) /*!< in: mtr */ { ut_ad(rec_offs_validate(node_ptr, index, offsets)); @@ -829,10 +829,10 @@ Returns the upper level node pointer to a page. It is assumed that mtr holds an sx-latch on the tree. @return rec_get_offsets() of the node pointer record */ static -ulint* +offset_t* btr_page_get_father_node_ptr_func( /*==============================*/ - ulint* offsets,/*!< in: work area for the return value */ + offset_t* offsets,/*!< in: work area for the return value */ mem_heap_t* heap, /*!< in: memory heap to use */ btr_cur_t* cursor, /*!< in: cursor pointing to user record, out: cursor on node pointer record, @@ -936,10 +936,10 @@ Returns the upper level node pointer to a page. It is assumed that mtr holds an x-latch on the tree. @return rec_get_offsets() of the node pointer record */ static -ulint* +offset_t* btr_page_get_father_block( /*======================*/ - ulint* offsets,/*!< in: work area for the return value */ + offset_t* offsets,/*!< in: work area for the return value */ mem_heap_t* heap, /*!< in: memory heap to use */ dict_index_t* index, /*!< in: b-tree index */ buf_block_t* block, /*!< in: child page in the index */ @@ -1823,7 +1823,7 @@ btr_root_raise_and_insert( on the root page; when the function returns, the cursor is positioned on the predecessor of the inserted record */ - ulint** offsets,/*!< out: offsets on inserted record */ + offset_t** offsets,/*!< out: offsets on inserted record */ mem_heap_t** heap, /*!< in/out: pointer to memory heap, or NULL */ const dtuple_t* tuple, /*!< in: tuple to insert */ ulint n_ext, /*!< in: number of externally stored columns */ @@ -2156,7 +2156,7 @@ btr_page_get_split_rec( rec_t* next_rec; ulint n; mem_heap_t* heap; - ulint* offsets; + offset_t* offsets; page = btr_cur_get_page(cursor); @@ -2262,7 +2262,7 @@ btr_page_insert_fits( const rec_t* split_rec,/*!< in: suggestion for first record on upper half-page, or NULL if tuple to be inserted should be first */ - ulint** offsets,/*!< in: rec_get_offsets( + offset_t** offsets,/*!< in: rec_get_offsets( split_rec, cursor->index); out: garbage */ const dtuple_t* tuple, /*!< in: tuple to insert */ ulint n_ext, /*!< in: number of externally stored columns */ @@ -2362,8 +2362,8 @@ btr_insert_on_non_leaf_level_func( dberr_t err; rec_t* rec; mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; rec_offs_init(offsets_); rtr_info_t rtr_info; @@ -2471,7 +2471,7 @@ btr_attach_half_pages( if (direction == FSP_DOWN) { btr_cur_t cursor; - ulint* offsets; + offset_t* offsets; lower_page = buf_block_get_frame(new_block); lower_page_no = new_block->page.id.page_no(); @@ -2593,7 +2593,7 @@ btr_page_tuple_smaller( /*===================*/ btr_cur_t* cursor, /*!< in: b-tree cursor */ const dtuple_t* tuple, /*!< in: tuple to consider */ - ulint** offsets,/*!< in/out: temporary storage */ + offset_t** offsets,/*!< in/out: temporary storage */ ulint n_uniq, /*!< in: number of unique fields in the index page records */ mem_heap_t** heap) /*!< in/out: heap for offsets */ @@ -2633,7 +2633,7 @@ rec_t* btr_insert_into_right_sibling( ulint flags, btr_cur_t* cursor, - ulint** offsets, + offset_t** offsets, mem_heap_t* heap, const dtuple_t* tuple, ulint n_ext, @@ -2769,7 +2769,7 @@ btr_page_split_and_insert( btr_cur_t* cursor, /*!< in: cursor at which to insert; when the function returns, the cursor is positioned on the predecessor of the inserted record */ - ulint** offsets,/*!< out: offsets on inserted record */ + offset_t** offsets,/*!< out: offsets on inserted record */ mem_heap_t** heap, /*!< in/out: pointer to memory heap, or NULL */ const dtuple_t* tuple, /*!< in: tuple to insert */ ulint n_ext, /*!< in: number of externally stored columns */ @@ -3321,7 +3321,7 @@ btr_lift_page_up( { btr_cur_t cursor; - ulint* offsets = NULL; + offset_t* offsets = NULL; mem_heap_t* heap = mem_heap_create( sizeof(*offsets) * (REC_OFFS_HEADER_SIZE + 1 + 1 @@ -3518,7 +3518,7 @@ btr_compress( page_t* page; btr_cur_t father_cursor; mem_heap_t* heap; - ulint* offsets; + offset_t* offsets; ulint nth_rec = 0; /* remove bogus warning */ bool mbr_changed = false; #ifdef UNIV_DEBUG @@ -3661,7 +3661,7 @@ retry: if (is_left) { btr_cur_t cursor2; rtr_mbr_t new_mbr; - ulint* offsets2 = NULL; + offset_t* offsets2 = NULL; /* For rtree, we need to update father's mbr. */ if (dict_index_is_spatial(index)) { @@ -3857,7 +3857,7 @@ retry: /* For rtree, we need to update father's mbr. */ if (dict_index_is_spatial(index)) { - ulint* offsets2; + offset_t* offsets2; ulint rec_info; offsets2 = rec_get_offsets( @@ -4304,7 +4304,7 @@ btr_print_recursive( ulint width, /*!< in: print this many entries from start and end */ mem_heap_t** heap, /*!< in/out: heap for rec_get_offsets() */ - ulint** offsets,/*!< in/out: buffer for rec_get_offsets() */ + offset_t** offsets,/*!< in/out: buffer for rec_get_offsets() */ mtr_t* mtr) /*!< in: mtr */ { const page_t* page = buf_block_get_frame(block); @@ -4368,8 +4368,8 @@ btr_print_index( mtr_t mtr; buf_block_t* root; mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; rec_offs_init(offsets_); fputs("--------------------------\n" @@ -4403,7 +4403,7 @@ btr_check_node_ptr( { mem_heap_t* heap; dtuple_t* tuple; - ulint* offsets; + offset_t* offsets; btr_cur_t cursor; page_t* page = buf_block_get_frame(block); @@ -4483,8 +4483,8 @@ btr_index_rec_validate( ulint len; const page_t* page; mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; rec_offs_init(offsets_); page = page_align(rec); @@ -4716,8 +4716,8 @@ btr_validate_level( bool ret = true; mtr_t mtr; mem_heap_t* heap = mem_heap_create(256); - ulint* offsets = NULL; - ulint* offsets2= NULL; + offset_t* offsets = NULL; + offset_t* offsets2= NULL; #ifdef UNIV_ZIP_DEBUG page_zip_des_t* page_zip; #endif /* UNIV_ZIP_DEBUG */ diff --git a/storage/innobase/btr/btr0bulk.cc b/storage/innobase/btr/btr0bulk.cc index 6f11796487d..3e170017408 100644 --- a/storage/innobase/btr/btr0bulk.cc +++ b/storage/innobase/btr/btr0bulk.cc @@ -175,7 +175,7 @@ PageBulk::init() void PageBulk::insert( const rec_t* rec, - ulint* offsets) + offset_t* offsets) { ulint rec_size; @@ -188,7 +188,7 @@ PageBulk::insert( /* Check whether records are in order. */ if (!page_rec_is_infimum(m_cur_rec)) { rec_t* old_rec = m_cur_rec; - ulint* old_offsets = rec_get_offsets( + offset_t* old_offsets = rec_get_offsets( old_rec, m_index, NULL, is_leaf, ULINT_UNDEFINED, &m_heap); @@ -401,7 +401,7 @@ rec_t* PageBulk::getSplitRec() { rec_t* rec; - ulint* offsets; + offset_t* offsets; ulint total_used_size; ulint total_recs_size; ulint n_recs; @@ -447,7 +447,7 @@ PageBulk::copyIn( { rec_t* rec = split_rec; - ulint* offsets = NULL; + offset_t* offsets = NULL; ut_ad(m_rec_no == 0); ut_ad(page_rec_is_user_rec(rec)); @@ -493,7 +493,7 @@ PageBulk::copyOut( ut_ad(n > 0); /* Set last record's next in page */ - ulint* offsets = NULL; + offset_t* offsets = NULL; rec = page_rec_get_prev(split_rec); offsets = rec_get_offsets(rec, m_index, offsets, page_rec_is_leaf(split_rec), @@ -602,7 +602,7 @@ the blob data is logged first, then the record is logged in bulk mode. dberr_t PageBulk::storeExt( const big_rec_t* big_rec, - ulint* offsets) + offset_t* offsets) { /* Note: not all fileds are initialized in btr_pcur. */ btr_pcur_t btr_pcur; @@ -862,7 +862,7 @@ BtrBulk::insert( ulint rec_size = rec_get_converted_size(m_index, tuple, n_ext); big_rec_t* big_rec = NULL; rec_t* rec = NULL; - ulint* offsets = NULL; + offset_t* offsets = NULL; if (page_bulk->needExt(tuple, rec_size)) { /* The record is so big that we have to store some fields diff --git a/storage/innobase/btr/btr0cur.cc b/storage/innobase/btr/btr0cur.cc index 3465ff2edcb..5b14a19d9b8 100644 --- a/storage/innobase/btr/btr0cur.cc +++ b/storage/innobase/btr/btr0cur.cc @@ -158,7 +158,7 @@ btr_cur_unmark_extern_fields( part will be updated, or NULL */ rec_t* rec, /*!< in/out: record in a clustered index */ dict_index_t* index, /*!< in: index of the page */ - const ulint* offsets,/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets,/*!< in: array returned by rec_get_offsets() */ mtr_t* mtr); /*!< in: mtr, or NULL if not logged */ /*******************************************************************//** Adds path information to the cursor for the current page, for which @@ -183,7 +183,7 @@ btr_rec_free_updated_extern_fields( rec_t* rec, /*!< in: record */ page_zip_des_t* page_zip,/*!< in: compressed page whose uncompressed part will be updated, or NULL */ - const ulint* offsets,/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec, index) */ const upd_t* update, /*!< in: update vector */ bool rollback,/*!< in: performing rollback? */ mtr_t* mtr); /*!< in: mini-transaction handle which contains @@ -197,7 +197,7 @@ btr_rec_free_externally_stored_fields( dict_index_t* index, /*!< in: index of the data, the index tree MUST be X-latched */ rec_t* rec, /*!< in: record */ - const ulint* offsets,/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec, index) */ page_zip_des_t* page_zip,/*!< in: compressed page whose uncompressed part will be updated, or NULL */ bool rollback,/*!< in: performing rollback? */ @@ -476,8 +476,8 @@ incompatible: from the cache. */ mem_heap_t* heap = NULL; - ulint* offsets = rec_get_offsets(rec, index, NULL, true, - ULINT_UNDEFINED, &heap); + offset_t* offsets = rec_get_offsets(rec, index, NULL, true, + ULINT_UNDEFINED, &heap); if (rec_offs_any_default(offsets)) { inconsistent: mem_heap_free(heap); @@ -1142,10 +1142,10 @@ btr_cur_search_to_nth_level_func( btr_search_t* info; #endif /* BTR_CUR_ADAPT */ mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; - ulint offsets2_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets2 = offsets2_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; + offset_t offsets2_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets2 = offsets2_; rec_offs_init(offsets_); rec_offs_init(offsets2_); /* Currently, PAGE_CUR_LE is the only search mode used for searches @@ -2406,8 +2406,8 @@ btr_cur_open_at_index_side_func( ulint n_blocks = 0; ulint n_releases = 0; mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; dberr_t err = DB_SUCCESS; rec_offs_init(offsets_); @@ -2775,8 +2775,8 @@ btr_cur_open_at_rnd_pos_func( ulint n_blocks = 0; ulint n_releases = 0; mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; rec_offs_init(offsets_); ut_ad(!index->is_spatial()); @@ -3065,7 +3065,7 @@ btr_cur_insert_if_possible( cursor stays valid */ const dtuple_t* tuple, /*!< in: tuple to insert; the size info need not have been stored to tuple */ - ulint** offsets,/*!< out: offsets on *rec */ + offset_t** offsets,/*!< out: offsets on *rec */ mem_heap_t** heap, /*!< in/out: pointer to memory heap, or NULL */ ulint n_ext, /*!< in: number of externally stored columns */ mtr_t* mtr) /*!< in/out: mini-transaction */ @@ -3228,7 +3228,7 @@ btr_cur_optimistic_insert( specified */ btr_cur_t* cursor, /*!< in: cursor on page after which to insert; cursor stays valid */ - ulint** offsets,/*!< out: offsets on *rec */ + offset_t** offsets,/*!< out: offsets on *rec */ mem_heap_t** heap, /*!< in/out: pointer to memory heap */ dtuple_t* entry, /*!< in/out: entry to insert */ rec_t** rec, /*!< out: pointer to inserted record if @@ -3528,7 +3528,7 @@ btr_cur_pessimistic_insert( insertion will certainly succeed */ btr_cur_t* cursor, /*!< in: cursor after which to insert; cursor stays valid */ - ulint** offsets,/*!< out: offsets on *rec */ + offset_t** offsets,/*!< out: offsets on *rec */ mem_heap_t** heap, /*!< in/out: pointer to memory heap that can be emptied */ dtuple_t* entry, /*!< in/out: entry to insert */ @@ -3696,7 +3696,7 @@ btr_cur_upd_lock_and_undo( /*======================*/ ulint flags, /*!< in: undo logging and locking flags */ btr_cur_t* cursor, /*!< in: cursor on record to update */ - const ulint* offsets,/*!< in: rec_get_offsets() on cursor */ + const offset_t* offsets,/*!< in: rec_get_offsets() on cursor */ const upd_t* update, /*!< in: update vector */ ulint cmpl_info,/*!< in: compiler info on secondary index updates */ @@ -3827,7 +3827,7 @@ btr_cur_parse_update_in_place( roll_ptr_t roll_ptr; ulint rec_offset; mem_heap_t* heap; - ulint* offsets; + offset_t* offsets; if (end_ptr < ptr + 1) { @@ -3912,7 +3912,7 @@ btr_cur_update_alloc_zip_func( page_cur_t* cursor, /*!< in/out: B-tree page cursor */ dict_index_t* index, /*!< in: the index corresponding to cursor */ #ifdef UNIV_DEBUG - ulint* offsets,/*!< in/out: offsets of the cursor record */ + offset_t* offsets,/*!< in/out: offsets of the cursor record */ #endif /* UNIV_DEBUG */ ulint length, /*!< in: size needed */ bool create, /*!< in: true=delete-and-insert, @@ -3994,7 +3994,7 @@ btr_cur_update_in_place( btr_cur_t* cursor, /*!< in: cursor on the record to update; cursor stays valid and positioned on the same record */ - ulint* offsets,/*!< in/out: offsets on cursor->page_cur.rec */ + offset_t* offsets,/*!< in/out: offsets on cursor->page_cur.rec */ const upd_t* update, /*!< in: update vector */ ulint cmpl_info,/*!< in: compiler info on secondary index updates */ @@ -4215,7 +4215,7 @@ btr_cur_optimistic_update( btr_cur_t* cursor, /*!< in: cursor on the record to update; cursor stays valid and positioned on the same record */ - ulint** offsets,/*!< out: offsets on cursor->page_cur.rec */ + offset_t** offsets,/*!< out: offsets on cursor->page_cur.rec */ mem_heap_t** heap, /*!< in/out: pointer to NULL or memory heap */ const upd_t* update, /*!< in: update vector; this must also contain trx id and roll ptr fields */ @@ -4553,7 +4553,7 @@ btr_cur_pessimistic_update( btr_cur_t* cursor, /*!< in/out: cursor on the record to update; cursor may become invalid if *big_rec == NULL || !(flags & BTR_KEEP_POS_FLAG) */ - ulint** offsets,/*!< out: offsets on cursor->page_cur.rec */ + offset_t** offsets,/*!< out: offsets on cursor->page_cur.rec */ mem_heap_t** offsets_heap, /*!< in/out: pointer to memory heap that can be emptied */ @@ -5098,7 +5098,7 @@ btr_cur_parse_del_mark_set_clust_rec( clustered index fields. */ ut_ad(pos <= MAX_REF_PARTS); - ulint offsets[REC_OFFS_HEADER_SIZE + MAX_REF_PARTS + 2]; + offset_t offsets[REC_OFFS_HEADER_SIZE + MAX_REF_PARTS + 2]; rec_offs_init(offsets); mem_heap_t* heap = NULL; @@ -5141,7 +5141,7 @@ btr_cur_del_mark_set_clust_rec( buf_block_t* block, /*!< in/out: buffer block of the record */ rec_t* rec, /*!< in/out: record */ dict_index_t* index, /*!< in: clustered index of the record */ - const ulint* offsets,/*!< in: rec_get_offsets(rec) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec) */ que_thr_t* thr, /*!< in: query thread */ const dtuple_t* entry, /*!< in: dtuple for the deleting record, also contains the virtual cols if there are any */ @@ -5427,8 +5427,8 @@ btr_cur_optimistic_delete_func( buf_block_t* block; rec_t* rec; mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; ibool no_compress_needed; rec_offs_init(offsets_); @@ -5611,7 +5611,7 @@ btr_cur_pessimistic_delete( bool success; ibool ret = FALSE; mem_heap_t* heap; - ulint* offsets; + offset_t* offsets; #ifdef UNIV_DEBUG bool parent_latched = false; #endif /* UNIV_DEBUG */ @@ -5759,7 +5759,7 @@ discard_page: rtr_mbr_t father_mbr; rec_t* father_rec; btr_cur_t father_cursor; - ulint* offsets; + offset_t* offsets; bool upd_ret; ulint len; @@ -6505,7 +6505,7 @@ btr_record_not_null_field_in_rec( ulint n_unique, /*!< in: dict_index_get_n_unique(index), number of columns uniquely determine an index entry */ - const ulint* offsets, /*!< in: rec_get_offsets(rec, index), + const offset_t* offsets, /*!< in: rec_get_offsets(rec, index), its size could be for all fields or that of "n_unique" */ ib_uint64_t* n_not_null) /*!< in/out: array to record number of @@ -6559,8 +6559,8 @@ btr_estimate_number_of_different_key_vals( uintmax_t add_on; mtr_t mtr; mem_heap_t* heap = NULL; - ulint* offsets_rec = NULL; - ulint* offsets_next_rec = NULL; + offset_t* offsets_rec = NULL; + offset_t* offsets_next_rec = NULL; /* For spatial index, there is no such stats can be fetched. */ @@ -6748,7 +6748,7 @@ btr_estimate_number_of_different_key_vals( and assign the old offsets_rec buffer to offsets_next_rec. */ { - ulint* offsets_tmp = offsets_rec; + offset_t* offsets_tmp = offsets_rec; offsets_rec = offsets_next_rec; offsets_next_rec = offsets_tmp; } @@ -6833,7 +6833,7 @@ static ulint btr_rec_get_field_ref_offs( /*=======================*/ - const ulint* offsets,/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets,/*!< in: array returned by rec_get_offsets() */ ulint n) /*!< in: index of the external field */ { ulint field_ref_offs; @@ -6862,7 +6862,7 @@ btr_rec_get_field_ref_offs( ulint btr_rec_get_externally_stored_len( const rec_t* rec, - const ulint* offsets) + const offset_t* offsets) { ulint n_fields; ulint total_extern_len = 0; @@ -6901,7 +6901,7 @@ btr_cur_set_ownership_of_extern_field( part will be updated, or NULL */ rec_t* rec, /*!< in/out: clustered index record */ dict_index_t* index, /*!< in: index of the page */ - const ulint* offsets,/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets,/*!< in: array returned by rec_get_offsets() */ ulint i, /*!< in: field number */ ibool val, /*!< in: value to set */ mtr_t* mtr) /*!< in: mtr, or NULL if not logged */ @@ -6951,7 +6951,7 @@ btr_cur_disown_inherited_fields( part will be updated, or NULL */ rec_t* rec, /*!< in/out: record in a clustered index */ dict_index_t* index, /*!< in: index of the page */ - const ulint* offsets,/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets,/*!< in: array returned by rec_get_offsets() */ const upd_t* update, /*!< in: update vector */ mtr_t* mtr) /*!< in/out: mini-transaction */ { @@ -6982,7 +6982,7 @@ btr_cur_unmark_extern_fields( part will be updated, or NULL */ rec_t* rec, /*!< in/out: record in a clustered index */ dict_index_t* index, /*!< in: index of the page */ - const ulint* offsets,/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets,/*!< in: array returned by rec_get_offsets() */ mtr_t* mtr) /*!< in: mtr, or NULL if not logged */ { ulint n; @@ -7155,7 +7155,7 @@ struct btr_blob_log_check_t { /** Mini transaction holding the latches for m_pcur */ mtr_t* m_mtr; /** rec_get_offsets(rec, index); offset of clust_rec */ - const ulint* m_offsets; + const offset_t* m_offsets; /** The block containing clustered record */ buf_block_t** m_block; /** The clustered record pointer */ @@ -7175,7 +7175,7 @@ struct btr_blob_log_check_t { btr_blob_log_check_t( btr_pcur_t* pcur, mtr_t* mtr, - const ulint* offsets, + const offset_t* offsets, buf_block_t** block, rec_t** rec, enum blob_op op) @@ -7246,7 +7246,7 @@ struct btr_blob_log_check_t { *m_rec = btr_pcur_get_rec(m_pcur); rec_offs_make_valid(*m_rec, index, true, - const_cast<ulint*>(m_offsets)); + const_cast<offset_t*>(m_offsets)); ut_ad(m_mtr->memo_contains_page_flagged( *m_rec, @@ -7277,7 +7277,7 @@ btr_store_big_rec_extern_fields( btr_pcur_t* pcur, /*!< in/out: a persistent cursor. if btr_mtr is restarted, then this can be repositioned. */ - ulint* offsets, /*!< in/out: rec_get_offsets() on + offset_t* offsets, /*!< in/out: rec_get_offsets() on pcur. the "external storage" flags in offsets will correctly correspond to rec when this function returns */ @@ -7789,7 +7789,7 @@ btr_free_externally_stored_field( byte* field_ref, /*!< in/out: field reference */ const rec_t* rec, /*!< in: record containing field_ref, for page_zip_write_blob_ptr(), or NULL */ - const ulint* offsets, /*!< in: rec_get_offsets(rec, index), + const offset_t* offsets, /*!< in: rec_get_offsets(rec, index), or NULL */ page_zip_des_t* page_zip, /*!< in: compressed page corresponding to rec, or NULL if rec == NULL */ @@ -7963,7 +7963,7 @@ btr_rec_free_externally_stored_fields( dict_index_t* index, /*!< in: index of the data, the index tree MUST be X-latched */ rec_t* rec, /*!< in/out: record */ - const ulint* offsets,/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec, index) */ page_zip_des_t* page_zip,/*!< in: compressed page whose uncompressed part will be updated, or NULL */ bool rollback,/*!< in: performing rollback? */ @@ -8004,7 +8004,7 @@ btr_rec_free_updated_extern_fields( rec_t* rec, /*!< in/out: record */ page_zip_des_t* page_zip,/*!< in: compressed page whose uncompressed part will be updated, or NULL */ - const ulint* offsets,/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec, index) */ const upd_t* update, /*!< in: update vector */ bool rollback,/*!< in: performing rollback? */ mtr_t* mtr) /*!< in: mini-transaction handle which contains @@ -8402,7 +8402,7 @@ protected by a lock or a page latch byte* btr_rec_copy_externally_stored_field( const rec_t* rec, - const ulint* offsets, + const offset_t* offsets, const page_size_t& page_size, ulint no, ulint* len, diff --git a/storage/innobase/btr/btr0defragment.cc b/storage/innobase/btr/btr0defragment.cc index 39007c34258..dd8a2546691 100644 --- a/storage/innobase/btr/btr0defragment.cc +++ b/storage/innobase/btr/btr0defragment.cc @@ -338,8 +338,8 @@ btr_defragment_calc_n_recs_for_size( { page_t* page = buf_block_get_frame(block); ulint n_recs = 0; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; rec_offs_init(offsets_); mem_heap_t* heap = NULL; ulint size = 0; diff --git a/storage/innobase/btr/btr0pcur.cc b/storage/innobase/btr/btr0pcur.cc index cf82657a3bc..46549c13c3d 100644 --- a/storage/innobase/btr/btr0pcur.cc +++ b/storage/innobase/btr/btr0pcur.cc @@ -302,16 +302,21 @@ btr_pcur_restore_position_func( if (cursor->rel_pos == BTR_PCUR_ON) { #ifdef UNIV_DEBUG const rec_t* rec; - const ulint* offsets1; - const ulint* offsets2; + offset_t offsets1_[REC_OFFS_NORMAL_SIZE]; + offset_t offsets2_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets1 = offsets1_; + offset_t* offsets2 = offsets2_; rec = btr_pcur_get_rec(cursor); + rec_offs_init(offsets1_); + rec_offs_init(offsets2_); + heap = mem_heap_create(256); offsets1 = rec_get_offsets( - cursor->old_rec, index, NULL, true, + cursor->old_rec, index, offsets1, true, cursor->old_n_fields, &heap); offsets2 = rec_get_offsets( - rec, index, NULL, true, + rec, index, offsets2, true, cursor->old_n_fields, &heap); ut_ad(!cmp_rec_rec(cursor->old_rec, @@ -370,11 +375,13 @@ btr_pcur_restore_position_func( ut_ad(cursor->rel_pos == BTR_PCUR_ON || cursor->rel_pos == BTR_PCUR_BEFORE || cursor->rel_pos == BTR_PCUR_AFTER); + offset_t offsets[REC_OFFS_NORMAL_SIZE]; + rec_offs_init(offsets); if (cursor->rel_pos == BTR_PCUR_ON && btr_pcur_is_on_user_rec(cursor) && !cmp_dtuple_rec(tuple, btr_pcur_get_rec(cursor), rec_get_offsets(btr_pcur_get_rec(cursor), - index, NULL, true, + index, offsets, true, ULINT_UNDEFINED, &heap))) { /* We have to store the NEW value for the modify clock, diff --git a/storage/innobase/btr/btr0scrub.cc b/storage/innobase/btr/btr0scrub.cc index 975520220c0..b0d1c91e5d8 100644 --- a/storage/innobase/btr/btr0scrub.cc +++ b/storage/innobase/btr/btr0scrub.cc @@ -478,7 +478,7 @@ btr_pessimistic_scrub( /* arguments to btr_page_split_and_insert */ mem_heap_t* heap = NULL; dtuple_t* entry = NULL; - ulint* offsets = NULL; + offset_t* offsets = NULL; ulint n_ext = 0; ulint flags = BTR_MODIFY_TREE; diff --git a/storage/innobase/btr/btr0sea.cc b/storage/innobase/btr/btr0sea.cc index a19c67ac1fd..ee1eaaac8ea 100644 --- a/storage/innobase/btr/btr0sea.cc +++ b/storage/innobase/btr/btr0sea.cc @@ -97,7 +97,7 @@ static inline ulint rec_fold( const rec_t* rec, - const ulint* offsets, + const offset_t* offsets, ulint n_fields, ulint n_bytes, index_id_t tree_id) @@ -669,7 +669,7 @@ btr_search_update_hash_ref( && (block->curr_n_bytes == info->n_bytes) && (block->curr_left_side == info->left_side)) { mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; rec_offs_init(offsets_); rec = btr_cur_get_rec(cursor); @@ -722,8 +722,8 @@ btr_search_check_guess( ulint match; int cmp; mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; ibool success = FALSE; rec_offs_init(offsets_); @@ -1082,7 +1082,7 @@ void btr_search_drop_page_hash_index(buf_block_t* block) ulint i; mem_heap_t* heap; const dict_index_t* index; - ulint* offsets; + offset_t* offsets; rw_lock_t* latch; btr_search_t* info; @@ -1337,8 +1337,8 @@ btr_search_build_page_hash_index( const rec_t** recs; ulint i; mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; #ifdef MYSQL_INDEX_DISABLE_AHI if (index->disable_ahi) return; @@ -1642,7 +1642,7 @@ void btr_search_update_hash_on_delete(btr_cur_t* cursor) const rec_t* rec; ulint fold; dict_index_t* index; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; mem_heap_t* heap = NULL; rec_offs_init(offsets_); @@ -1797,8 +1797,8 @@ btr_search_update_hash_on_insert(btr_cur_t* cursor, rw_lock_t* ahi_latch) ibool left_side; bool locked = false; mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; rec_offs_init(offsets_); ut_ad(ahi_latch == btr_get_search_latch(cursor->index)); @@ -1955,8 +1955,8 @@ btr_search_hash_table_validate(ulint hash_table_id) ulint i; ulint cell_count; mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; if (!btr_search_enabled) { return(TRUE); diff --git a/storage/innobase/dict/dict0mem.cc b/storage/innobase/dict/dict0mem.cc index 567f39d67a1..425aa6c8270 100644 --- a/storage/innobase/dict/dict0mem.cc +++ b/storage/innobase/dict/dict0mem.cc @@ -1453,7 +1453,7 @@ void dict_table_t::rollback_instant(unsigned n) bool dict_index_t::vers_history_row( const rec_t* rec, - const ulint* offsets) + const offset_t* offsets) { ut_ad(is_primary()); @@ -1484,8 +1484,8 @@ dict_index_t::vers_history_row( bool error = false; mem_heap_t* heap = NULL; dict_index_t* clust_index = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; rec_offs_init(offsets_); mtr_t mtr; diff --git a/storage/innobase/dict/dict0stats.cc b/storage/innobase/dict/dict0stats.cc index 8373cddfb99..addf212f984 100644 --- a/storage/innobase/dict/dict0stats.cc +++ b/storage/innobase/dict/dict0stats.cc @@ -1014,8 +1014,8 @@ dict_stats_analyze_index_level( bool prev_rec_is_copied; byte* prev_rec_buf = NULL; ulint prev_rec_buf_size = 0; - ulint* rec_offsets; - ulint* prev_rec_offsets; + offset_t* rec_offsets; + offset_t* prev_rec_offsets; ulint i; DEBUG_PRINTF(" %s(table=%s, index=%s, level=" ULINTPF ")\n", @@ -1036,9 +1036,9 @@ dict_stats_analyze_index_level( i = (REC_OFFS_HEADER_SIZE + 1 + 1) + n_uniq; heap = mem_heap_create((2 * sizeof *rec_offsets) * i); - rec_offsets = static_cast<ulint*>( + rec_offsets = static_cast<offset_t*>( mem_heap_alloc(heap, i * sizeof *rec_offsets)); - prev_rec_offsets = static_cast<ulint*>( + prev_rec_offsets = static_cast<offset_t*>( mem_heap_alloc(heap, i * sizeof *prev_rec_offsets)); rec_offs_set_n_alloc(rec_offsets, i); rec_offs_set_n_alloc(prev_rec_offsets, i); @@ -1331,11 +1331,11 @@ to the number of externally stored pages which were encountered @return offsets1 or offsets2 (the offsets of *out_rec), or NULL if the page is empty and does not contain user records. */ UNIV_INLINE -ulint* +offset_t* dict_stats_scan_page( const rec_t** out_rec, - ulint* offsets1, - ulint* offsets2, + offset_t* offsets1, + offset_t* offsets2, const dict_index_t* index, const page_t* page, ulint n_prefix, @@ -1343,8 +1343,8 @@ dict_stats_scan_page( ib_uint64_t* n_diff, ib_uint64_t* n_external_pages) { - ulint* offsets_rec = offsets1; - ulint* offsets_next_rec = offsets2; + offset_t* offsets_rec = offsets1; + offset_t* offsets_next_rec = offsets2; const rec_t* rec; const rec_t* next_rec; /* A dummy heap, to be passed to rec_get_offsets(). @@ -1410,23 +1410,16 @@ dict_stats_scan_page( } rec = next_rec; - { - /* Assign offsets_rec = offsets_next_rec - so that offsets_rec matches with rec which - was just assigned rec = next_rec above. - Also need to point offsets_next_rec to the - place where offsets_rec was pointing before - because we have just 2 placeholders where - data is actually stored: - offsets1 and offsets2 and we - are using them in circular fashion - (offsets[_next]_rec are just pointers to - those placeholders). */ - ulint* offsets_tmp; - offsets_tmp = offsets_rec; - offsets_rec = offsets_next_rec; - offsets_next_rec = offsets_tmp; - } + /* Assign offsets_rec = offsets_next_rec so that + offsets_rec matches with rec which was just assigned + rec = next_rec above. Also need to point + offsets_next_rec to the place where offsets_rec was + pointing before because we have just 2 placeholders + where data is actually stored: offsets1 and offsets2 + and we are using them in circular fashion + (offsets[_next]_rec are just pointers to those + placeholders). */ + std::swap(offsets_rec, offsets_next_rec); if (should_count_external_pages) { *n_external_pages += btr_rec_get_externally_stored_len( @@ -1465,9 +1458,9 @@ dict_stats_analyze_index_below_cur( const page_t* page; mem_heap_t* heap; const rec_t* rec; - ulint* offsets1; - ulint* offsets2; - ulint* offsets_rec; + offset_t* offsets1; + offset_t* offsets2; + offset_t* offsets_rec; ulint size; mtr_t mtr; @@ -1485,10 +1478,10 @@ dict_stats_analyze_index_below_cur( heap = mem_heap_create(size * (sizeof *offsets1 + sizeof *offsets2)); - offsets1 = static_cast<ulint*>(mem_heap_alloc( + offsets1 = static_cast<offset_t*>(mem_heap_alloc( heap, size * sizeof *offsets1)); - offsets2 = static_cast<ulint*>(mem_heap_alloc( + offsets2 = static_cast<offset_t*>(mem_heap_alloc( heap, size * sizeof *offsets2)); rec_offs_set_n_alloc(offsets1, size); diff --git a/storage/innobase/fts/fts0fts.cc b/storage/innobase/fts/fts0fts.cc index 3ca539c5f22..6b324354527 100644 --- a/storage/innobase/fts/fts0fts.cc +++ b/storage/innobase/fts/fts0fts.cc @@ -3202,7 +3202,7 @@ fts_fetch_doc_from_rec( dict_index_t* clust_index, /*!< in: cluster index */ btr_pcur_t* pcur, /*!< in: cursor whose position has been stored */ - ulint* offsets, /*!< in: offsets */ + offset_t* offsets, /*!< in: offsets */ fts_doc_t* doc) /*!< out: fts doc to hold parsed documents */ { @@ -3486,7 +3486,7 @@ fts_add_doc_by_id( btr_pcur_t* doc_pcur; const rec_t* clust_rec; btr_pcur_t clust_pcur; - ulint* offsets = NULL; + offset_t* offsets = NULL; ulint num_idx = ib_vector_size(cache->get_docs); rec = btr_pcur_get_rec(&pcur); @@ -3677,8 +3677,8 @@ fts_get_max_doc_id( if (!page_is_empty(btr_pcur_get_page(&pcur))) { const rec_t* rec = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; mem_heap_t* heap = NULL; ulint len; const void* data; @@ -5186,8 +5186,8 @@ fts_get_doc_id_from_rec( const byte* data; ulint col_no; doc_id_t doc_id = 0; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; mem_heap_t* my_heap = heap; ut_a(table->fts->doc_col != ULINT_UNDEFINED); diff --git a/storage/innobase/gis/gis0rtree.cc b/storage/innobase/gis/gis0rtree.cc index 94256abfe71..7ba6f59c2d4 100644 --- a/storage/innobase/gis/gis0rtree.cc +++ b/storage/innobase/gis/gis0rtree.cc @@ -51,7 +51,7 @@ rtr_page_split_initialize_nodes( btr_cur_t* cursor, /*!< in: cursor at which to insert; when the function returns, the cursor is positioned on the predecessor of the inserted record */ - ulint** offsets,/*!< in: offsets on inserted record */ + offset_t** offsets,/*!< in: offsets on inserted record */ const dtuple_t* tuple, /*!< in: tuple to insert */ double** buf_pos)/*!< in/out: current buffer position */ { @@ -192,7 +192,7 @@ rtr_update_mbr_field_in_place( /*==========================*/ dict_index_t* index, /*!< in: spatial index. */ rec_t* rec, /*!< in/out: rec to be modified.*/ - ulint* offsets, /*!< in/out: offsets on rec. */ + offset_t* offsets, /*!< in/out: offsets on rec. */ rtr_mbr_t* mbr, /*!< in: the new mbr. */ mtr_t* mtr) /*!< in: mtr */ { @@ -266,7 +266,7 @@ bool rtr_update_mbr_field( /*=================*/ btr_cur_t* cursor, /*!< in/out: cursor pointed to rec.*/ - ulint* offsets, /*!< in/out: offsets on rec. */ + offset_t* offsets, /*!< in/out: offsets on rec. */ btr_cur_t* cursor2, /*!< in/out: cursor pointed to rec that should be deleted. this cursor is for btr_compress to @@ -295,7 +295,7 @@ rtr_update_mbr_field( bool ins_suc = true; ulint cur2_pos = 0; ulint del_page_no = 0; - ulint* offsets2; + offset_t* offsets2; rec = btr_cur_get_rec(cursor); page = page_align(rec); @@ -382,7 +382,7 @@ rtr_update_mbr_field( } if (cursor2) { - ulint* offsets2; + offset_t* offsets2; if (page_zip) { cursor2->page_cur.rec @@ -404,7 +404,7 @@ rtr_update_mbr_field( page_cur_t page_cur; rec_t* insert_rec; - ulint* insert_offsets = NULL; + offset_t* insert_offsets = NULL; ulint old_pos; rec_t* old_rec; @@ -436,7 +436,7 @@ update_mbr: /* When there're not only 1 rec in the page, we do delete/insert to avoid page split. */ rec_t* insert_rec; - ulint* insert_offsets = NULL; + offset_t* insert_offsets = NULL; rec_t* next_rec; /* Delete the rec which cursor point to. */ @@ -636,7 +636,7 @@ rtr_adjust_upper_level( page_zip_des_t* new_page_zip; dict_index_t* index = sea_cur->index; btr_cur_t cursor; - ulint* offsets; + offset_t* offsets; mem_heap_t* heap; ulint level; dtuple_t* node_ptr_upper; @@ -799,8 +799,8 @@ rtr_split_page_move_rec_list( page_cur_t new_page_cursor; page_t* page; page_t* new_page; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; page_zip_des_t* new_page_zip = buf_block_get_page_zip(new_block); rec_t* rec; @@ -960,7 +960,7 @@ rtr_page_split_and_insert( btr_cur_t* cursor, /*!< in/out: cursor at which to insert; when the function returns, the cursor is positioned on the predecessor of the inserted record */ - ulint** offsets,/*!< out: offsets on inserted record */ + offset_t** offsets,/*!< out: offsets on inserted record */ mem_heap_t** heap, /*!< in/out: pointer to memory heap, or NULL */ const dtuple_t* tuple, /*!< in: tuple to insert */ ulint n_ext, /*!< in: number of externally stored columns */ @@ -1309,7 +1309,7 @@ rtr_ins_enlarge_mbr( mem_heap_t* heap; dict_index_t* index = btr_cur->index; page_cur_t* page_cursor; - ulint* offsets; + offset_t* offsets; node_visit_t* node_visit; btr_cur_t cursor; page_t* page; @@ -1393,10 +1393,10 @@ rtr_page_copy_rec_list_end_no_locks( page_cur_t page_cur; page_cur_t cur1; rec_t* cur_rec; - ulint offsets_1[REC_OFFS_NORMAL_SIZE]; - ulint* offsets1 = offsets_1; - ulint offsets_2[REC_OFFS_NORMAL_SIZE]; - ulint* offsets2 = offsets_2; + offset_t offsets_1[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets1 = offsets_1; + offset_t offsets_2[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets2 = offsets_2; ulint moved = 0; bool is_leaf = page_is_leaf(new_page); @@ -1520,10 +1520,10 @@ rtr_page_copy_rec_list_start_no_locks( { page_cur_t cur1; rec_t* cur_rec; - ulint offsets_1[REC_OFFS_NORMAL_SIZE]; - ulint* offsets1 = offsets_1; - ulint offsets_2[REC_OFFS_NORMAL_SIZE]; - ulint* offsets2 = offsets_2; + offset_t offsets_1[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets1 = offsets_1; + offset_t offsets_2[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets2 = offsets_2; page_cur_t page_cur; ulint moved = 0; bool is_leaf = page_is_leaf(buf_block_get_frame(block)); @@ -1632,8 +1632,8 @@ rtr_merge_mbr_changed( /*==================*/ btr_cur_t* cursor, /*!< in/out: cursor */ btr_cur_t* cursor2, /*!< in: the other cursor */ - ulint* offsets, /*!< in: rec offsets */ - ulint* offsets2, /*!< in: rec offsets */ + offset_t* offsets, /*!< in: rec offsets */ + offset_t* offsets2, /*!< in: rec offsets */ rtr_mbr_t* new_mbr) /*!< out: MBR to update */ { double* mbr; @@ -1676,8 +1676,8 @@ rtr_merge_and_update_mbr( /*=====================*/ btr_cur_t* cursor, /*!< in/out: cursor */ btr_cur_t* cursor2, /*!< in: the other cursor */ - ulint* offsets, /*!< in: rec offsets */ - ulint* offsets2, /*!< in: rec offsets */ + offset_t* offsets, /*!< in: rec offsets */ + offset_t* offsets2, /*!< in: rec offsets */ page_t* child_page, /*!< in: the page. */ mtr_t* mtr) /*!< in: mtr */ { @@ -1740,7 +1740,7 @@ rtr_check_same_block( { ulint page_no = childb->page.id.page_no(); - ulint* offsets; + offset_t* offsets; rec_t* rec = page_rec_get_next(page_get_infimum_rec( buf_block_get_frame(parentb))); @@ -1771,7 +1771,7 @@ rtr_rec_cal_increase( dtuple in some of the common fields, or which has an equal number or more fields than dtuple */ - const ulint* offsets,/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets,/*!< in: array returned by rec_get_offsets() */ double* area) /*!< out: increased area */ { const dfield_t* dtuple_field; diff --git a/storage/innobase/gis/gis0sea.cc b/storage/innobase/gis/gis0sea.cc index 3b3de0b2514..c73e7e6dde8 100644 --- a/storage/innobase/gis/gis0sea.cc +++ b/storage/innobase/gis/gis0sea.cc @@ -526,7 +526,7 @@ rtr_compare_cursor_rec( mem_heap_t** heap) /*!< in: memory heap */ { const rec_t* rec; - ulint* offsets; + offset_t* offsets; rec = btr_cur_get_rec(cursor); @@ -668,7 +668,7 @@ rtr_page_get_father( { mem_heap_t* heap = mem_heap_create(100); #ifdef UNIV_DEBUG - ulint* offsets; + offset_t* offsets; offsets = rtr_page_get_father_block( NULL, heap, index, block, mtr, sea_cur, cursor); @@ -689,9 +689,9 @@ rtr_page_get_father( that mtr holds an SX-latch or X-latch on the tree. @return rec_get_offsets() of the node pointer record */ static -ulint* +offset_t* rtr_page_get_father_node_ptr( - ulint* offsets,/*!< in: work area for the return value */ + offset_t* offsets,/*!< in: work area for the return value */ mem_heap_t* heap, /*!< in: memory heap to use */ btr_cur_t* sea_cur,/*!< in: search cursor */ btr_cur_t* cursor, /*!< in: cursor pointing to user record, @@ -784,10 +784,10 @@ rtr_page_get_father_node_ptr( Returns the father block to a page. It is assumed that mtr holds an X or SX latch on the tree. @return rec_get_offsets() of the node pointer record */ -ulint* +offset_t* rtr_page_get_father_block( /*======================*/ - ulint* offsets,/*!< in: work area for the return value */ + offset_t* offsets,/*!< in: work area for the return value */ mem_heap_t* heap, /*!< in: memory heap to use */ dict_index_t* index, /*!< in: b-tree index */ buf_block_t* block, /*!< in: child page in the index */ @@ -1302,8 +1302,8 @@ rtr_cur_restore_position( #ifdef UNIV_DEBUG do { const rec_t* rec; - const ulint* offsets1; - const ulint* offsets2; + const offset_t* offsets1; + const offset_t* offsets2; ulint comp; rec = btr_pcur_get_rec(r_cursor); @@ -1375,8 +1375,8 @@ search_again: if (low_match == r_cursor->old_n_fields) { const rec_t* rec; - const ulint* offsets1; - const ulint* offsets2; + const offset_t* offsets1; + const offset_t* offsets2; ulint comp; rec = btr_pcur_get_rec(r_cursor); @@ -1422,7 +1422,7 @@ rtr_leaf_push_match_rec( /*====================*/ const rec_t* rec, /*!< in: record to copy */ rtr_info_t* rtr_info, /*!< in/out: search stack */ - ulint* offsets, /*!< in: offsets */ + offset_t* offsets, /*!< in: offsets */ bool is_comp) /*!< in: is compact format */ { byte* buf; @@ -1608,7 +1608,7 @@ void rtr_get_mbr_from_rec( /*=================*/ const rec_t* rec, /*!< in: data tuple */ - const ulint* offsets,/*!< in: offsets array */ + const offset_t* offsets,/*!< in: offsets array */ rtr_mbr_t* mbr) /*!< out MBR */ { ulint rec_f_len; @@ -1655,8 +1655,8 @@ rtr_cur_search_with_match( const page_t* page; const rec_t* rec; const rec_t* last_rec; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; mem_heap_t* heap = NULL; int cmp = 1; double least_inc = DBL_MAX; @@ -1939,8 +1939,8 @@ rtr_cur_search_with_match( test_rec = match_rec->matched_recs->back(); #ifdef UNIV_DEBUG - ulint offsets_2[REC_OFFS_NORMAL_SIZE]; - ulint* offsets2 = offsets_2; + offset_t offsets_2[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets2 = offsets_2; rec_offs_init(offsets_2); ut_ad(found); diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc index 63cb89d4e98..87bfab7bfec 100644 --- a/storage/innobase/handler/handler0alter.cc +++ b/storage/innobase/handler/handler0alter.cc @@ -2162,7 +2162,7 @@ innobase_rec_to_mysql( struct TABLE* table, /*!< in/out: MySQL table */ const rec_t* rec, /*!< in: record */ const dict_index_t* index, /*!< in: index */ - const ulint* offsets)/*!< in: rec_get_offsets( + const offset_t* offsets)/*!< in: rec_get_offsets( rec, index, ...) */ { uint n_fields = table->s->fields; @@ -4401,7 +4401,7 @@ innobase_add_instant_try( uf->field_no = f; uf->new_val = entry->fields[f]; } - ulint* offsets = NULL; + offset_t* offsets = NULL; mem_heap_t* offsets_heap = NULL; big_rec_t* big_rec; err = btr_cur_pessimistic_update( diff --git a/storage/innobase/ibuf/ibuf0ibuf.cc b/storage/innobase/ibuf/ibuf0ibuf.cc index 11193276016..38814da0c8d 100644 --- a/storage/innobase/ibuf/ibuf0ibuf.cc +++ b/storage/innobase/ibuf/ibuf0ibuf.cc @@ -3310,7 +3310,7 @@ ibuf_insert_low( dtuple_t* ibuf_entry; mem_heap_t* offsets_heap = NULL; mem_heap_t* heap; - ulint* offsets = NULL; + offset_t* offsets = NULL; ulint buffered; lint min_n_recs; rec_t* ins_rec; @@ -3770,7 +3770,7 @@ ibuf_insert_to_index_page_low( buf_block_t* block, /*!< in/out: index page where the buffered entry should be placed */ dict_index_t* index, /*!< in: record descriptor */ - ulint** offsets,/*!< out: offsets on *rec */ + offset_t** offsets,/*!< out: offsets on *rec */ mem_heap_t* heap, /*!< in/out: memory heap */ mtr_t* mtr, /*!< in/out: mtr */ page_cur_t* page_cur)/*!< in/out: cursor positioned on the record @@ -3850,7 +3850,7 @@ ibuf_insert_to_index_page( ulint low_match; page_t* page = buf_block_get_frame(block); rec_t* rec; - ulint* offsets; + offset_t* offsets; mem_heap_t* heap; DBUG_ENTER("ibuf_insert_to_index_page"); @@ -4107,8 +4107,8 @@ ibuf_delete( /* TODO: the below should probably be a separate function, it's a bastardized version of btr_cur_optimistic_delete. */ - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; mem_heap_t* heap = NULL; ulint max_ins_size = 0; diff --git a/storage/innobase/include/btr0btr.h b/storage/innobase/include/btr0btr.h index d68b02eda4d..698343bf371 100644 --- a/storage/innobase/include/btr0btr.h +++ b/storage/innobase/include/btr0btr.h @@ -30,6 +30,7 @@ Created 6/2/1994 Heikki Tuuri #include "dict0dict.h" #include "data0data.h" +#include "rem0types.h" #include "page0cur.h" #include "btr0types.h" #include "gis0type.h" @@ -319,7 +320,7 @@ ulint btr_node_ptr_get_child_page_no( /*===========================*/ const rec_t* rec, /*!< in: node pointer record */ - const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets)/*!< in: array returned by rec_get_offsets() */ MY_ATTRIBUTE((warn_unused_result)); /** Create the root node for a new index tree. @@ -404,7 +405,7 @@ btr_root_raise_and_insert( on the root page; when the function returns, the cursor is positioned on the predecessor of the inserted record */ - ulint** offsets,/*!< out: offsets on inserted record */ + offset_t** offsets,/*!< out: offsets on inserted record */ mem_heap_t** heap, /*!< in/out: pointer to memory heap that can be emptied, or NULL */ const dtuple_t* tuple, /*!< in: tuple to insert */ @@ -487,7 +488,7 @@ btr_page_split_and_insert( btr_cur_t* cursor, /*!< in: cursor at which to insert; when the function returns, the cursor is positioned on the predecessor of the inserted record */ - ulint** offsets,/*!< out: offsets on inserted record */ + offset_t** offsets,/*!< out: offsets on inserted record */ mem_heap_t** heap, /*!< in/out: pointer to memory heap that can be emptied, or NULL */ const dtuple_t* tuple, /*!< in: tuple to insert */ diff --git a/storage/innobase/include/btr0btr.ic b/storage/innobase/include/btr0btr.ic index c3f0d5e305e..5bb7318fefb 100644 --- a/storage/innobase/include/btr0btr.ic +++ b/storage/innobase/include/btr0btr.ic @@ -192,7 +192,7 @@ ulint btr_node_ptr_get_child_page_no( /*===========================*/ const rec_t* rec, /*!< in: node pointer record */ - const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets)/*!< in: array returned by rec_get_offsets() */ { const byte* field; ulint len; diff --git a/storage/innobase/include/btr0bulk.h b/storage/innobase/include/btr0bulk.h index 2a434c673cb..9384cb578ed 100644 --- a/storage/innobase/include/btr0bulk.h +++ b/storage/innobase/include/btr0bulk.h @@ -28,6 +28,7 @@ Created 03/11/2014 Shaohua Wang #define btr0bulk_h #include "dict0dict.h" +#include "rem0types.h" #include "page0cur.h" #include <vector> @@ -103,7 +104,7 @@ public: /** Insert a record in the page. @param[in] rec record @param[in] offsets record offsets */ - void insert(const rec_t* rec, ulint* offsets); + void insert(const rec_t* rec, offset_t* offsets); /** Mark end of insertion to the page. Scan all records to set page dirs, and set page header members. */ @@ -127,7 +128,7 @@ public: @param[in] big_rec external recrod @param[in] offsets record offsets @return error code */ - dberr_t storeExt(const big_rec_t* big_rec, ulint* offsets); + dberr_t storeExt(const big_rec_t* big_rec, offset_t* offsets); /** Get node pointer @return node pointer */ diff --git a/storage/innobase/include/btr0cur.h b/storage/innobase/include/btr0cur.h index c748b4fbc41..2954f14b310 100644 --- a/storage/innobase/include/btr0cur.h +++ b/storage/innobase/include/btr0cur.h @@ -30,6 +30,7 @@ Created 10/16/1994 Heikki Tuuri #include "dict0dict.h" #include "page0cur.h" #include "btr0types.h" +#include "rem0types.h" #include "gis0type.h" #include "my_base.h" @@ -271,7 +272,7 @@ btr_cur_optimistic_insert( specified */ btr_cur_t* cursor, /*!< in: cursor on page after which to insert; cursor stays valid */ - ulint** offsets,/*!< out: offsets on *rec */ + offset_t** offsets,/*!< out: offsets on *rec */ mem_heap_t** heap, /*!< in/out: pointer to memory heap */ dtuple_t* entry, /*!< in/out: entry to insert */ rec_t** rec, /*!< out: pointer to inserted record if @@ -307,7 +308,7 @@ btr_cur_pessimistic_insert( insertion will certainly succeed */ btr_cur_t* cursor, /*!< in: cursor after which to insert; cursor stays valid */ - ulint** offsets,/*!< out: offsets on *rec */ + offset_t** offsets,/*!< out: offsets on *rec */ mem_heap_t** heap, /*!< in/out: pointer to memory heap that can be emptied */ dtuple_t* entry, /*!< in/out: entry to insert */ @@ -341,7 +342,7 @@ btr_cur_update_alloc_zip_func( page_cur_t* cursor, /*!< in/out: B-tree page cursor */ dict_index_t* index, /*!< in: the index corresponding to cursor */ #ifdef UNIV_DEBUG - ulint* offsets,/*!< in/out: offsets of the cursor record */ + offset_t* offsets,/*!< in/out: offsets of the cursor record */ #endif /* UNIV_DEBUG */ ulint length, /*!< in: size needed */ bool create, /*!< in: true=delete-and-insert, @@ -368,7 +369,7 @@ btr_cur_update_in_place( btr_cur_t* cursor, /*!< in: cursor on the record to update; cursor stays valid and positioned on the same record */ - ulint* offsets,/*!< in/out: offsets on cursor->page_cur.rec */ + offset_t* offsets,/*!< in/out: offsets on cursor->page_cur.rec */ const upd_t* update, /*!< in: update vector */ ulint cmpl_info,/*!< in: compiler info on secondary index updates */ @@ -410,7 +411,7 @@ btr_cur_optimistic_update( btr_cur_t* cursor, /*!< in: cursor on the record to update; cursor stays valid and positioned on the same record */ - ulint** offsets,/*!< out: offsets on cursor->page_cur.rec */ + offset_t** offsets,/*!< out: offsets on cursor->page_cur.rec */ mem_heap_t** heap, /*!< in/out: pointer to NULL or memory heap */ const upd_t* update, /*!< in: update vector; this must also contain trx id and roll ptr fields */ @@ -437,7 +438,7 @@ btr_cur_pessimistic_update( btr_cur_t* cursor, /*!< in/out: cursor on the record to update; cursor may become invalid if *big_rec == NULL || !(flags & BTR_KEEP_POS_FLAG) */ - ulint** offsets,/*!< out: offsets on cursor->page_cur.rec */ + offset_t** offsets,/*!< out: offsets on cursor->page_cur.rec */ mem_heap_t** offsets_heap, /*!< in/out: pointer to memory heap that can be emptied */ @@ -469,7 +470,7 @@ btr_cur_del_mark_set_clust_rec( buf_block_t* block, /*!< in/out: buffer block of the record */ rec_t* rec, /*!< in/out: record */ dict_index_t* index, /*!< in: clustered index of the record */ - const ulint* offsets,/*!< in: rec_get_offsets(rec) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec) */ que_thr_t* thr, /*!< in: query thread */ const dtuple_t* entry, /*!< in: dtuple for the deleting record */ mtr_t* mtr) /*!< in/out: mini-transaction */ @@ -636,7 +637,7 @@ btr_estimate_number_of_different_key_vals( ulint btr_rec_get_externally_stored_len( const rec_t* rec, - const ulint* offsets); + const offset_t* offsets); /*******************************************************************//** Marks non-updated off-page fields as disowned by this record. The ownership @@ -650,7 +651,7 @@ btr_cur_disown_inherited_fields( part will be updated, or NULL */ rec_t* rec, /*!< in/out: record in a clustered index */ dict_index_t* index, /*!< in: index of the page */ - const ulint* offsets,/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets,/*!< in: array returned by rec_get_offsets() */ const upd_t* update, /*!< in: update vector */ mtr_t* mtr) /*!< in/out: mini-transaction */ MY_ATTRIBUTE((nonnull(2,3,4,5,6))); @@ -689,7 +690,7 @@ btr_store_big_rec_extern_fields( btr_pcur_t* pcur, /*!< in/out: a persistent cursor. if btr_mtr is restarted, then this can be repositioned. */ - ulint* offsets, /*!< in/out: rec_get_offsets() on + offset_t* offsets, /*!< in/out: rec_get_offsets() on pcur. the "external storage" flags in offsets will correctly correspond to rec when this function returns */ @@ -720,7 +721,7 @@ btr_free_externally_stored_field( byte* field_ref, /*!< in/out: field reference */ const rec_t* rec, /*!< in: record containing field_ref, for page_zip_write_blob_ptr(), or NULL */ - const ulint* offsets, /*!< in: rec_get_offsets(rec, index), + const offset_t* offsets, /*!< in: rec_get_offsets(rec, index), or NULL */ page_zip_des_t* page_zip, /*!< in: compressed page corresponding to rec, or NULL if rec == NULL */ @@ -777,7 +778,7 @@ protected by a lock or a page latch byte* btr_rec_copy_externally_stored_field( const rec_t* rec, - const ulint* offsets, + const offset_t* offsets, const page_size_t& page_size, ulint no, ulint* len, diff --git a/storage/innobase/include/dict0mem.h b/storage/innobase/include/dict0mem.h index df114b305c3..8c5314ed39d 100644 --- a/storage/innobase/include/dict0mem.h +++ b/storage/innobase/include/dict0mem.h @@ -832,10 +832,6 @@ a certain index.*/ system clustered index when there is no primary key. */ const char innobase_index_reserve_name[] = "GEN_CLUST_INDEX"; -/* Estimated number of offsets in records (based on columns) -to start with. */ -#define OFFS_IN_REC_NORMAL_SIZE 100 - /** Data structure for an index. Most fields will be initialized to 0, NULL or FALSE in dict_mem_index_create(). */ struct dict_index_t{ @@ -1112,7 +1108,7 @@ struct dict_index_t{ @param[in] offsets offsets @return true if row is historical */ bool - vers_history_row(const rec_t* rec, const ulint* offsets); + vers_history_row(const rec_t* rec, const offset_t* offsets); /** Check if record in secondary index is historical row. @param[in] rec record in a secondary index diff --git a/storage/innobase/include/gis0rtree.h b/storage/innobase/include/gis0rtree.h index 126ca680c1d..b863f1cf3ef 100644 --- a/storage/innobase/include/gis0rtree.h +++ b/storage/innobase/include/gis0rtree.h @@ -28,6 +28,7 @@ Created 2013/03/27 Jimmy Yang and Allen Lai #define gis0rtree_h #include "btr0cur.h" +#include "rem0types.h" /* Whether MBR 'a' contains 'b' */ #define MBR_CONTAIN_CMP(a, b) \ @@ -88,7 +89,7 @@ rtr_page_split_and_insert( btr_cur_t* cursor, /*!< in/out: cursor at which to insert; when the function returns, the cursor is positioned on the predecessor of the inserted record */ - ulint** offsets,/*!< out: offsets on inserted record */ + offset_t** offsets,/*!< out: offsets on inserted record */ mem_heap_t** heap, /*!< in/out: pointer to memory heap, or NULL */ const dtuple_t* tuple, /*!< in: tuple to insert */ ulint n_ext, /*!< in: number of externally stored columns */ @@ -150,7 +151,7 @@ rtr_rec_cal_increase( dtuple in some of the common fields, or which has an equal number or more fields than dtuple */ - const ulint* offsets,/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets,/*!< in: array returned by rec_get_offsets() */ double* area); /*!< out: increased area */ /****************************************************************//** @@ -273,7 +274,7 @@ void rtr_get_mbr_from_rec( /*=================*/ const rec_t* rec, /*!< in: data tuple */ - const ulint* offsets,/*!< in: offsets array */ + const offset_t* offsets,/*!< in: offsets array */ rtr_mbr_t* mbr); /*!< out MBR */ /****************************************************************//** @@ -305,10 +306,10 @@ rtr_page_get_father( Returns the father block to a page. It is assumed that mtr holds an X or SX latch on the tree. @return rec_get_offsets() of the node pointer record */ -ulint* +offset_t* rtr_page_get_father_block( /*======================*/ - ulint* offsets,/*!< in: work area for the return value */ + offset_t* offsets,/*!< in: work area for the return value */ mem_heap_t* heap, /*!< in: memory heap to use */ dict_index_t* index, /*!< in: b-tree index */ buf_block_t* block, /*!< in: child page in the index */ @@ -415,8 +416,8 @@ rtr_merge_and_update_mbr( /*=====================*/ btr_cur_t* cursor, /*!< in/out: cursor */ btr_cur_t* cursor2, /*!< in: the other cursor */ - ulint* offsets, /*!< in: rec offsets */ - ulint* offsets2, /*!< in: rec offsets */ + offset_t* offsets, /*!< in: rec offsets */ + offset_t* offsets2, /*!< in: rec offsets */ page_t* child_page, /*!< in: the child page. */ mtr_t* mtr); /*!< in: mtr */ @@ -436,8 +437,8 @@ rtr_merge_mbr_changed( /*==================*/ btr_cur_t* cursor, /*!< in: cursor */ btr_cur_t* cursor2, /*!< in: the other cursor */ - ulint* offsets, /*!< in: rec offsets */ - ulint* offsets2, /*!< in: rec offsets */ + offset_t* offsets, /*!< in: rec offsets */ + offset_t* offsets2, /*!< in: rec offsets */ rtr_mbr_t* new_mbr); /*!< out: MBR to update */ @@ -448,7 +449,7 @@ bool rtr_update_mbr_field( /*=================*/ btr_cur_t* cursor, /*!< in: cursor pointed to rec.*/ - ulint* offsets, /*!< in: offsets on rec. */ + offset_t* offsets, /*!< in: offsets on rec. */ btr_cur_t* cursor2, /*!< in/out: cursor pointed to rec that should be deleted. this cursor is for btr_compress to diff --git a/storage/innobase/include/gis0rtree.ic b/storage/innobase/include/gis0rtree.ic index d9309550a5f..03e23830e70 100644 --- a/storage/innobase/include/gis0rtree.ic +++ b/storage/innobase/include/gis0rtree.ic @@ -40,7 +40,7 @@ rtr_page_cal_mbr( rec_t* rec; const byte* field; ulint len; - ulint* offsets = NULL; + offset_t* offsets = NULL; double bmin, bmax; double* amin; double* amax; diff --git a/storage/innobase/include/handler0alter.h b/storage/innobase/include/handler0alter.h index 45811c591c9..9b70c607459 100644 --- a/storage/innobase/include/handler0alter.h +++ b/storage/innobase/include/handler0alter.h @@ -22,6 +22,8 @@ this program; if not, write to the Free Software Foundation, Inc., Smart ALTER TABLE *******************************************************/ +#include "rem0types.h" + /*************************************************************//** Copies an InnoDB record to table->record[0]. */ void @@ -30,7 +32,7 @@ innobase_rec_to_mysql( struct TABLE* table, /*!< in/out: MySQL table */ const rec_t* rec, /*!< in: record */ const dict_index_t* index, /*!< in: index */ - const ulint* offsets)/*!< in: rec_get_offsets( + const offset_t* offsets)/*!< in: rec_get_offsets( rec, index, ...) */ MY_ATTRIBUTE((nonnull)); diff --git a/storage/innobase/include/lock0lock.h b/storage/innobase/include/lock0lock.h index 8ae0b062729..11000620e8c 100644 --- a/storage/innobase/include/lock0lock.h +++ b/storage/innobase/include/lock0lock.h @@ -300,7 +300,7 @@ lock_clust_rec_modify_check_and_lock( const rec_t* rec, /*!< in: record which should be modified */ dict_index_t* index, /*!< in: clustered index */ - const ulint* offsets,/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec, index) */ que_thr_t* thr) /*!< in: query thread */ MY_ATTRIBUTE((warn_unused_result)); /*********************************************************************//** @@ -338,7 +338,7 @@ lock_sec_rec_read_check_and_lock( be read or passed over by a read cursor */ dict_index_t* index, /*!< in: secondary index */ - const ulint* offsets,/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec, index) */ lock_mode mode, /*!< in: mode of the lock which the read cursor should set on records: LOCK_S or LOCK_X; the @@ -366,7 +366,7 @@ lock_clust_rec_read_check_and_lock( be read or passed over by a read cursor */ dict_index_t* index, /*!< in: clustered index */ - const ulint* offsets,/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec, index) */ lock_mode mode, /*!< in: mode of the lock which the read cursor should set on records: LOCK_S or LOCK_X; the @@ -415,7 +415,7 @@ lock_clust_rec_cons_read_sees( const rec_t* rec, /*!< in: user record which should be read or passed over by a read cursor */ dict_index_t* index, /*!< in: clustered index */ - const ulint* offsets,/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec, index) */ ReadView* view); /*!< in: consistent read view */ /*********************************************************************//** Checks that a non-clustered index record is seen in a consistent read. @@ -547,7 +547,7 @@ lock_report_trx_id_insanity( trx_id_t trx_id, /*!< in: trx id */ const rec_t* rec, /*!< in: user record */ dict_index_t* index, /*!< in: index */ - const ulint* offsets, /*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets, /*!< in: rec_get_offsets(rec, index) */ trx_id_t max_trx_id); /*!< in: trx_sys.get_max_trx_id() */ /*********************************************************************//** Prints info of locks for all transactions. @@ -772,7 +772,7 @@ lock_check_trx_id_sanity( trx_id_t trx_id, /*!< in: trx id */ const rec_t* rec, /*!< in: user record */ dict_index_t* index, /*!< in: index */ - const ulint* offsets); /*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets); /*!< in: rec_get_offsets(rec, index) */ #ifdef UNIV_DEBUG /*******************************************************************//** Check if the transaction holds any locks on the sys tables diff --git a/storage/innobase/include/lock0priv.h b/storage/innobase/include/lock0priv.h index 9b80f593e30..5e00e1bb6f1 100644 --- a/storage/innobase/include/lock0priv.h +++ b/storage/innobase/include/lock0priv.h @@ -35,6 +35,7 @@ those functions in lock/ */ #endif #include "hash0hash.h" +#include "rem0types.h" #include "trx0trx.h" #ifndef UINT32_MAX @@ -468,7 +469,7 @@ lock_clust_rec_some_has_impl( /*=========================*/ const rec_t* rec, /*!< in: user record */ const dict_index_t* index, /*!< in: clustered index */ - const ulint* offsets)/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets)/*!< in: rec_get_offsets(rec, index) */ MY_ATTRIBUTE((warn_unused_result)); /*********************************************************************//** diff --git a/storage/innobase/include/lock0priv.ic b/storage/innobase/include/lock0priv.ic index 80a63271256..7062e3f7082 100644 --- a/storage/innobase/include/lock0priv.ic +++ b/storage/innobase/include/lock0priv.ic @@ -59,7 +59,7 @@ lock_clust_rec_some_has_impl( /*=========================*/ const rec_t* rec, /*!< in: user record */ const dict_index_t* index, /*!< in: clustered index */ - const ulint* offsets)/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets)/*!< in: rec_get_offsets(rec, index) */ { ut_ad(dict_index_is_clust(index)); ut_ad(page_rec_is_user_rec(rec)); diff --git a/storage/innobase/include/page0cur.h b/storage/innobase/include/page0cur.h index f21506d0475..5accbcd76d5 100644 --- a/storage/innobase/include/page0cur.h +++ b/storage/innobase/include/page0cur.h @@ -29,6 +29,7 @@ Created 10/4/1994 Heikki Tuuri #include "buf0types.h" #include "page0page.h" +#include "rem0types.h" #include "rem0rec.h" #include "data0data.h" #include "mtr0mtr.h" @@ -151,7 +152,7 @@ page_cur_tuple_insert( page_cur_t* cursor, /*!< in/out: a page cursor */ const dtuple_t* tuple, /*!< in: pointer to a data tuple */ dict_index_t* index, /*!< in: record descriptor */ - ulint** offsets,/*!< out: offsets on *rec */ + offset_t** offsets,/*!< out: offsets on *rec */ mem_heap_t** heap, /*!< in/out: pointer to memory heap, or NULL */ ulint n_ext, /*!< in: number of externally stored columns */ mtr_t* mtr) /*!< in: mini-transaction handle, or NULL */ @@ -175,7 +176,7 @@ page_cur_rec_insert( page_cur_t* cursor, /*!< in/out: a page cursor */ const rec_t* rec, /*!< in: record to insert */ dict_index_t* index, /*!< in: record descriptor */ - ulint* offsets,/*!< in/out: rec_get_offsets(rec, index) */ + offset_t* offsets,/*!< in/out: rec_get_offsets(rec, index) */ mtr_t* mtr); /*!< in: mini-transaction handle, or NULL */ /***********************************************************//** Inserts a record next to page cursor on an uncompressed page. @@ -189,7 +190,7 @@ page_cur_insert_rec_low( which the new record is inserted */ dict_index_t* index, /*!< in: record descriptor */ const rec_t* rec, /*!< in: pointer to a physical record */ - ulint* offsets,/*!< in/out: rec_get_offsets(rec, index) */ + offset_t* offsets,/*!< in/out: rec_get_offsets(rec, index) */ mtr_t* mtr) /*!< in: mini-transaction handle, or NULL */ MY_ATTRIBUTE((nonnull(1,2,3,4), warn_unused_result)); @@ -211,7 +212,7 @@ page_cur_insert_rec_zip( page_cur_t* cursor, /*!< in/out: page cursor */ dict_index_t* index, /*!< in: record descriptor */ const rec_t* rec, /*!< in: pointer to a physical record */ - ulint* offsets,/*!< in/out: rec_get_offsets(rec, index) */ + offset_t* offsets,/*!< in/out: rec_get_offsets(rec, index) */ mtr_t* mtr) /*!< in: mini-transaction handle, or NULL */ MY_ATTRIBUTE((nonnull(1,2,3,4), warn_unused_result)); /*************************************************************//** @@ -237,7 +238,7 @@ page_cur_delete_rec( /*================*/ page_cur_t* cursor, /*!< in/out: a page cursor */ const dict_index_t* index, /*!< in: record descriptor */ - const ulint* offsets,/*!< in: rec_get_offsets( + const offset_t* offsets,/*!< in: rec_get_offsets( cursor->rec, index) */ mtr_t* mtr); /*!< in: mini-transaction handle */ @@ -385,14 +386,14 @@ page_delete_rec( page_cur_t* pcur, /*!< in/out: page cursor on record to delete */ page_zip_des_t* page_zip,/*!< in: compressed page descriptor */ - const ulint* offsets);/*!< in: offsets for record */ + const offset_t* offsets);/*!< in: offsets for record */ /** Index page cursor */ struct page_cur_t{ const dict_index_t* index; rec_t* rec; /*!< pointer to a record on page */ - ulint* offsets; + offset_t* offsets; buf_block_t* block; /*!< pointer to the block containing rec */ }; diff --git a/storage/innobase/include/page0cur.ic b/storage/innobase/include/page0cur.ic index dff829089bb..1ccb7f9a80d 100644 --- a/storage/innobase/include/page0cur.ic +++ b/storage/innobase/include/page0cur.ic @@ -259,7 +259,7 @@ page_cur_tuple_insert( page_cur_t* cursor, /*!< in/out: a page cursor */ const dtuple_t* tuple, /*!< in: pointer to a data tuple */ dict_index_t* index, /*!< in: record descriptor */ - ulint** offsets,/*!< out: offsets on *rec */ + offset_t** offsets,/*!< out: offsets on *rec */ mem_heap_t** heap, /*!< in/out: pointer to memory heap, or NULL */ ulint n_ext, /*!< in: number of externally stored columns */ mtr_t* mtr) /*!< in: mini-transaction handle, or NULL */ @@ -312,7 +312,7 @@ page_cur_rec_insert( page_cur_t* cursor, /*!< in/out: a page cursor */ const rec_t* rec, /*!< in: record to insert */ dict_index_t* index, /*!< in: record descriptor */ - ulint* offsets,/*!< in/out: rec_get_offsets(rec, index) */ + offset_t* offsets,/*!< in/out: rec_get_offsets(rec, index) */ mtr_t* mtr) /*!< in: mini-transaction handle, or NULL */ { if (buf_block_get_page_zip(cursor->block)) { diff --git a/storage/innobase/include/page0page.h b/storage/innobase/include/page0page.h index e6df074e4a9..56091c455e1 100644 --- a/storage/innobase/include/page0page.h +++ b/storage/innobase/include/page0page.h @@ -32,6 +32,7 @@ Created 2/2/1994 Heikki Tuuri #include "buf0buf.h" #include "data0data.h" #include "dict0dict.h" +#include "rem0types.h" #include "rem0rec.h" #endif /* !UNIV_INNOCHECKSUM*/ #include "fsp0fsp.h" @@ -963,7 +964,7 @@ page_mem_free( rec_t* rec, /*!< in: pointer to the (origin of) record */ const dict_index_t* index, /*!< in: index of rec */ - const ulint* offsets);/*!< in: array returned by + const offset_t* offsets);/*!< in: array returned by rec_get_offsets() */ /** Read the PAGE_DIRECTION field from a byte. @@ -1223,7 +1224,7 @@ void page_rec_print( /*===========*/ const rec_t* rec, /*!< in: physical record */ - const ulint* offsets);/*!< in: record descriptor */ + const offset_t* offsets);/*!< in: record descriptor */ # ifdef UNIV_BTR_PRINT /***************************************************************//** This is used to print the contents of the directory for @@ -1270,7 +1271,7 @@ ibool page_rec_validate( /*==============*/ const rec_t* rec, /*!< in: physical record */ - const ulint* offsets);/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets);/*!< in: array returned by rec_get_offsets() */ #ifdef UNIV_DEBUG /***************************************************************//** Checks that the first directory slot points to the infimum record and diff --git a/storage/innobase/include/page0page.ic b/storage/innobase/include/page0page.ic index e5368938531..9ff7327ba66 100644 --- a/storage/innobase/include/page0page.ic +++ b/storage/innobase/include/page0page.ic @@ -1004,7 +1004,7 @@ page_mem_free( rec_t* rec, /*!< in: pointer to the (origin of) record */ const dict_index_t* index, /*!< in: index of rec */ - const ulint* offsets) /*!< in: array returned by + const offset_t* offsets) /*!< in: array returned by rec_get_offsets() */ { rec_t* free; diff --git a/storage/innobase/include/page0types.h b/storage/innobase/include/page0types.h index 02d0cf29ec5..4debd639fa4 100644 --- a/storage/innobase/include/page0types.h +++ b/storage/innobase/include/page0types.h @@ -28,6 +28,7 @@ Created 2/2/1994 Heikki Tuuri #include "dict0types.h" #include "mtr0types.h" +#include "rem0types.h" #include <map> @@ -184,7 +185,7 @@ page_zip_dir_delete( page_zip_des_t* page_zip,/*!< in/out: compressed page */ byte* rec, /*!< in: deleted record */ dict_index_t* index, /*!< in: index of rec */ - const ulint* offsets,/*!< in: rec_get_offsets(rec) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec) */ const byte* free) /*!< in: previous start of the free list */ MY_ATTRIBUTE((nonnull(1,2,3,4))); diff --git a/storage/innobase/include/page0zip.h b/storage/innobase/include/page0zip.h index 8672def36e6..899cc1aab22 100644 --- a/storage/innobase/include/page0zip.h +++ b/storage/innobase/include/page0zip.h @@ -47,6 +47,7 @@ Created June 2005 by Marko Makela #endif /* !UNIV_INNOCHECKSUM */ #include "buf0types.h" +#include "rem0types.h" #ifndef UNIV_INNOCHECKSUM #include "dict0types.h" @@ -287,7 +288,7 @@ page_zip_write_rec( page_zip_des_t* page_zip,/*!< in/out: compressed page */ const byte* rec, /*!< in: record being written */ dict_index_t* index, /*!< in: the index the record belongs to */ - const ulint* offsets,/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec, index) */ ulint create) /*!< in: nonzero=insert, zero=update */ MY_ATTRIBUTE((nonnull)); @@ -312,7 +313,7 @@ page_zip_write_blob_ptr( const byte* rec, /*!< in/out: record whose data is being written */ dict_index_t* index, /*!< in: index of the page */ - const ulint* offsets,/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec, index) */ ulint n, /*!< in: column index */ mtr_t* mtr); /*!< in: mini-transaction handle, or NULL if no logging is needed */ @@ -351,7 +352,7 @@ void page_zip_write_trx_id_and_roll_ptr( page_zip_des_t* page_zip, byte* rec, - const ulint* offsets, + const offset_t* offsets, ulint trx_id_col, trx_id_t trx_id, roll_ptr_t roll_ptr, @@ -415,7 +416,7 @@ page_zip_dir_delete( page_zip_des_t* page_zip, /*!< in/out: compressed page */ byte* rec, /*!< in: deleted record */ const dict_index_t* index, /*!< in: index of rec */ - const ulint* offsets, /*!< in: rec_get_offsets(rec) */ + const offset_t* offsets, /*!< in: rec_get_offsets(rec) */ const byte* free) /*!< in: previous start of the free list */ MY_ATTRIBUTE((nonnull(1,2,3,4))); diff --git a/storage/innobase/include/rem0cmp.h b/storage/innobase/include/rem0cmp.h index 9582b0df393..0877c7b5b6a 100644 --- a/storage/innobase/include/rem0cmp.h +++ b/storage/innobase/include/rem0cmp.h @@ -89,7 +89,7 @@ cmp_dtuple_rec_with_gis( /*====================*/ const dtuple_t* dtuple, const rec_t* rec, - const ulint* offsets, + const offset_t* offsets, page_cur_mode_t mode) MY_ATTRIBUTE((nonnull)); @@ -105,7 +105,7 @@ int cmp_dtuple_rec_with_gis_internal( const dtuple_t* dtuple, const rec_t* rec, - const ulint* offsets); + const offset_t* offsets); /** Compare a data tuple to a physical record. @param[in] dtuple data tuple @@ -121,7 +121,7 @@ int cmp_dtuple_rec_with_match_low( const dtuple_t* dtuple, const rec_t* rec, - const ulint* offsets, + const offset_t* offsets, ulint n_cmp, ulint* matched_fields) MY_ATTRIBUTE((nonnull)); @@ -145,7 +145,7 @@ cmp_dtuple_rec_with_match_bytes( const dtuple_t* dtuple, const rec_t* rec, const dict_index_t* index, - const ulint* offsets, + const offset_t* offsets, ulint* matched_fields, ulint* matched_bytes) MY_ATTRIBUTE((warn_unused_result)); @@ -162,7 +162,7 @@ int cmp_dtuple_rec( const dtuple_t* dtuple, const rec_t* rec, - const ulint* offsets); + const offset_t* offsets); /**************************************************************//** Checks if a dtuple is a prefix of a record. The last field in dtuple is allowed to be a prefix of the corresponding field in the record. @@ -172,7 +172,7 @@ cmp_dtuple_is_prefix_of_rec( /*========================*/ const dtuple_t* dtuple, /*!< in: data tuple */ const rec_t* rec, /*!< in: physical record */ - const ulint* offsets);/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets);/*!< in: array returned by rec_get_offsets() */ /** Compare two physical records that contain the same number of columns, none of which are stored externally. @retval positive if rec1 (including non-ordering columns) is greater than rec2 @@ -183,8 +183,8 @@ cmp_rec_rec_simple( /*===============*/ const rec_t* rec1, /*!< in: physical record */ const rec_t* rec2, /*!< in: physical record */ - const ulint* offsets1,/*!< in: rec_get_offsets(rec1, ...) */ - const ulint* offsets2,/*!< in: rec_get_offsets(rec2, ...) */ + const offset_t* offsets1,/*!< in: rec_get_offsets(rec1, ...) */ + const offset_t* offsets2,/*!< in: rec_get_offsets(rec2, ...) */ const dict_index_t* index, /*!< in: data dictionary index */ struct TABLE* table) /*!< in: MySQL table, for reporting duplicate key value if applicable, @@ -209,8 +209,8 @@ int cmp_rec_rec_with_match( const rec_t* rec1, const rec_t* rec2, - const ulint* offsets1, - const ulint* offsets2, + const offset_t* offsets1, + const offset_t* offsets2, const dict_index_t* index, bool nulls_unequal, ulint* matched_fields); @@ -231,8 +231,8 @@ int cmp_rec_rec( const rec_t* rec1, const rec_t* rec2, - const ulint* offsets1, - const ulint* offsets2, + const offset_t* offsets1, + const offset_t* offsets2, const dict_index_t* index, ulint* matched_fields = NULL); diff --git a/storage/innobase/include/rem0cmp.ic b/storage/innobase/include/rem0cmp.ic index 2412d22e8fa..5ac3838f244 100644 --- a/storage/innobase/include/rem0cmp.ic +++ b/storage/innobase/include/rem0cmp.ic @@ -68,8 +68,8 @@ int cmp_rec_rec( const rec_t* rec1, const rec_t* rec2, - const ulint* offsets1, - const ulint* offsets2, + const offset_t* offsets1, + const offset_t* offsets2, const dict_index_t* index, ulint* matched_fields) { diff --git a/storage/innobase/include/rem0rec.h b/storage/innobase/include/rem0rec.h index 0c49c223e10..4b7812e3bd6 100644 --- a/storage/innobase/include/rem0rec.h +++ b/storage/innobase/include/rem0rec.h @@ -90,45 +90,86 @@ The status is stored in the low-order bits. */ /* Length of a B-tree node pointer, in bytes */ #define REC_NODE_PTR_SIZE 4 +#ifndef UNIV_INNOCHECKSUM /** SQL null flag in a 1-byte offset of ROW_FORMAT=REDUNDANT records */ -#define REC_1BYTE_SQL_NULL_MASK 0x80UL +static const offset_t REC_1BYTE_SQL_NULL_MASK= 0x80; /** SQL null flag in a 2-byte offset of ROW_FORMAT=REDUNDANT records */ -#define REC_2BYTE_SQL_NULL_MASK 0x8000UL +static const offset_t REC_2BYTE_SQL_NULL_MASK= 0x8000; /** In a 2-byte offset of ROW_FORMAT=REDUNDANT records, the second most significant bit denotes that the tail of a field is stored off-page. */ -#define REC_2BYTE_EXTERN_MASK 0x4000UL +static const offset_t REC_2BYTE_EXTERN_MASK= 0x4000; + +static const size_t RECORD_OFFSET= 2; +static const size_t INDEX_OFFSET= + RECORD_OFFSET + sizeof(rec_t *) / sizeof(offset_t); +#endif /* UNIV_INNOCHECKSUM */ -#ifdef UNIV_DEBUG -/* Length of the rec_get_offsets() header */ -# define REC_OFFS_HEADER_SIZE 4 -#else /* UNIV_DEBUG */ /* Length of the rec_get_offsets() header */ -# define REC_OFFS_HEADER_SIZE 2 +static const size_t REC_OFFS_HEADER_SIZE= +#ifdef UNIV_DEBUG +#ifndef UNIV_INNOCHECKSUM + sizeof(rec_t *) / sizeof(offset_t) + + sizeof(dict_index_t *) / sizeof(offset_t) + +#endif /* UNIV_INNOCHECKSUM */ #endif /* UNIV_DEBUG */ + 2; /* Number of elements that should be initially allocated for the offsets[] array, first passed to rec_get_offsets() */ -#define REC_OFFS_NORMAL_SIZE OFFS_IN_REC_NORMAL_SIZE -#define REC_OFFS_SMALL_SIZE 10 +static const size_t REC_OFFS_NORMAL_SIZE= 300; +static const size_t REC_OFFS_SMALL_SIZE= 18; +static const size_t REC_OFFS_SEC_INDEX_SIZE= + /* PK max key parts */ 16 + /* sec idx max key parts */ 16 + + /* child page number for non-leaf pages */ 1; /** Get the base address of offsets. The extra_size is stored at this position, and following positions hold the end offsets of the fields. */ #define rec_offs_base(offsets) (offsets + REC_OFFS_HEADER_SIZE) +#ifndef UNIV_INNOCHECKSUM +/* Offset consists of two parts: 2 upper bits is type and all other bits is +value */ + +/** Only 4 different values is possible! */ +enum field_type_t +{ + /** normal field */ + STORED_IN_RECORD= 0 << 14, + /** this field is stored off-page */ + STORED_OFFPAGE= 1 << 14, + /** just an SQL NULL */ + SQL_NULL= 2 << 14, + /** instantly added field */ + DEFAULT= 3 << 14, +}; + +/** without 2 upper bits */ +static const offset_t DATA_MASK= 0x3fff; +/** 2 upper bits */ +static const offset_t TYPE_MASK= ~DATA_MASK; +inline field_type_t get_type(offset_t n) +{ + return static_cast<field_type_t>(n & TYPE_MASK); +} +inline void set_type(offset_t &n, field_type_t type) +{ + n= (n & DATA_MASK) | static_cast<offset_t>(type); +} +inline offset_t get_value(offset_t n) { return n & DATA_MASK; } +inline offset_t combine(offset_t value, field_type_t type) +{ + return get_value(value) | static_cast<offset_t>(type); +} + /** Compact flag ORed to the extra size returned by rec_get_offsets() */ -const ulint REC_OFFS_COMPACT = ~(ulint(~0) >> 1); -/** SQL NULL flag in offsets returned by rec_get_offsets() */ -const ulint REC_OFFS_SQL_NULL = REC_OFFS_COMPACT; +const offset_t REC_OFFS_COMPACT= ~(offset_t(~0) >> 1); /** External flag in offsets returned by rec_get_offsets() */ -const ulint REC_OFFS_EXTERNAL = REC_OFFS_COMPACT >> 1; +const offset_t REC_OFFS_EXTERNAL= REC_OFFS_COMPACT >> 1; /** Default value flag in offsets returned by rec_get_offsets() */ -const ulint REC_OFFS_DEFAULT = REC_OFFS_COMPACT >> 2; -/** Mask for offsets returned by rec_get_offsets() */ -const ulint REC_OFFS_MASK = REC_OFFS_DEFAULT - 1; - -#ifndef UNIV_INNOCHECKSUM +const offset_t REC_OFFS_DEFAULT= REC_OFFS_COMPACT >> 2; +const offset_t REC_OFFS_MASK= REC_OFFS_DEFAULT - 1; /******************************************************//** The following function is used to get the pointer of the next chained record on the same page. @@ -463,7 +504,7 @@ offsets form. If the field is SQL null, the flag is ORed in the returned value. @return offset of the start of the field, SQL null flag ORed */ UNIV_INLINE -ulint +uint8_t rec_1_get_field_end_info( /*=====================*/ const rec_t* rec, /*!< in: record */ @@ -477,7 +518,7 @@ value. @return offset of the start of the field, SQL null flag and extern storage flag ORed */ UNIV_INLINE -ulint +uint16_t rec_2_get_field_end_info( /*=====================*/ const rec_t* rec, /*!< in: record */ @@ -518,11 +559,11 @@ rec_get_n_extern_new( (ULINT_UNDEFINED to compute all offsets) @param[in,out] heap memory heap @return the new offsets */ -ulint* +offset_t* rec_get_offsets_func( const rec_t* rec, const dict_index_t* index, - ulint* offsets, + offset_t* offsets, bool leaf, ulint n_fields, #ifdef UNIV_DEBUG @@ -557,7 +598,7 @@ rec_get_offsets_reverse( const dict_index_t* index, /*!< in: record descriptor */ ulint node_ptr,/*!< in: nonzero=node pointer, 0=leaf node */ - ulint* offsets)/*!< in/out: array consisting of + offset_t* offsets)/*!< in/out: array consisting of offsets[0] allocated elements */ MY_ATTRIBUTE((nonnull)); #ifdef UNIV_DEBUG @@ -570,7 +611,7 @@ bool rec_offs_validate( const rec_t* rec, const dict_index_t* index, - const ulint* offsets) + const offset_t* offsets) MY_ATTRIBUTE((nonnull(3), warn_unused_result)); /** Update debug data in offsets, in order to tame rec_offs_validate(). @param[in] rec record @@ -582,7 +623,7 @@ rec_offs_make_valid( const rec_t* rec, const dict_index_t* index, bool leaf, - ulint* offsets) + offset_t* offsets) MY_ATTRIBUTE((nonnull)); #else # define rec_offs_make_valid(rec, index, leaf, offsets) @@ -619,17 +660,16 @@ The following function is used to get an offset to the nth data field in a record. @return offset from the origin of rec */ UNIV_INLINE -ulint +offset_t rec_get_nth_field_offs( /*===================*/ - const ulint* offsets,/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets,/*!< in: array returned by rec_get_offsets() */ ulint n, /*!< in: index of the field */ ulint* len) /*!< out: length of the field; UNIV_SQL_NULL if SQL null */ MY_ATTRIBUTE((nonnull)); #define rec_get_nth_field(rec, offsets, n, len) \ ((rec) + rec_get_nth_field_offs(offsets, n, len)) - /******************************************************//** Determine if the offsets are for a record containing null BLOB pointers. @return first field containing a null BLOB pointer, or NULL if none found */ @@ -638,7 +678,7 @@ const byte* rec_offs_any_null_extern( /*=====================*/ const rec_t* rec, /*!< in: record */ - const ulint* offsets) /*!< in: rec_get_offsets(rec) */ + const offset_t* offsets) /*!< in: rec_get_offsets(rec) */ MY_ATTRIBUTE((warn_unused_result)); /** Mark the nth field as externally stored. @@ -646,7 +686,7 @@ rec_offs_any_null_extern( @param[in] n nth field */ void rec_offs_make_nth_extern( - ulint* offsets, + offset_t* offsets, const ulint n); /** Determine the number of allocated elements for an array of offsets. @@ -654,7 +694,7 @@ rec_offs_make_nth_extern( @return number of elements */ inline ulint -rec_offs_get_n_alloc(const ulint* offsets) +rec_offs_get_n_alloc(const offset_t* offsets) { ulint n_alloc; ut_ad(offsets); @@ -669,7 +709,7 @@ rec_offs_get_n_alloc(const ulint* offsets) @return number of fields */ inline ulint -rec_offs_n_fields(const ulint* offsets) +rec_offs_n_fields(const offset_t* offsets) { ulint n_fields; ut_ad(offsets); @@ -685,19 +725,12 @@ rec_offs_n_fields(const ulint* offsets) @param[in] offsets rec_get_offsets() @param[in] n nth field @param[in] flag flag to extract -@return the flag of the record field */ -inline -ulint -rec_offs_nth_flag(const ulint* offsets, ulint n, ulint flag) +@return type of the record field */ +inline field_type_t rec_offs_nth_type(const offset_t *offsets, ulint n) { - ut_ad(rec_offs_validate(NULL, NULL, offsets)); - ut_ad(n < rec_offs_n_fields(offsets)); - /* The DEFAULT, NULL, EXTERNAL flags are mutually exclusive. */ - ut_ad(ut_is_2pow(rec_offs_base(offsets)[1 + n] - & (REC_OFFS_DEFAULT - | REC_OFFS_SQL_NULL - | REC_OFFS_EXTERNAL))); - return rec_offs_base(offsets)[1 + n] & flag; + ut_ad(rec_offs_validate(NULL, NULL, offsets)); + ut_ad(n < rec_offs_n_fields(offsets)); + return get_type(rec_offs_base(offsets)[1 + n]); } /** Determine if a record field is missing @@ -705,11 +738,9 @@ rec_offs_nth_flag(const ulint* offsets, ulint n, ulint flag) @param[in] offsets rec_get_offsets() @param[in] n nth field @return nonzero if default bit is set */ -inline -ulint -rec_offs_nth_default(const ulint* offsets, ulint n) +inline ulint rec_offs_nth_default(const offset_t *offsets, ulint n) { - return rec_offs_nth_flag(offsets, n, REC_OFFS_DEFAULT); + return rec_offs_nth_type(offsets, n) == DEFAULT; } /** Determine if a record field is SQL NULL @@ -717,11 +748,9 @@ rec_offs_nth_default(const ulint* offsets, ulint n) @param[in] offsets rec_get_offsets() @param[in] n nth field @return nonzero if SQL NULL set */ -inline -ulint -rec_offs_nth_sql_null(const ulint* offsets, ulint n) +inline ulint rec_offs_nth_sql_null(const offset_t *offsets, ulint n) { - return rec_offs_nth_flag(offsets, n, REC_OFFS_SQL_NULL); + return rec_offs_nth_type(offsets, n) == SQL_NULL; } /** Determine if a record field is stored off-page. @@ -729,54 +758,46 @@ rec_offs_nth_sql_null(const ulint* offsets, ulint n) @param[in] n nth field Returns nonzero if the extern bit is set in nth field of rec. @return nonzero if externally stored */ -inline -ulint -rec_offs_nth_extern(const ulint* offsets, ulint n) +inline ulint rec_offs_nth_extern(const offset_t *offsets, ulint n) { - return rec_offs_nth_flag(offsets, n, REC_OFFS_EXTERNAL); + return rec_offs_nth_type(offsets, n) == STORED_OFFPAGE; } /** Get a global flag of a record. @param[in] offsets rec_get_offsets() @param[in] flag flag to extract @return the flag of the record field */ -inline -ulint -rec_offs_any_flag(const ulint* offsets, ulint flag) +inline ulint rec_offs_any_flag(const offset_t *offsets, ulint flag) { - ut_ad(rec_offs_validate(NULL, NULL, offsets)); - return *rec_offs_base(offsets) & flag; + ut_ad(rec_offs_validate(NULL, NULL, offsets)); + return *rec_offs_base(offsets) & flag; } /** Determine if the offsets are for a record containing off-page columns. @param[in] offsets rec_get_offsets() @return nonzero if any off-page columns exist */ -inline bool rec_offs_any_extern(const ulint* offsets) +inline bool rec_offs_any_extern(const offset_t *offsets) { - return rec_offs_any_flag(offsets, REC_OFFS_EXTERNAL); + return rec_offs_any_flag(offsets, REC_OFFS_EXTERNAL); } /** Determine if the offsets are for a record that is missing fields. @param[in] offsets rec_get_offsets() @return nonzero if any fields need to be replaced with dict_index_t::instant_field_value() */ -inline -ulint -rec_offs_any_default(const ulint* offsets) +inline ulint rec_offs_any_default(const offset_t *offsets) { - return rec_offs_any_flag(offsets, REC_OFFS_DEFAULT); + return rec_offs_any_flag(offsets, REC_OFFS_DEFAULT); } /** Determine if the offsets are for other than ROW_FORMAT=REDUNDANT. @param[in] offsets rec_get_offsets() @return nonzero if ROW_FORMAT is COMPACT,DYNAMIC or COMPRESSED @retval 0 if ROW_FORMAT=REDUNDANT */ -inline -ulint -rec_offs_comp(const ulint* offsets) +inline ulint rec_offs_comp(const offset_t *offsets) { - ut_ad(rec_offs_validate(NULL, NULL, offsets)); - return(*rec_offs_base(offsets) & REC_OFFS_COMPACT); + ut_ad(rec_offs_validate(NULL, NULL, offsets)); + return (*rec_offs_base(offsets) & REC_OFFS_COMPACT); } /** Determine if the record is the metadata pseudo-record @@ -806,7 +827,7 @@ const byte* rec_get_nth_cfield( const rec_t* rec, const dict_index_t* index, - const ulint* offsets, + const offset_t* offsets, ulint n, ulint* len) { @@ -824,7 +845,7 @@ UNIV_INLINE ulint rec_offs_nth_size( /*==============*/ - const ulint* offsets,/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets,/*!< in: array returned by rec_get_offsets() */ ulint n) /*!< in: nth field */ MY_ATTRIBUTE((warn_unused_result)); @@ -835,7 +856,7 @@ UNIV_INLINE ulint rec_offs_n_extern( /*==============*/ - const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets)/*!< in: array returned by rec_get_offsets() */ MY_ATTRIBUTE((warn_unused_result)); /***********************************************************//** This is used to modify the value of an already existing field in a record. @@ -848,7 +869,7 @@ void rec_set_nth_field( /*==============*/ rec_t* rec, /*!< in: record */ - const ulint* offsets,/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets,/*!< in: array returned by rec_get_offsets() */ ulint n, /*!< in: index number of the field */ const void* data, /*!< in: pointer to the data if not SQL null */ ulint len) /*!< in: length of the data or UNIV_SQL_NULL. @@ -876,7 +897,7 @@ UNIV_INLINE void rec_offs_set_n_alloc( /*=================*/ - ulint* offsets, /*!< out: array for rec_get_offsets(), + offset_t*offsets, /*!< out: array for rec_get_offsets(), must be allocated */ ulint n_alloc) /*!< in: number of elements */ MY_ATTRIBUTE((nonnull)); @@ -892,7 +913,7 @@ UNIV_INLINE ulint rec_offs_data_size( /*===============*/ - const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets)/*!< in: array returned by rec_get_offsets() */ MY_ATTRIBUTE((warn_unused_result)); /**********************************************************//** Returns the total size of record minus data size of record. @@ -903,7 +924,7 @@ UNIV_INLINE ulint rec_offs_extra_size( /*================*/ - const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets)/*!< in: array returned by rec_get_offsets() */ MY_ATTRIBUTE((warn_unused_result)); /**********************************************************//** Returns the total size of a physical record. @@ -912,7 +933,7 @@ UNIV_INLINE ulint rec_offs_size( /*==========*/ - const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets)/*!< in: array returned by rec_get_offsets() */ MY_ATTRIBUTE((warn_unused_result)); #ifdef UNIV_DEBUG /**********************************************************//** @@ -923,7 +944,7 @@ byte* rec_get_start( /*==========*/ const rec_t* rec, /*!< in: pointer to record */ - const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets)/*!< in: array returned by rec_get_offsets() */ MY_ATTRIBUTE((warn_unused_result)); /**********************************************************//** Returns a pointer to the end of the record. @@ -933,7 +954,7 @@ byte* rec_get_end( /*========*/ const rec_t* rec, /*!< in: pointer to record */ - const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets)/*!< in: array returned by rec_get_offsets() */ MY_ATTRIBUTE((warn_unused_result)); #else /* UNIV_DEBUG */ # define rec_get_start(rec, offsets) ((rec) - rec_offs_extra_size(offsets)) @@ -950,7 +971,7 @@ rec_t* rec_copy( void* buf, const rec_t* rec, - const ulint* offsets); + const offset_t* offsets); /** Determine the size of a data tuple prefix in a temporary file. @param[in] index clustered or secondary index @@ -979,7 +1000,7 @@ void rec_init_offsets_temp( const rec_t* rec, const dict_index_t* index, - ulint* offsets, + offset_t* offsets, ulint n_core, const dict_col_t::def_t*def_val, rec_comp_status_t status = REC_STATUS_ORDINARY) @@ -993,7 +1014,7 @@ void rec_init_offsets_temp( const rec_t* rec, const dict_index_t* index, - ulint* offsets) + offset_t* offsets) MY_ATTRIBUTE((nonnull)); /** Convert a data tuple prefix to the temporary file format. @@ -1115,7 +1136,7 @@ ibool rec_validate( /*=========*/ const rec_t* rec, /*!< in: physical record */ - const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets)/*!< in: array returned by rec_get_offsets() */ MY_ATTRIBUTE((nonnull)); /***************************************************************//** Prints an old-style physical record. */ @@ -1132,7 +1153,7 @@ rec_print_mbr_rec( /*==========*/ FILE* file, /*!< in: file where to print */ const rec_t* rec, /*!< in: physical record */ - const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets)/*!< in: array returned by rec_get_offsets() */ MY_ATTRIBUTE((nonnull)); /***************************************************************//** Prints a physical record. */ @@ -1141,7 +1162,7 @@ rec_print_new( /*==========*/ FILE* file, /*!< in: file where to print */ const rec_t* rec, /*!< in: physical record */ - const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets)/*!< in: array returned by rec_get_offsets() */ MY_ATTRIBUTE((nonnull)); /***************************************************************//** Prints a physical record. */ @@ -1163,7 +1184,7 @@ rec_print( std::ostream& o, const rec_t* rec, ulint info, - const ulint* offsets); + const offset_t* offsets); /** Wrapper for pretty-printing a record */ struct rec_index_print @@ -1190,14 +1211,14 @@ operator<<(std::ostream& o, const rec_index_print& r); struct rec_offsets_print { /** Constructor */ - rec_offsets_print(const rec_t* rec, const ulint* offsets) : + rec_offsets_print(const rec_t* rec, const offset_t* offsets) : m_rec(rec), m_offsets(offsets) {} /** Record */ const rec_t* m_rec; /** Offsets to each field */ - const ulint* m_offsets; + const offset_t* m_offsets; }; /** Display a record. @@ -1214,7 +1235,7 @@ public: /** Construct a pretty-printed record. @param rec record with header @param offsets rec_get_offsets(rec, ...) */ - rec_printer(const rec_t* rec, const ulint* offsets) + rec_printer(const rec_t* rec, const offset_t* offsets) : std::ostringstream () { @@ -1227,7 +1248,7 @@ public: @param rec record, possibly lacking header @param info rec_get_info_bits(rec) @param offsets rec_get_offsets(rec, ...) */ - rec_printer(const rec_t* rec, ulint info, const ulint* offsets) + rec_printer(const rec_t* rec, ulint info, const offset_t* offsets) : std::ostringstream () { diff --git a/storage/innobase/include/rem0rec.ic b/storage/innobase/include/rem0rec.ic index 17dd8aa3d7a..5deb53f5a84 100644 --- a/storage/innobase/include/rem0rec.ic +++ b/storage/innobase/include/rem0rec.ic @@ -816,7 +816,7 @@ offsets form. If the field is SQL null, the flag is ORed in the returned value. @return offset of the start of the field, SQL null flag ORed */ UNIV_INLINE -ulint +uint8_t rec_1_get_field_end_info( /*=====================*/ const rec_t* rec, /*!< in: record */ @@ -835,7 +835,7 @@ value. @return offset of the start of the field, SQL null flag and extern storage flag ORed */ UNIV_INLINE -ulint +uint16_t rec_2_get_field_end_info( /*=====================*/ const rec_t* rec, /*!< in: record */ @@ -868,13 +868,13 @@ UNIV_INLINE void rec_offs_set_n_alloc( /*=================*/ - ulint* offsets, /*!< out: array for rec_get_offsets(), + offset_t*offsets, /*!< out: array for rec_get_offsets(), must be allocated */ ulint n_alloc) /*!< in: number of elements */ { ut_ad(n_alloc > REC_OFFS_HEADER_SIZE); UNIV_MEM_ALLOC(offsets, n_alloc * sizeof *offsets); - offsets[0] = n_alloc; + offsets[0] = static_cast<offset_t>(n_alloc); } /************************************************************//** @@ -882,36 +882,27 @@ The following function is used to get an offset to the nth data field in a record. @return offset from the origin of rec */ UNIV_INLINE -ulint +offset_t rec_get_nth_field_offs( /*===================*/ - const ulint* offsets,/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets,/*!< in: array returned by rec_get_offsets() */ ulint n, /*!< in: index of the field */ ulint* len) /*!< out: length of the field; UNIV_SQL_NULL if SQL null; UNIV_SQL_DEFAULT is default value */ { - ulint offs; - ulint length; ut_ad(n < rec_offs_n_fields(offsets)); - if (n == 0) { - offs = 0; - } else { - offs = rec_offs_base(offsets)[n] & REC_OFFS_MASK; - } - - length = rec_offs_base(offsets)[1 + n]; + offset_t offs = n == 0 ? 0 : get_value(rec_offs_base(offsets)[n]); + offset_t next_offs = rec_offs_base(offsets)[1 + n]; - if (length & REC_OFFS_SQL_NULL) { - length = UNIV_SQL_NULL; - } else if (length & REC_OFFS_DEFAULT) { - length = UNIV_SQL_DEFAULT; + if (get_type(next_offs) == SQL_NULL) { + *len = UNIV_SQL_NULL; + } else if (get_type(next_offs) == DEFAULT) { + *len = UNIV_SQL_DEFAULT; } else { - length &= REC_OFFS_MASK; - length -= offs; + *len = get_value(next_offs) - offs; } - *len = length; return(offs); } @@ -923,7 +914,7 @@ const byte* rec_offs_any_null_extern( /*=====================*/ const rec_t* rec, /*!< in: record */ - const ulint* offsets) /*!< in: rec_get_offsets(rec) */ + const offset_t* offsets) /*!< in: rec_get_offsets(rec) */ { ulint i; ut_ad(rec_offs_validate(rec, NULL, offsets)); @@ -958,16 +949,16 @@ UNIV_INLINE ulint rec_offs_nth_size( /*==============*/ - const ulint* offsets,/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets,/*!< in: array returned by rec_get_offsets() */ ulint n) /*!< in: nth field */ { ut_ad(rec_offs_validate(NULL, NULL, offsets)); ut_ad(n < rec_offs_n_fields(offsets)); if (!n) { - return(rec_offs_base(offsets)[1 + n] & REC_OFFS_MASK); + return get_value(rec_offs_base(offsets)[1 + n]); } - return((rec_offs_base(offsets)[1 + n] - rec_offs_base(offsets)[n]) - & REC_OFFS_MASK); + return get_value((rec_offs_base(offsets)[1 + n])) + - get_value(rec_offs_base(offsets)[n]); } /******************************************************//** @@ -977,7 +968,7 @@ UNIV_INLINE ulint rec_offs_n_extern( /*==============*/ - const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets)/*!< in: array returned by rec_get_offsets() */ { ulint n = 0; @@ -1175,7 +1166,7 @@ void rec_set_nth_field( /*==============*/ rec_t* rec, /*!< in: record */ - const ulint* offsets,/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets,/*!< in: array returned by rec_get_offsets() */ ulint n, /*!< in: index number of the field */ const void* data, /*!< in: pointer to the data if not SQL null */ @@ -1231,16 +1222,16 @@ UNIV_INLINE void rec_offs_set_n_fields( /*==================*/ - ulint* offsets, /*!< in/out: array returned by + offset_t* offsets, /*!< in/out: array returned by rec_get_offsets() */ - ulint n_fields) /*!< in: number of fields */ + ulint n_fields) /*!< in: number of fields */ { ut_ad(offsets); ut_ad(n_fields > 0); ut_ad(n_fields <= REC_MAX_N_FIELDS); ut_ad(n_fields + REC_OFFS_HEADER_SIZE <= rec_offs_get_n_alloc(offsets)); - offsets[1] = n_fields; + offsets[1] = static_cast<offset_t>(n_fields); } /**********************************************************//** @@ -1253,13 +1244,12 @@ UNIV_INLINE ulint rec_offs_data_size( /*===============*/ - const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets)/*!< in: array returned by rec_get_offsets() */ { ulint size; ut_ad(rec_offs_validate(NULL, NULL, offsets)); - size = rec_offs_base(offsets)[rec_offs_n_fields(offsets)] - & REC_OFFS_MASK; + size = get_value(rec_offs_base(offsets)[rec_offs_n_fields(offsets)]); ut_ad(size < srv_page_size); return(size); } @@ -1273,7 +1263,7 @@ UNIV_INLINE ulint rec_offs_extra_size( /*================*/ - const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets)/*!< in: array returned by rec_get_offsets() */ { ulint size; ut_ad(rec_offs_validate(NULL, NULL, offsets)); @@ -1289,7 +1279,7 @@ UNIV_INLINE ulint rec_offs_size( /*==========*/ - const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets)/*!< in: array returned by rec_get_offsets() */ { return(rec_offs_data_size(offsets) + rec_offs_extra_size(offsets)); } @@ -1303,7 +1293,7 @@ byte* rec_get_end( /*========*/ const rec_t* rec, /*!< in: pointer to record */ - const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets)/*!< in: array returned by rec_get_offsets() */ { ut_ad(rec_offs_validate(rec, NULL, offsets)); return(const_cast<rec_t*>(rec + rec_offs_data_size(offsets))); @@ -1317,7 +1307,7 @@ byte* rec_get_start( /*==========*/ const rec_t* rec, /*!< in: pointer to record */ - const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets)/*!< in: array returned by rec_get_offsets() */ { ut_ad(rec_offs_validate(rec, NULL, offsets)); return(const_cast<rec_t*>(rec - rec_offs_extra_size(offsets))); @@ -1334,7 +1324,7 @@ rec_t* rec_copy( void* buf, const rec_t* rec, - const ulint* offsets) + const offset_t* offsets) { ulint extra_len; ulint data_len; diff --git a/storage/innobase/include/rem0types.h b/storage/innobase/include/rem0types.h index 38a5ba66f76..754781d62d1 100644 --- a/storage/innobase/include/rem0types.h +++ b/storage/innobase/include/rem0types.h @@ -1,6 +1,7 @@ /***************************************************************************** Copyright (c) 1994, 2015, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2019, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -29,6 +30,9 @@ Created 5/30/1994 Heikki Tuuri /* We define the physical record simply as an array of bytes */ typedef byte rec_t; +/** This type represents a field offset in a rec_t* */ +typedef unsigned short int offset_t; + /* Maximum values for various fields (for non-blob tuples) */ #define REC_MAX_N_FIELDS (1024 - 1) #define REC_MAX_HEAP_NO (2 * 8192 - 1) diff --git a/storage/innobase/include/row0ftsort.h b/storage/innobase/include/row0ftsort.h index b735576fbbb..9e5360625f4 100644 --- a/storage/innobase/include/row0ftsort.h +++ b/storage/innobase/include/row0ftsort.h @@ -30,6 +30,7 @@ Created 10/13/2010 Jimmy Yang #include "data0data.h" #include "fts0fts.h" #include "fts0priv.h" +#include "rem0types.h" #include "row0merge.h" #include "btr0bulk.h" @@ -250,7 +251,7 @@ row_merge_fts_sel_propagate( int* sel_tree, /*<! in: selection tree */ ulint level, /*<! in: selection tree level */ const mrec_t** mrec, /*<! in: sort record */ - ulint** offsets, /*<! in: record offsets */ + offset_t** offsets, /*<! in: record offsets */ dict_index_t* index); /*<! in: FTS index */ /********************************************************************//** Read sorted file containing index data tuples and insert these data diff --git a/storage/innobase/include/row0log.h b/storage/innobase/include/row0log.h index d6350705d55..e6f60345703 100644 --- a/storage/innobase/include/row0log.h +++ b/storage/innobase/include/row0log.h @@ -136,7 +136,7 @@ row_log_table_delete( page X-latched */ dict_index_t* index, /*!< in/out: clustered index, S-latched or X-latched */ - const ulint* offsets,/*!< in: rec_get_offsets(rec,index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec,index) */ const byte* sys) /*!< in: DB_TRX_ID,DB_ROLL_PTR that should be logged, or NULL to use those in rec */ ATTRIBUTE_COLD __attribute__((nonnull(1,2,3))); @@ -151,7 +151,7 @@ row_log_table_update( page X-latched */ dict_index_t* index, /*!< in/out: clustered index, S-latched or X-latched */ - const ulint* offsets,/*!< in: rec_get_offsets(rec,index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec,index) */ const dtuple_t* old_pk);/*!< in: row_log_table_get_pk() before the update */ @@ -167,7 +167,7 @@ row_log_table_get_pk( page X-latched */ dict_index_t* index, /*!< in/out: clustered index, S-latched or X-latched */ - const ulint* offsets,/*!< in: rec_get_offsets(rec,index), + const offset_t* offsets,/*!< in: rec_get_offsets(rec,index), or NULL */ byte* sys, /*!< out: DB_TRX_ID,DB_ROLL_PTR for row_log_table_delete(), or NULL */ @@ -184,7 +184,7 @@ row_log_table_insert( page X-latched */ dict_index_t* index, /*!< in/out: clustered index, S-latched or X-latched */ - const ulint* offsets);/*!< in: rec_get_offsets(rec,index) */ + const offset_t* offsets);/*!< in: rec_get_offsets(rec,index) */ /******************************************************//** Notes that a BLOB is being freed during online ALTER TABLE. */ void diff --git a/storage/innobase/include/row0merge.h b/storage/innobase/include/row0merge.h index 27bd19252ac..fd9050d0a48 100644 --- a/storage/innobase/include/row0merge.h +++ b/storage/innobase/include/row0merge.h @@ -489,7 +489,7 @@ row_merge_read_rec( const mrec_t** mrec, /*!< out: pointer to merge record, or NULL on end of list (non-NULL on I/O error) */ - ulint* offsets,/*!< out: offsets of mrec */ + offset_t* offsets,/*!< out: offsets of mrec */ row_merge_block_t* crypt_block, /*!< in: crypt buf or NULL */ ulint space) /*!< in: space id */ MY_ATTRIBUTE((warn_unused_result)); diff --git a/storage/innobase/include/row0row.h b/storage/innobase/include/row0row.h index afcae89a0ab..656a18ff9f2 100644 --- a/storage/innobase/include/row0row.h +++ b/storage/innobase/include/row0row.h @@ -44,7 +44,7 @@ ulint row_get_trx_id_offset( /*==================*/ const dict_index_t* index, /*!< in: clustered index */ - const ulint* offsets)/*!< in: record offsets */ + const offset_t* offsets)/*!< in: record offsets */ MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Reads the trx id field from a clustered index record. @@ -55,7 +55,7 @@ row_get_rec_trx_id( /*===============*/ const rec_t* rec, /*!< in: record */ const dict_index_t* index, /*!< in: clustered index */ - const ulint* offsets)/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets)/*!< in: rec_get_offsets(rec, index) */ MY_ATTRIBUTE((nonnull, warn_unused_result)); /*********************************************************************//** Reads the roll pointer field from a clustered index record. @@ -66,7 +66,7 @@ row_get_rec_roll_ptr( /*=================*/ const rec_t* rec, /*!< in: record */ const dict_index_t* index, /*!< in: clustered index */ - const ulint* offsets)/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets)/*!< in: rec_get_offsets(rec, index) */ MY_ATTRIBUTE((nonnull, warn_unused_result)); /* Flags for row build type. */ @@ -138,7 +138,7 @@ row_build( this record must be at least s-latched and the latch held as long as the row dtuple is used! */ - const ulint* offsets,/*!< in: rec_get_offsets(rec,index) + const offset_t* offsets,/*!< in: rec_get_offsets(rec,index) or NULL, in which case this function will invoke rec_get_offsets() */ const dict_table_t* col_table, @@ -189,7 +189,7 @@ row_build_w_add_vcol( ulint type, const dict_index_t* index, const rec_t* rec, - const ulint* offsets, + const offset_t* offsets, const dict_table_t* col_table, const dtuple_t* defaults, const dict_add_v_col_t* add_v, @@ -206,7 +206,7 @@ row_rec_to_index_entry_low( /*=======================*/ const rec_t* rec, /*!< in: record in the index */ const dict_index_t* index, /*!< in: index */ - const ulint* offsets,/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec, index) */ ulint* n_ext, /*!< out: number of externally stored columns */ mem_heap_t* heap) /*!< in: memory heap from which @@ -221,7 +221,7 @@ row_rec_to_index_entry( /*===================*/ const rec_t* rec, /*!< in: record in the index */ const dict_index_t* index, /*!< in: index */ - const ulint* offsets,/*!< in/out: rec_get_offsets(rec) */ + const offset_t* offsets,/*!< in/out: rec_get_offsets(rec) */ ulint* n_ext, /*!< out: number of externally stored columns */ mem_heap_t* heap) /*!< in: memory heap from which @@ -266,7 +266,7 @@ row_build_row_ref_in_tuple( held as long as the row reference is used! */ const dict_index_t* index, /*!< in: secondary index */ - ulint* offsets)/*!< in: rec_get_offsets(rec, index) + offset_t* offsets)/*!< in: rec_get_offsets(rec, index) or NULL */ MY_ATTRIBUTE((nonnull(1,2,3))); /*******************************************************************//** @@ -284,7 +284,7 @@ row_build_row_ref_fast( const rec_t* rec, /*!< in: secondary index record; must be preserved while ref is used, as we do not copy field values to heap */ - const ulint* offsets);/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets);/*!< in: array returned by rec_get_offsets() */ /***************************************************************//** Searches the clustered index record for a row, if we have the row reference. diff --git a/storage/innobase/include/row0row.ic b/storage/innobase/include/row0row.ic index 4e3cf58cfc5..14f9f47ba7e 100644 --- a/storage/innobase/include/row0row.ic +++ b/storage/innobase/include/row0row.ic @@ -37,7 +37,7 @@ ulint row_get_trx_id_offset( /*==================*/ const dict_index_t* index, /*!< in: clustered index */ - const ulint* offsets)/*!< in: record offsets */ + const offset_t* offsets)/*!< in: record offsets */ { ulint pos; ulint offset; @@ -64,7 +64,7 @@ row_get_rec_trx_id( /*===============*/ const rec_t* rec, /*!< in: record */ const dict_index_t* index, /*!< in: clustered index */ - const ulint* offsets)/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets)/*!< in: rec_get_offsets(rec, index) */ { ulint offset; @@ -89,7 +89,7 @@ row_get_rec_roll_ptr( /*=================*/ const rec_t* rec, /*!< in: record */ const dict_index_t* index, /*!< in: clustered index */ - const ulint* offsets)/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets)/*!< in: rec_get_offsets(rec, index) */ { ulint offset; @@ -148,7 +148,7 @@ row_build_row_ref_fast( const rec_t* rec, /*!< in: secondary index record; must be preserved while ref is used, as we do not copy field values to heap */ - const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets)/*!< in: array returned by rec_get_offsets() */ { dfield_t* dfield; const byte* field; diff --git a/storage/innobase/include/row0upd.h b/storage/innobase/include/row0upd.h index 7d716f960c5..51ed7a7f006 100644 --- a/storage/innobase/include/row0upd.h +++ b/storage/innobase/include/row0upd.h @@ -28,6 +28,7 @@ Created 12/27/1996 Heikki Tuuri #define row0upd_h #include "data0data.h" +#include "rem0types.h" #include "row0types.h" #include "btr0types.h" #include "trx0types.h" @@ -123,7 +124,7 @@ row_upd_rec_sys_fields( page_zip_des_t* page_zip,/*!< in/out: compressed page whose uncompressed part will be updated, or NULL */ dict_index_t* index, /*!< in: clustered index */ - const ulint* offsets,/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec, index) */ const trx_t* trx, /*!< in: transaction */ roll_ptr_t roll_ptr);/*!< in: DB_ROLL_PTR to the undo log */ /*********************************************************************//** @@ -165,7 +166,7 @@ ibool row_upd_changes_field_size_or_external( /*===================================*/ dict_index_t* index, /*!< in: index */ - const ulint* offsets,/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec, index) */ const upd_t* update);/*!< in: update vector */ /***********************************************************//** Returns true if row update contains disowned external fields. @@ -186,7 +187,7 @@ row_upd_rec_in_place( /*=================*/ rec_t* rec, /*!< in/out: record where replaced */ dict_index_t* index, /*!< in: the index the record belongs to */ - const ulint* offsets,/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets,/*!< in: array returned by rec_get_offsets() */ const upd_t* update, /*!< in: update vector */ page_zip_des_t* page_zip);/*!< in: compressed page with enough space available, or NULL */ @@ -201,7 +202,7 @@ row_upd_build_sec_rec_difference_binary( /*====================================*/ const rec_t* rec, /*!< in: secondary index record */ dict_index_t* index, /*!< in: index */ - const ulint* offsets,/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec, index) */ const dtuple_t* entry, /*!< in: entry to insert */ mem_heap_t* heap) /*!< in: memory heap from which allocated */ MY_ATTRIBUTE((warn_unused_result, nonnull)); @@ -227,7 +228,7 @@ row_upd_build_difference_binary( dict_index_t* index, const dtuple_t* entry, const rec_t* rec, - const ulint* offsets, + const offset_t* offsets, bool no_sys, trx_t* trx, mem_heap_t* heap, @@ -399,7 +400,7 @@ row_upd_rec_sys_fields_in_recovery( /*===============================*/ rec_t* rec, /*!< in/out: record */ page_zip_des_t* page_zip,/*!< in/out: compressed page, or NULL */ - const ulint* offsets,/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets,/*!< in: array returned by rec_get_offsets() */ ulint pos, /*!< in: TRX_ID position in rec */ trx_id_t trx_id, /*!< in: transaction id */ roll_ptr_t roll_ptr);/*!< in: roll ptr of the undo log record */ diff --git a/storage/innobase/include/row0upd.ic b/storage/innobase/include/row0upd.ic index 0a6c33653a0..c8e72f45491 100644 --- a/storage/innobase/include/row0upd.ic +++ b/storage/innobase/include/row0upd.ic @@ -163,7 +163,7 @@ row_upd_rec_sys_fields( page_zip_des_t* page_zip,/*!< in/out: compressed page whose uncompressed part will be updated, or NULL */ dict_index_t* index, /*!< in: clustered index */ - const ulint* offsets,/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec, index) */ const trx_t* trx, /*!< in: transaction */ roll_ptr_t roll_ptr)/*!< in: DB_ROLL_PTR to the undo log */ { diff --git a/storage/innobase/include/row0vers.h b/storage/innobase/include/row0vers.h index 948804beafc..0603f7c894c 100644 --- a/storage/innobase/include/row0vers.h +++ b/storage/innobase/include/row0vers.h @@ -52,7 +52,7 @@ row_vers_impl_x_locked( trx_t* caller_trx, const rec_t* rec, dict_index_t* index, - const ulint* offsets); + const offset_t* offsets); /** Finds out if a version of the record, where the version >= the current purge view, should have ientry as its secondary index entry. We check @@ -98,7 +98,7 @@ row_vers_build_for_consistent_read( mtr_t* mtr, /*!< in: mtr holding the latch on rec; it will also hold the latch on purge_view */ dict_index_t* index, /*!< in: the clustered index */ - ulint** offsets,/*!< in/out: offsets returned by + offset_t** offsets,/*!< in/out: offsets returned by rec_get_offsets(rec, index) */ ReadView* view, /*!< in: the consistent read view */ mem_heap_t** offset_heap,/*!< in/out: memory heap from which @@ -126,7 +126,7 @@ row_vers_build_for_semi_consistent_read( of this records */ mtr_t* mtr, /*!< in: mtr holding the latch on rec */ dict_index_t* index, /*!< in: the clustered index */ - ulint** offsets,/*!< in/out: offsets returned by + offset_t** offsets,/*!< in/out: offsets returned by rec_get_offsets(rec, index) */ mem_heap_t** offset_heap,/*!< in/out: memory heap from which the offsets are allocated */ diff --git a/storage/innobase/include/trx0rec.h b/storage/innobase/include/trx0rec.h index f169dd8871e..e2c2fbd8204 100644 --- a/storage/innobase/include/trx0rec.h +++ b/storage/innobase/include/trx0rec.h @@ -191,7 +191,7 @@ trx_undo_report_row_operation( const rec_t* rec, /*!< in: case of an update or delete marking, the record in the clustered index; NULL if insert */ - const ulint* offsets, /*!< in: rec_get_offsets(rec) */ + const offset_t* offsets, /*!< in: rec_get_offsets(rec) */ roll_ptr_t* roll_ptr) /*!< out: DB_ROLL_PTR to the undo log record */ MY_ATTRIBUTE((nonnull(1,2,8), warn_unused_result)); @@ -224,7 +224,7 @@ trx_undo_prev_version_build( index_rec page and purge_view */ const rec_t* rec, /*!< in: version of a clustered index record */ dict_index_t* index, /*!< in: clustered index */ - ulint* offsets,/*!< in/out: rec_get_offsets(rec, index) */ + offset_t* offsets,/*!< in/out: rec_get_offsets(rec, index) */ mem_heap_t* heap, /*!< in: memory heap from which the memory needed is allocated */ rec_t** old_vers,/*!< out, own: previous version, or NULL if diff --git a/storage/innobase/lock/lock0lock.cc b/storage/innobase/lock/lock0lock.cc index 28055676f74..9ff787282c2 100644 --- a/storage/innobase/lock/lock0lock.cc +++ b/storage/innobase/lock/lock0lock.cc @@ -324,7 +324,7 @@ lock_report_trx_id_insanity( trx_id_t trx_id, /*!< in: trx id */ const rec_t* rec, /*!< in: user record */ dict_index_t* index, /*!< in: index */ - const ulint* offsets, /*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets, /*!< in: rec_get_offsets(rec, index) */ trx_id_t max_trx_id) /*!< in: trx_sys.get_max_trx_id() */ { ut_ad(rec_offs_validate(rec, index, offsets)); @@ -348,7 +348,7 @@ lock_check_trx_id_sanity( trx_id_t trx_id, /*!< in: trx id */ const rec_t* rec, /*!< in: user record */ dict_index_t* index, /*!< in: index */ - const ulint* offsets) /*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets) /*!< in: rec_get_offsets(rec, index) */ { ut_ad(rec_offs_validate(rec, index, offsets)); ut_ad(!rec_is_metadata(rec, index)); @@ -374,7 +374,7 @@ lock_clust_rec_cons_read_sees( const rec_t* rec, /*!< in: user record which should be read or passed over by a read cursor */ dict_index_t* index, /*!< in: clustered index */ - const ulint* offsets,/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec, index) */ ReadView* view) /*!< in: consistent read view */ { ut_ad(dict_index_is_clust(index)); @@ -1205,7 +1205,7 @@ lock_sec_rec_some_has_impl( trx_t* caller_trx,/*!<in/out: trx of current thread */ const rec_t* rec, /*!< in: user record */ dict_index_t* index, /*!< in: secondary index */ - const ulint* offsets)/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets)/*!< in: rec_get_offsets(rec, index) */ { trx_t* trx; trx_id_t max_trx_id; @@ -4470,8 +4470,8 @@ static void lock_rec_print(FILE* file, const lock_t* lock, mtr_t& mtr) putc('\n', file); mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; rec_offs_init(offsets_); mtr.start(); @@ -4819,7 +4819,7 @@ lock_rec_queue_validate( const buf_block_t* block, /*!< in: buffer block containing rec */ const rec_t* rec, /*!< in: record to look at */ const dict_index_t* index, /*!< in: index, or NULL if not known */ - const ulint* offsets)/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets)/*!< in: rec_get_offsets(rec, index) */ { const lock_t* lock; ulint heap_no; @@ -4986,8 +4986,8 @@ lock_rec_validate_page( ulint nth_bit = 0; ulint i; mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; rec_offs_init(offsets_); ut_ad(!lock_mutex_own()); @@ -5356,8 +5356,8 @@ lock_rec_insert_check_and_lock( #ifdef UNIV_DEBUG { mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - const ulint* offsets; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + const offset_t* offsets; rec_offs_init(offsets_); offsets = rec_get_offsets(next_rec, index, offsets_, true, @@ -5516,7 +5516,7 @@ lock_rec_convert_impl_to_expl( const buf_block_t* block, const rec_t* rec, dict_index_t* index, - const ulint* offsets) + const offset_t* offsets) { trx_t* trx; @@ -5587,7 +5587,7 @@ lock_clust_rec_modify_check_and_lock( const rec_t* rec, /*!< in: record which should be modified */ dict_index_t* index, /*!< in: clustered index */ - const ulint* offsets,/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec, index) */ que_thr_t* thr) /*!< in: query thread */ { dberr_t err; @@ -5679,8 +5679,8 @@ lock_sec_rec_modify_check_and_lock( #ifdef UNIV_DEBUG { mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - const ulint* offsets; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + const offset_t* offsets; rec_offs_init(offsets_); offsets = rec_get_offsets(rec, index, offsets_, true, @@ -5724,7 +5724,7 @@ lock_sec_rec_read_check_and_lock( be read or passed over by a read cursor */ dict_index_t* index, /*!< in: secondary index */ - const ulint* offsets,/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec, index) */ lock_mode mode, /*!< in: mode of the lock which the read cursor should set on records: LOCK_S or LOCK_X; the @@ -5794,7 +5794,7 @@ lock_clust_rec_read_check_and_lock( be read or passed over by a read cursor */ dict_index_t* index, /*!< in: clustered index */ - const ulint* offsets,/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec, index) */ lock_mode mode, /*!< in: mode of the lock which the read cursor should set on records: LOCK_S or LOCK_X; the @@ -5872,8 +5872,8 @@ lock_clust_rec_read_check_and_lock_alt( que_thr_t* thr) /*!< in: query thread */ { mem_heap_t* tmp_heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; dberr_t err; rec_offs_init(offsets_); diff --git a/storage/innobase/page/page0cur.cc b/storage/innobase/page/page0cur.cc index 337397f7888..16f0495527d 100644 --- a/storage/innobase/page/page0cur.cc +++ b/storage/innobase/page/page0cur.cc @@ -67,8 +67,8 @@ page_cur_try_search_shortcut( ibool success = FALSE; const page_t* page = buf_block_get_frame(block); mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; rec_offs_init(offsets_); ut_ad(dtuple_check_typed(tuple)); @@ -151,8 +151,8 @@ page_cur_try_search_shortcut_bytes( ibool success = FALSE; const page_t* page = buf_block_get_frame(block); mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; rec_offs_init(offsets_); ut_ad(dtuple_check_typed(tuple)); @@ -223,7 +223,7 @@ page_cur_rec_field_extends( /*=======================*/ const dtuple_t* tuple, /*!< in: data tuple */ const rec_t* rec, /*!< in: record */ - const ulint* offsets,/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets,/*!< in: array returned by rec_get_offsets() */ ulint n) /*!< in: compare nth field */ { const dtype_t* type; @@ -299,8 +299,8 @@ page_cur_search_with_match( const page_zip_des_t* page_zip = buf_block_get_page_zip(block); #endif /* UNIV_ZIP_DEBUG */ mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; rec_offs_init(offsets_); ut_ad(dtuple_validate(tuple)); @@ -558,8 +558,8 @@ page_cur_search_with_match_bytes( const page_zip_des_t* page_zip = buf_block_get_page_zip(block); #endif /* UNIV_ZIP_DEBUG */ mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; rec_offs_init(offsets_); ut_ad(dtuple_validate(tuple)); @@ -821,11 +821,11 @@ page_cur_insert_rec_write_log( { mem_heap_t* heap = NULL; - ulint cur_offs_[REC_OFFS_NORMAL_SIZE]; - ulint ins_offs_[REC_OFFS_NORMAL_SIZE]; + offset_t cur_offs_[REC_OFFS_NORMAL_SIZE]; + offset_t ins_offs_[REC_OFFS_NORMAL_SIZE]; - ulint* cur_offs; - ulint* ins_offs; + offset_t* cur_offs; + offset_t* ins_offs; rec_offs_init(cur_offs_); rec_offs_init(ins_offs_); @@ -1001,8 +1001,8 @@ page_cur_parse_insert_rec( ulint info_and_status_bits = 0; /* remove warning */ page_cur_t cursor; mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; rec_offs_init(offsets_); page = block ? buf_block_get_frame(block) : NULL; @@ -1219,7 +1219,7 @@ page_cur_insert_rec_low( which the new record is inserted */ dict_index_t* index, /*!< in: record descriptor */ const rec_t* rec, /*!< in: pointer to a physical record */ - ulint* offsets,/*!< in/out: rec_get_offsets(rec, index) */ + offset_t* offsets,/*!< in/out: rec_get_offsets(rec, index) */ mtr_t* mtr) /*!< in: mini-transaction handle, or NULL */ { byte* insert_buf; @@ -1270,8 +1270,8 @@ page_cur_insert_rec_low( free_rec = page_header_get_ptr(page, PAGE_FREE); if (UNIV_LIKELY_NULL(free_rec)) { /* Try to allocate from the head of the free list. */ - ulint foffsets_[REC_OFFS_NORMAL_SIZE]; - ulint* foffsets = foffsets_; + offset_t foffsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* foffsets = foffsets_; mem_heap_t* heap = NULL; rec_offs_init(foffsets_); @@ -1442,7 +1442,7 @@ page_cur_insert_rec_zip( page_cur_t* cursor, /*!< in/out: page cursor */ dict_index_t* index, /*!< in: record descriptor */ const rec_t* rec, /*!< in: pointer to a physical record */ - ulint* offsets,/*!< in/out: rec_get_offsets(rec, index) */ + offset_t* offsets,/*!< in/out: rec_get_offsets(rec, index) */ mtr_t* mtr) /*!< in: mini-transaction handle, or NULL */ { byte* insert_buf; @@ -1683,8 +1683,8 @@ page_cur_insert_rec_zip( if (UNIV_LIKELY_NULL(free_rec)) { /* Try to allocate from the head of the free list. */ lint extra_size_diff; - ulint foffsets_[REC_OFFS_NORMAL_SIZE]; - ulint* foffsets = foffsets_; + offset_t foffsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* foffsets = foffsets_; mem_heap_t* heap = NULL; rec_offs_init(foffsets_); @@ -2006,8 +2006,8 @@ page_copy_rec_list_end_to_created_page( byte* log_ptr; ulint log_data_len; mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; rec_offs_init(offsets_); ut_ad(page_dir_get_n_heap(new_page) == PAGE_HEAP_NO_USER_LOW); @@ -2230,7 +2230,7 @@ page_cur_parse_delete_rec( if (block) { page_t* page = buf_block_get_frame(block); mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; rec_t* rec = page + offset; rec_offs_init(offsets_); @@ -2258,7 +2258,7 @@ page_cur_delete_rec( /*================*/ page_cur_t* cursor, /*!< in/out: a page cursor */ const dict_index_t* index, /*!< in: record descriptor */ - const ulint* offsets,/*!< in: rec_get_offsets( + const offset_t* offsets,/*!< in: rec_get_offsets( cursor->rec, index) */ mtr_t* mtr) /*!< in: mini-transaction handle or NULL */ diff --git a/storage/innobase/page/page0page.cc b/storage/innobase/page/page0page.cc index 77bdbf8bf2c..a916effa9b8 100644 --- a/storage/innobase/page/page0page.cc +++ b/storage/innobase/page/page0page.cc @@ -36,6 +36,7 @@ Created 2/2/1994 Heikki Tuuri #include "fut0lst.h" #include "btr0sea.h" #include "trx0sys.h" +#include <algorithm> /* THE INDEX PAGE ============== @@ -581,8 +582,8 @@ page_copy_rec_list_end_no_locks( page_cur_t cur1; rec_t* cur2; mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; rec_offs_init(offsets_); page_cur_position(rec, block, &cur1); @@ -814,8 +815,8 @@ page_copy_rec_list_start( rtr_rec_move_t* rec_move = NULL; rec_t* ret = page_rec_get_prev(page_get_supremum_rec(new_page)); - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; rec_offs_init(offsets_); /* Here, "ret" may be pointing to a user record or the @@ -1051,8 +1052,8 @@ page_delete_rec_list_end( page_zip_des_t* page_zip = buf_block_get_page_zip(block); page_t* page = page_align(rec); mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; rec_offs_init(offsets_); ut_ad(size == ULINT_UNDEFINED || size < srv_page_size); @@ -1253,8 +1254,8 @@ page_delete_rec_list_start( mtr_t* mtr) /*!< in: mtr */ { page_cur_t cur1; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; mem_heap_t* heap = NULL; rec_offs_init(offsets_); @@ -1741,7 +1742,7 @@ void page_rec_print( /*===========*/ const rec_t* rec, /*!< in: physical record */ - const ulint* offsets)/*!< in: record descriptor */ + const offset_t* offsets)/*!< in: record descriptor */ { ut_a(!page_rec_is_comp(rec) == !rec_offs_comp(offsets)); rec_print_new(stderr, rec, offsets); @@ -1816,8 +1817,8 @@ page_print_list( ulint count; ulint n_recs; mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; rec_offs_init(offsets_); ut_a((ibool)!!page_is_comp(page) == dict_table_is_comp(index->table)); @@ -1927,7 +1928,7 @@ ibool page_rec_validate( /*==============*/ const rec_t* rec, /*!< in: physical record */ - const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets)/*!< in: array returned by rec_get_offsets() */ { ulint n_owned; ulint heap_no; @@ -2412,8 +2413,13 @@ bool page_validate(const page_t* page, const dict_index_t* index) ulint n_slots; ibool ret = TRUE; ulint i; - ulint* offsets = NULL; - ulint* old_offsets = NULL; + offset_t offsets_1[REC_OFFS_NORMAL_SIZE]; + offset_t offsets_2[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_1; + offset_t* old_offsets = offsets_2; + + rec_offs_init(offsets_1); + rec_offs_init(offsets_2); #ifdef UNIV_GIS_DEBUG if (dict_index_is_spatial(index)) { @@ -2680,11 +2686,7 @@ next_rec: } /* set old_offsets to offsets; recycle offsets */ - { - ulint* offs = old_offsets; - old_offsets = offsets; - offsets = offs; - } + std::swap(old_offsets, offsets); } if (page_is_comp(page)) { @@ -2845,7 +2847,7 @@ page_delete_rec( page_zip/*!< in: compressed page descriptor */ #endif , - const ulint* offsets)/*!< in: offsets for record */ + const offset_t* offsets)/*!< in: offsets for record */ { bool no_compress_needed; buf_block_t* block = pcur->block; diff --git a/storage/innobase/page/page0zip.cc b/storage/innobase/page/page0zip.cc index eb38b16c2d9..0a53cdb9837 100644 --- a/storage/innobase/page/page0zip.cc +++ b/storage/innobase/page/page0zip.cc @@ -878,7 +878,7 @@ page_zip_compress_node_ptrs( mem_heap_t* heap) /*!< in: temporary memory heap */ { int err = Z_OK; - ulint* offsets = NULL; + offset_t* offsets = NULL; do { const rec_t* rec = *recs++; @@ -983,7 +983,7 @@ page_zip_compress_clust_ext( FILE_LOGFILE z_stream* c_stream, /*!< in/out: compressed page stream */ const rec_t* rec, /*!< in: record */ - const ulint* offsets, /*!< in: rec_get_offsets(rec) */ + const offset_t* offsets, /*!< in: rec_get_offsets(rec) */ ulint trx_id_col, /*!< in: position of of DB_TRX_ID */ byte* deleted, /*!< in: dense directory entry pointing to the head of the free list */ @@ -1122,7 +1122,7 @@ page_zip_compress_clust( mem_heap_t* heap) /*!< in: temporary memory heap */ { int err = Z_OK; - ulint* offsets = NULL; + offset_t* offsets = NULL; /* BTR_EXTERN_FIELD_REF storage */ byte* externs = storage - n_dense * (DATA_TRX_ID_LEN + DATA_ROLL_PTR_LEN); @@ -1985,7 +1985,7 @@ const byte* page_zip_apply_log_ext( /*===================*/ rec_t* rec, /*!< in/out: record */ - const ulint* offsets, /*!< in: rec_get_offsets(rec) */ + const offset_t* offsets, /*!< in: rec_get_offsets(rec) */ ulint trx_id_col, /*!< in: position of of DB_TRX_ID */ const byte* data, /*!< in: modification log */ const byte* end) /*!< in: end of modification log */ @@ -2086,7 +2086,7 @@ page_zip_apply_log( /*!< in: heap_no and status bits for the next record to uncompress */ dict_index_t* index, /*!< in: index of the page */ - ulint* offsets)/*!< in/out: work area for + offset_t* offsets)/*!< in/out: work area for rec_get_offsets_reverse() */ { const byte* const end = data + size; @@ -2154,7 +2154,7 @@ page_zip_apply_log( if (val & 1) { /* Clear the data bytes of the record. */ mem_heap_t* heap = NULL; - ulint* offs; + offset_t* offs; offs = rec_get_offsets(rec, index, offsets, is_leaf, ULINT_UNDEFINED, &heap); memset(rec, 0, rec_offs_data_size(offs)); @@ -2304,7 +2304,7 @@ page_zip_decompress_node_ptrs( sorted by address */ ulint n_dense, /*!< in: size of recs[] */ dict_index_t* index, /*!< in: the index of the page */ - ulint* offsets, /*!< in/out: temporary offsets */ + offset_t* offsets, /*!< in/out: temporary offsets */ mem_heap_t* heap) /*!< in: temporary memory heap */ { ulint heap_status = REC_STATUS_NODE_PTR @@ -2494,7 +2494,7 @@ page_zip_decompress_sec( sorted by address */ ulint n_dense, /*!< in: size of recs[] */ dict_index_t* index, /*!< in: the index of the page */ - ulint* offsets) /*!< in/out: temporary offsets */ + offset_t* offsets) /*!< in/out: temporary offsets */ { ulint heap_status = REC_STATUS_ORDINARY | PAGE_HEAP_NO_USER_LOW << REC_HEAP_NO_SHIFT; @@ -2627,7 +2627,7 @@ page_zip_decompress_clust_ext( /*==========================*/ z_stream* d_stream, /*!< in/out: compressed page stream */ rec_t* rec, /*!< in/out: record */ - const ulint* offsets, /*!< in: rec_get_offsets(rec) */ + const offset_t* offsets, /*!< in: rec_get_offsets(rec) */ ulint trx_id_col) /*!< in: position of of DB_TRX_ID */ { ulint i; @@ -2742,7 +2742,7 @@ page_zip_decompress_clust( ulint n_dense, /*!< in: size of recs[] */ dict_index_t* index, /*!< in: the index of the page */ ulint trx_id_col, /*!< index of the trx_id column */ - ulint* offsets, /*!< in/out: temporary offsets */ + offset_t* offsets, /*!< in/out: temporary offsets */ mem_heap_t* heap) /*!< in: temporary memory heap */ { int err; @@ -3046,7 +3046,7 @@ page_zip_decompress_low( ulint n_dense;/* number of user records on the page */ ulint trx_id_col = ULINT_UNDEFINED; mem_heap_t* heap; - ulint* offsets; + offset_t* offsets; ut_ad(page_zip_simple_validate(page_zip)); UNIV_MEM_ASSERT_W(page, srv_page_size); @@ -3170,10 +3170,10 @@ zlib_error: ulint n = 1 + 1/* node ptr */ + REC_OFFS_HEADER_SIZE + dict_index_get_n_fields(index); - offsets = static_cast<ulint*>( + offsets = static_cast<offset_t*>( mem_heap_alloc(heap, n * sizeof(ulint))); - *offsets = n; + rec_offs_set_n_alloc(offsets, n); } /* Decompress the records in heap_no order. */ @@ -3398,7 +3398,7 @@ page_zip_validate_low( committed. Let us tolerate that difference when we are performing a sloppy validation. */ - ulint* offsets; + offset_t* offsets; mem_heap_t* heap; const rec_t* rec; const rec_t* trec; @@ -3565,7 +3565,7 @@ page_zip_write_rec_ext( const page_t* page, /*!< in: page containing rec */ const byte* rec, /*!< in: record being written */ dict_index_t* index, /*!< in: record descriptor */ - const ulint* offsets, /*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets, /*!< in: rec_get_offsets(rec, index) */ ulint create, /*!< in: nonzero=insert, zero=update */ ulint trx_id_col, /*!< in: position of DB_TRX_ID */ ulint heap_no, /*!< in: heap number of rec */ @@ -3684,7 +3684,7 @@ page_zip_write_rec( page_zip_des_t* page_zip,/*!< in/out: compressed page */ const byte* rec, /*!< in: record being written */ dict_index_t* index, /*!< in: the index the record belongs to */ - const ulint* offsets,/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec, index) */ ulint create) /*!< in: nonzero=insert, zero=update */ { const page_t* page; @@ -3934,7 +3934,7 @@ page_zip_write_blob_ptr( const byte* rec, /*!< in/out: record whose data is being written */ dict_index_t* index, /*!< in: index of the page */ - const ulint* offsets,/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec, index) */ ulint n, /*!< in: column index */ mtr_t* mtr) /*!< in: mini-transaction handle, or NULL if no logging is needed */ @@ -4155,7 +4155,7 @@ void page_zip_write_trx_id_and_roll_ptr( page_zip_des_t* page_zip, byte* rec, - const ulint* offsets, + const offset_t* offsets, ulint trx_id_col, trx_id_t trx_id, roll_ptr_t roll_ptr, @@ -4294,7 +4294,7 @@ page_zip_clear_rec( page_zip_des_t* page_zip, /*!< in/out: compressed page */ byte* rec, /*!< in: record to clear */ const dict_index_t* index, /*!< in: index of rec */ - const ulint* offsets) /*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets) /*!< in: rec_get_offsets(rec, index) */ { ulint heap_no; page_t* page = page_align(rec); @@ -4500,7 +4500,7 @@ page_zip_dir_delete( page_zip_des_t* page_zip, /*!< in/out: compressed page */ byte* rec, /*!< in: deleted record */ const dict_index_t* index, /*!< in: index of rec */ - const ulint* offsets, /*!< in: rec_get_offsets(rec) */ + const offset_t* offsets, /*!< in: rec_get_offsets(rec) */ const byte* free) /*!< in: previous start of the free list */ { diff --git a/storage/innobase/rem/rem0cmp.cc b/storage/innobase/rem/rem0cmp.cc index 2abcbb425c0..8992e82d370 100644 --- a/storage/innobase/rem/rem0cmp.cc +++ b/storage/innobase/rem/rem0cmp.cc @@ -546,7 +546,7 @@ cmp_dtuple_rec_with_gis( dtuple in some of the common fields, or which has an equal number or more fields than dtuple */ - const ulint* offsets,/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets,/*!< in: array returned by rec_get_offsets() */ page_cur_mode_t mode) /*!< in: compare mode */ { const dfield_t* dtuple_field; /* current field in logical record */ @@ -579,7 +579,7 @@ int cmp_dtuple_rec_with_gis_internal( const dtuple_t* dtuple, const rec_t* rec, - const ulint* offsets) + const offset_t* offsets) { const dfield_t* dtuple_field; /* current field in logical record */ ulint dtuple_f_len; /* the length of the current field @@ -650,7 +650,7 @@ int cmp_dtuple_rec_with_match_low( const dtuple_t* dtuple, const rec_t* rec, - const ulint* offsets, + const offset_t* offsets, ulint n_cmp, ulint* matched_fields) { @@ -784,7 +784,7 @@ cmp_dtuple_rec_with_match_bytes( const dtuple_t* dtuple, const rec_t* rec, const dict_index_t* index, - const ulint* offsets, + const offset_t* offsets, ulint* matched_fields, ulint* matched_bytes) { @@ -952,7 +952,7 @@ int cmp_dtuple_rec( const dtuple_t* dtuple, const rec_t* rec, - const ulint* offsets) + const offset_t* offsets) { ulint matched_fields = 0; @@ -970,7 +970,7 @@ cmp_dtuple_is_prefix_of_rec( /*========================*/ const dtuple_t* dtuple, /*!< in: data tuple */ const rec_t* rec, /*!< in: physical record */ - const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets)/*!< in: array returned by rec_get_offsets() */ { ulint n_fields; ulint matched_fields = 0; @@ -998,8 +998,8 @@ cmp_rec_rec_simple_field( /*=====================*/ const rec_t* rec1, /*!< in: physical record */ const rec_t* rec2, /*!< in: physical record */ - const ulint* offsets1,/*!< in: rec_get_offsets(rec1, ...) */ - const ulint* offsets2,/*!< in: rec_get_offsets(rec2, ...) */ + const offset_t* offsets1,/*!< in: rec_get_offsets(rec1, ...) */ + const offset_t* offsets2,/*!< in: rec_get_offsets(rec2, ...) */ const dict_index_t* index, /*!< in: data dictionary index */ ulint n) /*!< in: field to compare */ { @@ -1029,8 +1029,8 @@ cmp_rec_rec_simple( /*===============*/ const rec_t* rec1, /*!< in: physical record */ const rec_t* rec2, /*!< in: physical record */ - const ulint* offsets1,/*!< in: rec_get_offsets(rec1, ...) */ - const ulint* offsets2,/*!< in: rec_get_offsets(rec2, ...) */ + const offset_t* offsets1,/*!< in: rec_get_offsets(rec1, ...) */ + const offset_t* offsets2,/*!< in: rec_get_offsets(rec2, ...) */ const dict_index_t* index, /*!< in: data dictionary index */ struct TABLE* table) /*!< in: MySQL table, for reporting duplicate key value if applicable, @@ -1115,8 +1115,8 @@ int cmp_rec_rec_with_match( const rec_t* rec1, const rec_t* rec2, - const ulint* offsets1, - const ulint* offsets2, + const offset_t* offsets1, + const offset_t* offsets2, const dict_index_t* index, bool nulls_unequal, ulint* matched_fields) diff --git a/storage/innobase/rem/rem0rec.cc b/storage/innobase/rem/rem0rec.cc index 7956c0fb62e..458457c52d5 100644 --- a/storage/innobase/rem/rem0rec.cc +++ b/storage/innobase/rem/rem0rec.cc @@ -277,13 +277,13 @@ void rec_init_offsets_comp_ordinary( const rec_t* rec, const dict_index_t* index, - ulint* offsets, + offset_t* offsets, ulint n_core, const dict_col_t::def_t*def_val, rec_leaf_format format) { - ulint offs = 0; - ulint any = 0; + offset_t offs = 0; + offset_t any = 0; const byte* nulls = rec; const byte* lens = NULL; ulint n_fields = n_core; @@ -337,8 +337,8 @@ ordinary: /* We cannot invoke rec_offs_make_valid() if format==REC_LEAF_TEMP. Similarly, rec_offs_validate() will fail in that case, because it invokes rec_get_status(). */ - offsets[2] = (ulint) rec; - offsets[3] = (ulint) index; + memcpy(&offsets[RECORD_OFFSET], &rec, sizeof(rec)); + memcpy(&offsets[INDEX_OFFSET], &index, sizeof(index)); #endif /* UNIV_DEBUG */ /* read the lengths of fields 0..n_fields */ @@ -348,17 +348,17 @@ ordinary: = dict_index_get_nth_field(index, i); const dict_col_t* col = dict_field_get_col(field); - ulint len; + offset_t len; /* set default value flag */ if (i < n_fields) { } else if (def_val) { const dict_col_t::def_t& d = def_val[i - n_core]; if (!d.data) { - len = offs | REC_OFFS_SQL_NULL; + len = combine(offs, SQL_NULL); ut_ad(d.len == UNIV_SQL_NULL); } else { - len = offs | REC_OFFS_DEFAULT; + len = combine(offs, DEFAULT); any |= REC_OFFS_DEFAULT; } @@ -366,10 +366,10 @@ ordinary: } else { ulint dlen; if (!index->instant_field_value(i, &dlen)) { - len = offs | REC_OFFS_SQL_NULL; + len = combine(offs, SQL_NULL); ut_ad(dlen == UNIV_SQL_NULL); } else { - len = offs | REC_OFFS_DEFAULT; + len = combine(offs, DEFAULT); any |= REC_OFFS_DEFAULT; } @@ -391,7 +391,7 @@ ordinary: We do not advance offs, and we set the length to zero and enable the SQL NULL flag in offsets[]. */ - len = offs | REC_OFFS_SQL_NULL; + len = combine(offs, SQL_NULL); goto resolved; } null_mask <<= 1; @@ -414,11 +414,11 @@ ordinary: len <<= 8; len |= *lens--; - offs += len & 0x3fff; + offs += get_value(len); if (UNIV_UNLIKELY(len & 0x4000)) { ut_ad(dict_index_is_clust(index)); any |= REC_OFFS_EXTERNAL; - len = offs | REC_OFFS_EXTERNAL; + len = combine(offs, STORED_OFFPAGE); } else { len = offs; } @@ -435,7 +435,7 @@ resolved: } while (++i < rec_offs_n_fields(offsets)); *rec_offs_base(offsets) - = ulint(rec - (lens + 1)) | REC_OFFS_COMPACT | any; + = static_cast<offset_t>(rec - (lens + 1)) | REC_OFFS_COMPACT | any; } #ifdef UNIV_DEBUG @@ -449,7 +449,7 @@ rec_offs_make_valid( const rec_t* rec, const dict_index_t* index, bool leaf, - ulint* offsets) + offset_t* offsets) { ut_ad(rec_offs_n_fields(offsets) <= (leaf @@ -469,10 +469,10 @@ rec_offs_make_valid( || n >= rec_offs_n_fields(offsets)); for (; n < rec_offs_n_fields(offsets); n++) { ut_ad(leaf); - ut_ad(rec_offs_base(offsets)[1 + n] & REC_OFFS_DEFAULT); + ut_ad(get_type(rec_offs_base(offsets)[1 + n]) == DEFAULT); } - offsets[2] = ulint(rec); - offsets[3] = ulint(index); + memcpy(&offsets[RECORD_OFFSET], &rec, sizeof(rec)); + memcpy(&offsets[INDEX_OFFSET], &index, sizeof(index)); } /** Validate offsets returned by rec_get_offsets(). @@ -484,14 +484,14 @@ bool rec_offs_validate( const rec_t* rec, const dict_index_t* index, - const ulint* offsets) + const offset_t* offsets) { ulint i = rec_offs_n_fields(offsets); ulint last = ULINT_MAX; ulint comp = *rec_offs_base(offsets) & REC_OFFS_COMPACT; if (rec) { - ut_ad(ulint(rec) == offsets[2]); + ut_ad(!memcmp(&rec, &offsets[RECORD_OFFSET], sizeof(rec))); if (!comp) { const bool is_user_rec = rec_get_heap_no_old(rec) >= PAGE_HEAP_NO_USER_LOW; @@ -503,14 +503,14 @@ rec_offs_validate( || (n + (index->id == DICT_INDEXES_ID)) >= index->n_core_fields); for (; n < i; n++) { - ut_ad(rec_offs_base(offsets)[1 + n] - & REC_OFFS_DEFAULT); + ut_ad(get_type(rec_offs_base(offsets)[1 + n]) + == DEFAULT); } } } if (index) { ulint max_n_fields; - ut_ad(ulint(index) == offsets[3]); + ut_ad(!memcmp(&index, &offsets[INDEX_OFFSET], sizeof(index))); max_n_fields = ut_max( dict_index_get_n_fields(index), dict_index_get_n_unique_in_tree(index) + 1); @@ -536,7 +536,7 @@ rec_offs_validate( ut_a(!index->n_def || i <= max_n_fields); } while (i--) { - ulint curr = rec_offs_base(offsets)[1 + i] & REC_OFFS_MASK; + ulint curr = get_value(rec_offs_base(offsets)[1 + i]); ut_a(curr <= last); last = curr; } @@ -553,10 +553,9 @@ to the extra size (if REC_OFFS_COMPACT is set, the record is in the new format; if REC_OFFS_EXTERNAL is set, the record contains externally stored columns), and rec_offs_base(offsets)[1..n_fields] will be set to offsets past the end of fields 0..n_fields, or to the beginning of -fields 1..n_fields+1. When the high-order bit of the offset at [i+1] -is set (REC_OFFS_SQL_NULL), the field i is NULL. When the second -high-order bit of the offset at [i+1] is set (REC_OFFS_EXTERNAL), the -field i is being stored externally. +fields 1..n_fields+1. When the type of the offset at [i+1] +is (SQL_NULL), the field i is NULL. When the type of the offset at [i+1] +is (STORED_OFFPAGE), the field i is stored externally. @param[in] rec record @param[in] index the index that the record belongs in @param[in] leaf whether the record resides in a leaf page @@ -567,14 +566,14 @@ rec_init_offsets( const rec_t* rec, const dict_index_t* index, bool leaf, - ulint* offsets) + offset_t* offsets) { ulint i = 0; - ulint offs; + offset_t offs; ut_ad(index->n_core_null_bytes <= UT_BITS_IN_BYTES(index->n_nullable)); - ut_d(offsets[2] = ulint(rec)); - ut_d(offsets[3] = ulint(index)); + ut_d(memcpy(&offsets[RECORD_OFFSET], &rec, sizeof(rec))); + ut_d(memcpy(&offsets[INDEX_OFFSET], &index, sizeof(index))); if (dict_table_is_comp(index->table)) { const byte* nulls; @@ -632,7 +631,7 @@ rec_init_offsets( /* read the lengths of fields 0..n */ do { - ulint len; + offset_t len; if (UNIV_UNLIKELY(i == n_node_ptr_field)) { len = offs += REC_NODE_PTR_SIZE; goto resolved; @@ -654,7 +653,7 @@ rec_init_offsets( We do not advance offs, and we set the length to zero and enable the SQL NULL flag in offsets[]. */ - len = offs | REC_OFFS_SQL_NULL; + len = combine(offs, SQL_NULL); goto resolved; } null_mask <<= 1; @@ -686,7 +685,7 @@ rec_init_offsets( stored columns. Thus the "e" flag must be 0. */ ut_a(!(len & 0x4000)); - offs += len & 0x3fff; + offs += get_value(len); len = offs; goto resolved; @@ -702,39 +701,40 @@ resolved: } while (++i < rec_offs_n_fields(offsets)); *rec_offs_base(offsets) - = ulint(rec - (lens + 1)) | REC_OFFS_COMPACT; + = static_cast<offset_t>(rec - (lens + 1)) + | REC_OFFS_COMPACT; } else { /* Old-style record: determine extra size and end offsets */ offs = REC_N_OLD_EXTRA_BYTES; const ulint n_fields = rec_get_n_fields_old(rec); const ulint n = std::min(n_fields, rec_offs_n_fields(offsets)); - ulint any; + offset_t any; if (rec_get_1byte_offs_flag(rec)) { - offs += n_fields; + offs += static_cast<offset_t>(n_fields); any = offs; /* Determine offsets to fields */ do { offs = rec_1_get_field_end_info(rec, i); if (offs & REC_1BYTE_SQL_NULL_MASK) { offs &= ~REC_1BYTE_SQL_NULL_MASK; - offs |= REC_OFFS_SQL_NULL; + set_type(offs, SQL_NULL); } rec_offs_base(offsets)[1 + i] = offs; } while (++i < n); } else { - offs += 2 * n_fields; + offs += 2 * static_cast<offset_t>(n_fields); any = offs; /* Determine offsets to fields */ do { offs = rec_2_get_field_end_info(rec, i); if (offs & REC_2BYTE_SQL_NULL_MASK) { offs &= ~REC_2BYTE_SQL_NULL_MASK; - offs |= REC_OFFS_SQL_NULL; + set_type(offs, SQL_NULL); } if (offs & REC_2BYTE_EXTERN_MASK) { offs &= ~REC_2BYTE_EXTERN_MASK; - offs |= REC_OFFS_EXTERNAL; + set_type(offs, STORED_OFFPAGE); any |= REC_OFFS_EXTERNAL; } rec_offs_base(offsets)[1 + i] = offs; @@ -746,8 +746,8 @@ resolved: || i + (index->id == DICT_INDEXES_ID) == rec_offs_n_fields(offsets)); - offs = (rec_offs_base(offsets)[i] & REC_OFFS_MASK) - | REC_OFFS_DEFAULT; + ut_ad(i != 0); + offs = combine(rec_offs_base(offsets)[i], DEFAULT); do { rec_offs_base(offsets)[1 + i] = offs; @@ -770,11 +770,11 @@ resolved: (ULINT_UNDEFINED to compute all offsets) @param[in,out] heap memory heap @return the new offsets */ -ulint* +offset_t* rec_get_offsets_func( const rec_t* rec, const dict_index_t* index, - ulint* offsets, + offset_t* offsets, bool leaf, ulint n_fields, #ifdef UNIV_DEBUG @@ -856,11 +856,11 @@ rec_get_offsets_func( if (UNIV_UNLIKELY(!offsets) || UNIV_UNLIKELY(rec_offs_get_n_alloc(offsets) < size)) { if (UNIV_UNLIKELY(!*heap)) { - *heap = mem_heap_create_at(size * sizeof(ulint), + *heap = mem_heap_create_at(size * sizeof(*offsets), file, line); } - offsets = static_cast<ulint*>( - mem_heap_alloc(*heap, size * sizeof(ulint))); + offsets = static_cast<offset_t*>( + mem_heap_alloc(*heap, size * sizeof(*offsets))); rec_offs_set_n_alloc(offsets, size); } @@ -883,13 +883,13 @@ rec_get_offsets_reverse( const dict_index_t* index, /*!< in: record descriptor */ ulint node_ptr,/*!< in: nonzero=node pointer, 0=leaf node */ - ulint* offsets)/*!< in/out: array consisting of + offset_t* offsets)/*!< in/out: array consisting of offsets[0] allocated elements */ { ulint n; ulint i; - ulint offs; - ulint any_ext; + offset_t offs; + offset_t any_ext = 0; const byte* nulls; const byte* lens; dict_field_t* field; @@ -915,11 +915,10 @@ rec_get_offsets_reverse( lens = nulls + UT_BITS_IN_BYTES(index->n_nullable); i = offs = 0; null_mask = 1; - any_ext = 0; /* read the lengths of fields 0..n */ do { - ulint len; + offset_t len; if (UNIV_UNLIKELY(i == n_node_ptr_field)) { len = offs += REC_NODE_PTR_SIZE; goto resolved; @@ -940,7 +939,7 @@ rec_get_offsets_reverse( We do not advance offs, and we set the length to zero and enable the SQL NULL flag in offsets[]. */ - len = offs | REC_OFFS_SQL_NULL; + len = combine(offs, SQL_NULL); goto resolved; } null_mask <<= 1; @@ -964,10 +963,11 @@ rec_get_offsets_reverse( len <<= 8; len |= *lens++; - offs += len & 0x3fff; + offs += get_value(len); if (UNIV_UNLIKELY(len & 0x4000)) { any_ext = REC_OFFS_EXTERNAL; - len = offs | REC_OFFS_EXTERNAL; + len = combine(offs, + STORED_OFFPAGE); } else { len = offs; } @@ -978,15 +978,16 @@ rec_get_offsets_reverse( len = offs += len; } else { - len = offs += field->fixed_len; + len = offs += static_cast<offset_t>(field->fixed_len); } resolved: rec_offs_base(offsets)[i + 1] = len; } while (++i < rec_offs_n_fields(offsets)); ut_ad(lens >= extra); - *rec_offs_base(offsets) = (ulint(lens - extra) + REC_N_NEW_EXTRA_BYTES) - | REC_OFFS_COMPACT | any_ext; + *rec_offs_base(offsets) + = static_cast<offset_t>(lens - extra + REC_N_NEW_EXTRA_BYTES) + | REC_OFFS_COMPACT | any_ext; } /************************************************************//** @@ -1681,7 +1682,7 @@ void rec_init_offsets_temp( const rec_t* rec, const dict_index_t* index, - ulint* offsets, + offset_t* offsets, ulint n_core, const dict_col_t::def_t*def_val, rec_comp_status_t status) @@ -1707,7 +1708,7 @@ void rec_init_offsets_temp( const rec_t* rec, const dict_index_t* index, - ulint* offsets) + offset_t* offsets) { ut_ad(!index->is_instant()); rec_init_offsets_comp_ordinary(rec, index, offsets, @@ -1750,8 +1751,8 @@ rec_copy_prefix_to_dtuple( ulint n_fields, mem_heap_t* heap) { - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; rec_offs_init(offsets_); ut_ad(is_leaf || n_fields @@ -2047,7 +2048,7 @@ ibool rec_validate( /*=========*/ const rec_t* rec, /*!< in: physical record */ - const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets)/*!< in: array returned by rec_get_offsets() */ { ulint len; ulint n_fields; @@ -2156,7 +2157,7 @@ rec_print_comp( /*===========*/ FILE* file, /*!< in: file where to print */ const rec_t* rec, /*!< in: physical record */ - const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets)/*!< in: array returned by rec_get_offsets() */ { ulint i; @@ -2282,7 +2283,7 @@ rec_print_mbr_rec( /*==============*/ FILE* file, /*!< in: file where to print */ const rec_t* rec, /*!< in: physical record */ - const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets)/*!< in: array returned by rec_get_offsets() */ { ut_ad(rec_offs_validate(rec, NULL, offsets)); ut_ad(!rec_offs_any_default(offsets)); @@ -2350,7 +2351,7 @@ rec_print_new( /*==========*/ FILE* file, /*!< in: file where to print */ const rec_t* rec, /*!< in: physical record */ - const ulint* offsets)/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets)/*!< in: array returned by rec_get_offsets() */ { ut_ad(rec_offs_validate(rec, NULL, offsets)); @@ -2390,7 +2391,7 @@ rec_print( return; } else { mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; rec_offs_init(offsets_); rec_print_new(file, rec, @@ -2413,7 +2414,7 @@ rec_print( std::ostream& o, const rec_t* rec, ulint info, - const ulint* offsets) + const offset_t* offsets) { const ulint comp = rec_offs_comp(offsets); const ulint n = rec_offs_n_fields(offsets); @@ -2470,7 +2471,7 @@ std::ostream& operator<<(std::ostream& o, const rec_index_print& r) { mem_heap_t* heap = NULL; - ulint* offsets = rec_get_offsets( + offset_t* offsets = rec_get_offsets( r.m_rec, r.m_index, NULL, page_rec_is_leaf(r.m_rec), ULINT_UNDEFINED, &heap); rec_print(o, r.m_rec, @@ -2508,9 +2509,9 @@ rec_get_trx_id( const byte* trx_id; ulint len; mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_HEADER_SIZE + MAX_REF_PARTS + 2]; + offset_t offsets_[REC_OFFS_HEADER_SIZE + MAX_REF_PARTS + 2]; rec_offs_init(offsets_); - ulint* offsets = offsets_; + offset_t* offsets = offsets_; ut_ad(trx_id_col <= MAX_REF_PARTS); ut_ad(dict_index_is_clust(index)); @@ -2537,11 +2538,11 @@ rec_get_trx_id( @param[in] n nth field */ void rec_offs_make_nth_extern( - ulint* offsets, + offset_t* offsets, const ulint n) { ut_ad(!rec_offs_nth_sql_null(offsets, n)); - rec_offs_base(offsets)[1 + n] |= REC_OFFS_EXTERNAL; + set_type(rec_offs_base(offsets)[1 + n], STORED_OFFPAGE); } #ifdef WITH_WSREP # include "ha_prototypes.h" @@ -2561,8 +2562,8 @@ wsrep_rec_get_foreign_key( ulint i; uint key_parts; mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - const ulint* offsets; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + const offset_t* offsets; ut_ad(index_for); ut_ad(index_ref); diff --git a/storage/innobase/row/row0ftsort.cc b/storage/innobase/row/row0ftsort.cc index f40d6772536..e32b8d954bb 100644 --- a/storage/innobase/row/row0ftsort.cc +++ b/storage/innobase/row/row0ftsort.cc @@ -1372,7 +1372,7 @@ row_fts_sel_tree_propagate( ulint propogated, /*<! in: tree node propagated */ int* sel_tree, /*<! in: selection tree */ const mrec_t** mrec, /*<! in: sort record */ - ulint** offsets, /*<! in: record offsets */ + offset_t** offsets, /*<! in: record offsets */ dict_index_t* index) /*<! in/out: FTS index */ { ulint parent; @@ -1422,7 +1422,7 @@ row_fts_sel_tree_update( ulint propagated, /*<! in: node to propagate up */ ulint height, /*<! in: tree height */ const mrec_t** mrec, /*<! in: sort record */ - ulint** offsets, /*<! in: record offsets */ + offset_t** offsets, /*<! in: record offsets */ dict_index_t* index) /*<! in: index dictionary */ { ulint i; @@ -1444,7 +1444,7 @@ row_fts_build_sel_tree_level( int* sel_tree, /*<! in/out: selection tree */ ulint level, /*<! in: selection tree level */ const mrec_t** mrec, /*<! in: sort record */ - ulint** offsets, /*<! in: record offsets */ + offset_t** offsets, /*<! in: record offsets */ dict_index_t* index) /*<! in: index dictionary */ { ulint start; @@ -1504,7 +1504,7 @@ row_fts_build_sel_tree( /*===================*/ int* sel_tree, /*<! in/out: selection tree */ const mrec_t** mrec, /*<! in: sort record */ - ulint** offsets, /*<! in: record offsets */ + offset_t** offsets, /*<! in: record offsets */ dict_index_t* index) /*<! in: index dictionary */ { ulint treelevel = 1; @@ -1554,7 +1554,7 @@ row_fts_merge_insert( mem_heap_t* heap; dberr_t error = DB_SUCCESS; ulint* foffs; - ulint** offsets; + offset_t** offsets; fts_tokenizer_word_t new_word; ib_vector_t* positions; doc_id_t last_doc_id; @@ -1593,7 +1593,7 @@ row_fts_merge_insert( heap, sizeof (*b) * fts_sort_pll_degree); foffs = (ulint*) mem_heap_alloc( heap, sizeof(*foffs) * fts_sort_pll_degree); - offsets = (ulint**) mem_heap_alloc( + offsets = (offset_t**) mem_heap_alloc( heap, sizeof(*offsets) * fts_sort_pll_degree); buf = (mrec_buf_t**) mem_heap_alloc( heap, sizeof(*buf) * fts_sort_pll_degree); @@ -1617,10 +1617,10 @@ row_fts_merge_insert( num = 1 + REC_OFFS_HEADER_SIZE + dict_index_get_n_fields(index); - offsets[i] = static_cast<ulint*>(mem_heap_zalloc( + offsets[i] = static_cast<offset_t*>(mem_heap_zalloc( heap, num * sizeof *offsets[i])); - offsets[i][0] = num; - offsets[i][1] = dict_index_get_n_fields(index); + rec_offs_set_n_alloc(offsets[i], num); + rec_offs_set_n_fields(offsets[i], dict_index_get_n_fields(index)); block[i] = psort_info[i].merge_block[id]; crypt_block[i] = psort_info[i].crypt_block[id]; b[i] = psort_info[i].merge_block[id]; diff --git a/storage/innobase/row/row0import.cc b/storage/innobase/row/row0import.cc index 2fc28364b74..1d70d13190d 100644 --- a/storage/innobase/row/row0import.cc +++ b/storage/innobase/row/row0import.cc @@ -264,7 +264,7 @@ public: bool remove( const dict_index_t* index, page_zip_des_t* page_zip, - ulint* offsets) UNIV_NOTHROW + offset_t* offsets) UNIV_NOTHROW { /* We can't end up with an empty page unless it is root. */ if (page_get_n_recs(m_cur.block->frame) <= 1) { @@ -846,7 +846,7 @@ private: @return DB_SUCCESS or error code */ dberr_t adjust_cluster_index_blob_column( rec_t* rec, - const ulint* offsets, + const offset_t* offsets, ulint i) UNIV_NOTHROW; /** Adjusts the BLOB reference in the clustered index row for all @@ -856,7 +856,7 @@ private: @return DB_SUCCESS or error code */ dberr_t adjust_cluster_index_blob_columns( rec_t* rec, - const ulint* offsets) UNIV_NOTHROW; + const offset_t* offsets) UNIV_NOTHROW; /** In the clustered index, adjist the BLOB pointers as needed. Also update the BLOB reference, write the new space id. @@ -865,7 +865,7 @@ private: @return DB_SUCCESS or error code */ dberr_t adjust_cluster_index_blob_ref( rec_t* rec, - const ulint* offsets) UNIV_NOTHROW; + const offset_t* offsets) UNIV_NOTHROW; /** Purge delete-marked records, only if it is possible to do so without re-organising the B+tree. @@ -878,7 +878,7 @@ private: @return DB_SUCCESS or error code. */ dberr_t adjust_cluster_record( rec_t* rec, - const ulint* offsets) UNIV_NOTHROW; + const offset_t* offsets) UNIV_NOTHROW; /** Find an index with the matching id. @return row_index_t* instance or 0 */ @@ -912,10 +912,10 @@ private: RecIterator m_rec_iter; /** Record offset */ - ulint m_offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t m_offsets_[REC_OFFS_NORMAL_SIZE]; /** Pointer to m_offsets_ */ - ulint* m_offsets; + offset_t* m_offsets; /** Memory heap for the record offsets */ mem_heap_t* m_heap; @@ -1563,7 +1563,7 @@ inline dberr_t PageConverter::adjust_cluster_index_blob_column( rec_t* rec, - const ulint* offsets, + const offset_t* offsets, ulint i) UNIV_NOTHROW { ulint len; @@ -1607,7 +1607,7 @@ inline dberr_t PageConverter::adjust_cluster_index_blob_columns( rec_t* rec, - const ulint* offsets) UNIV_NOTHROW + const offset_t* offsets) UNIV_NOTHROW { ut_ad(rec_offs_any_extern(offsets)); @@ -1640,7 +1640,7 @@ inline dberr_t PageConverter::adjust_cluster_index_blob_ref( rec_t* rec, - const ulint* offsets) UNIV_NOTHROW + const offset_t* offsets) UNIV_NOTHROW { if (rec_offs_any_extern(offsets)) { dberr_t err; @@ -1683,7 +1683,7 @@ inline dberr_t PageConverter::adjust_cluster_record( rec_t* rec, - const ulint* offsets) UNIV_NOTHROW + const offset_t* offsets) UNIV_NOTHROW { dberr_t err; @@ -2281,8 +2281,8 @@ row_import_set_sys_max_row_id( ulint len; const byte* field; mem_heap_t* heap = NULL; - ulint offsets_[1 + REC_OFFS_HEADER_SIZE]; - ulint* offsets; + offset_t offsets_[1 + REC_OFFS_HEADER_SIZE]; + offset_t* offsets; rec_offs_init(offsets_); diff --git a/storage/innobase/row/row0ins.cc b/storage/innobase/row/row0ins.cc index 0fb994b547a..c494ae519ca 100644 --- a/storage/innobase/row/row0ins.cc +++ b/storage/innobase/row/row0ins.cc @@ -223,7 +223,7 @@ row_ins_sec_index_entry_by_modify( depending on whether mtr holds just a leaf latch or also a tree latch */ btr_cur_t* cursor, /*!< in: B-tree cursor */ - ulint** offsets,/*!< in/out: offsets on cursor->page_cur.rec */ + offset_t** offsets,/*!< in/out: offsets on cursor->page_cur.rec */ mem_heap_t* offsets_heap, /*!< in/out: memory heap that can be emptied */ mem_heap_t* heap, /*!< in/out: memory heap */ @@ -318,7 +318,7 @@ row_ins_clust_index_entry_by_modify( ulint mode, /*!< in: BTR_MODIFY_LEAF or BTR_MODIFY_TREE, depending on whether mtr holds just a leaf latch or also a tree latch */ - ulint** offsets,/*!< out: offsets on cursor->page_cur.rec */ + offset_t** offsets,/*!< out: offsets on cursor->page_cur.rec */ mem_heap_t** offsets_heap, /*!< in/out: pointer to memory heap that can be emptied, or NULL */ @@ -940,9 +940,9 @@ row_ins_foreign_fill_virtual( { THD* thd = current_thd; row_ext_t* ext; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; rec_offs_init(offsets_); - const ulint* offsets = + const offset_t* offsets = rec_get_offsets(rec, index, offsets_, true, ULINT_UNDEFINED, &cascade->heap); mem_heap_t* v_heap = NULL; @@ -1492,7 +1492,7 @@ row_ins_set_shared_rec_lock( const buf_block_t* block, /*!< in: buffer block of rec */ const rec_t* rec, /*!< in: record */ dict_index_t* index, /*!< in: index */ - const ulint* offsets,/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec, index) */ que_thr_t* thr) /*!< in: query thread */ { dberr_t err; @@ -1523,7 +1523,7 @@ row_ins_set_exclusive_rec_lock( const buf_block_t* block, /*!< in: buffer block of rec */ const rec_t* rec, /*!< in: record */ dict_index_t* index, /*!< in: index */ - const ulint* offsets,/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec, index) */ que_thr_t* thr) /*!< in: query thread */ { dberr_t err; @@ -1570,8 +1570,8 @@ row_ins_check_foreign_constraint( mtr_t mtr; trx_t* trx = thr_get_trx(thr); mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; bool skip_gap_lock; @@ -2074,7 +2074,7 @@ row_ins_dupl_error_with_rec( the record! */ const dtuple_t* entry, /*!< in: entry to insert */ dict_index_t* index, /*!< in: index */ - const ulint* offsets)/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets)/*!< in: rec_get_offsets(rec, index) */ { ulint matched_fields; ulint n_unique; @@ -2133,9 +2133,11 @@ row_ins_scan_sec_index_for_duplicate( btr_pcur_t pcur; dberr_t err = DB_SUCCESS; ulint allow_duplicates; - ulint* offsets = NULL; + offset_t offsets_[REC_OFFS_SEC_INDEX_SIZE]; + offset_t* offsets = offsets_; DBUG_ENTER("row_ins_scan_sec_index_for_duplicate"); + rec_offs_init(offsets_); ut_ad(s_latch == rw_lock_own_flagged( &index->lock, RW_LOCK_FLAG_S | RW_LOCK_FLAG_SX)); @@ -2265,7 +2267,7 @@ row_ins_duplicate_online( ulint n_uniq, /*!< in: offset of DB_TRX_ID */ const dtuple_t* entry, /*!< in: entry that is being inserted */ const rec_t* rec, /*!< in: clustered index record */ - ulint* offsets)/*!< in/out: rec_get_offsets(rec) */ + offset_t* offsets)/*!< in/out: rec_get_offsets(rec) */ { ulint fields = 0; @@ -2304,7 +2306,7 @@ row_ins_duplicate_error_in_clust_online( ulint n_uniq, /*!< in: offset of DB_TRX_ID */ const dtuple_t* entry, /*!< in: entry that is being inserted */ const btr_cur_t*cursor, /*!< in: cursor on insert position */ - ulint** offsets,/*!< in/out: rec_get_offsets(rec) */ + offset_t** offsets,/*!< in/out: rec_get_offsets(rec) */ mem_heap_t** heap) /*!< in/out: heap for offsets */ { dberr_t err = DB_SUCCESS; @@ -2353,8 +2355,8 @@ row_ins_duplicate_error_in_clust( ulint n_unique; trx_t* trx = thr_get_trx(thr); mem_heap_t*heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; rec_offs_init(offsets_); ut_ad(dict_index_is_clust(cursor->index)); @@ -2527,7 +2529,7 @@ dberr_t row_ins_index_entry_big_rec( const dtuple_t* entry, const big_rec_t* big_rec, - ulint* offsets, + offset_t* offsets, mem_heap_t** heap, dict_index_t* index, const void* thd __attribute__((unused))) @@ -2602,8 +2604,8 @@ row_ins_clust_index_entry_low( mtr_t mtr; ib_uint64_t auto_inc = 0; mem_heap_t* offsets_heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; rec_offs_init(offsets_); DBUG_ENTER("row_ins_clust_index_entry_low"); @@ -2917,8 +2919,8 @@ row_ins_sec_index_entry_low( dberr_t err = DB_SUCCESS; ulint n_unique; mtr_t mtr; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; rec_offs_init(offsets_); rtr_info_t rtr_info; diff --git a/storage/innobase/row/row0log.cc b/storage/innobase/row/row0log.cc index e2f6450e38d..6f522229c8d 100644 --- a/storage/innobase/row/row0log.cc +++ b/storage/innobase/row/row0log.cc @@ -643,7 +643,7 @@ row_log_table_delete( page X-latched */ dict_index_t* index, /*!< in/out: clustered index, S-latched or X-latched */ - const ulint* offsets,/*!< in: rec_get_offsets(rec,index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec,index) */ const byte* sys) /*!< in: DB_TRX_ID,DB_ROLL_PTR that should be logged, or NULL to use those in rec */ { @@ -934,7 +934,7 @@ row_log_table_low( page X-latched */ dict_index_t* index, /*!< in/out: clustered index, S-latched or X-latched */ - const ulint* offsets,/*!< in: rec_get_offsets(rec,index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec,index) */ bool insert, /*!< in: true if insert, false if update */ const dtuple_t* old_pk) /*!< in: old PRIMARY KEY value (if !insert and a PRIMARY KEY is being created) */ @@ -1103,7 +1103,7 @@ row_log_table_update( page X-latched */ dict_index_t* index, /*!< in/out: clustered index, S-latched or X-latched */ - const ulint* offsets,/*!< in: rec_get_offsets(rec,index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec,index) */ const dtuple_t* old_pk) /*!< in: row_log_table_get_pk() before the update */ { @@ -1153,7 +1153,7 @@ row_log_table_get_pk_col( dfield_t* dfield, mem_heap_t* heap, const rec_t* rec, - const ulint* offsets, + const offset_t* offsets, ulint i, const page_size_t& page_size, ulint max_len, @@ -1223,7 +1223,7 @@ row_log_table_get_pk( page X-latched */ dict_index_t* index, /*!< in/out: clustered index, S-latched or X-latched */ - const ulint* offsets,/*!< in: rec_get_offsets(rec,index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec,index) */ byte* sys, /*!< out: DB_TRX_ID,DB_ROLL_PTR for row_log_table_delete(), or NULL */ mem_heap_t** heap) /*!< in/out: memory heap where allocated */ @@ -1430,7 +1430,7 @@ row_log_table_insert( page X-latched */ dict_index_t* index, /*!< in/out: clustered index, S-latched or X-latched */ - const ulint* offsets)/*!< in: rec_get_offsets(rec,index) */ + const offset_t* offsets)/*!< in: rec_get_offsets(rec,index) */ { row_log_table_low(rec, index, offsets, true, NULL); } @@ -1521,7 +1521,7 @@ row_log_table_apply_convert_mrec( /*=============================*/ const mrec_t* mrec, /*!< in: merge record */ dict_index_t* index, /*!< in: index of mrec */ - const ulint* offsets, /*!< in: offsets of mrec */ + const offset_t* offsets, /*!< in: offsets of mrec */ row_log_t* log, /*!< in: rebuild context */ mem_heap_t* heap, /*!< in/out: memory heap */ dberr_t* error) /*!< out: DB_SUCCESS or @@ -1767,7 +1767,7 @@ row_log_table_apply_insert( /*=======================*/ que_thr_t* thr, /*!< in: query graph */ const mrec_t* mrec, /*!< in: record to insert */ - const ulint* offsets, /*!< in: offsets of mrec */ + const offset_t* offsets, /*!< in: offsets of mrec */ mem_heap_t* offsets_heap, /*!< in/out: memory heap that can be emptied */ mem_heap_t* heap, /*!< in/out: memory heap */ @@ -1819,7 +1819,7 @@ row_log_table_apply_delete_low( /*===========================*/ btr_pcur_t* pcur, /*!< in/out: B-tree cursor, will be trashed */ - const ulint* offsets, /*!< in: offsets on pcur */ + const offset_t* offsets, /*!< in: offsets on pcur */ mem_heap_t* heap, /*!< in/out: memory heap */ mtr_t* mtr) /*!< in/out: mini-transaction, will be committed */ @@ -1912,7 +1912,7 @@ row_log_table_apply_delete( DB_TRX_ID in the new clustered index */ const mrec_t* mrec, /*!< in: merge record */ - const ulint* moffsets, /*!< in: offsets of mrec */ + const offset_t* moffsets, /*!< in: offsets of mrec */ mem_heap_t* offsets_heap, /*!< in/out: memory heap that can be emptied */ mem_heap_t* heap, /*!< in/out: memory heap */ @@ -1923,7 +1923,7 @@ row_log_table_apply_delete( dtuple_t* old_pk; mtr_t mtr; btr_pcur_t pcur; - ulint* offsets; + offset_t* offsets; ut_ad(rec_offs_n_fields(moffsets) == dict_index_get_n_unique(index) + 2); @@ -2035,7 +2035,7 @@ row_log_table_apply_update( DB_TRX_ID in the new clustered index */ const mrec_t* mrec, /*!< in: new value */ - const ulint* offsets, /*!< in: offsets of mrec */ + const offset_t* offsets, /*!< in: offsets of mrec */ mem_heap_t* offsets_heap, /*!< in/out: memory heap that can be emptied */ mem_heap_t* heap, /*!< in/out: memory heap */ @@ -2173,7 +2173,7 @@ func_exit_committed: } /* Prepare to update (or delete) the record. */ - ulint* cur_offsets = rec_get_offsets( + offset_t* cur_offsets = rec_get_offsets( btr_pcur_get_rec(&pcur), index, NULL, true, ULINT_UNDEFINED, &offsets_heap); @@ -2411,7 +2411,7 @@ row_log_table_apply_op( mem_heap_t* heap, /*!< in/out: memory heap */ const mrec_t* mrec, /*!< in: merge record */ const mrec_t* mrec_end, /*!< in: end of buffer */ - ulint* offsets) /*!< in/out: work area + offset_t* offsets) /*!< in/out: work area for parsing mrec */ { row_log_t* log = dup->index->online_log; @@ -2745,7 +2745,7 @@ row_log_table_apply_ops( const mrec_t* next_mrec_end; mem_heap_t* heap; mem_heap_t* offsets_heap; - ulint* offsets; + offset_t* offsets; bool has_index_lock; dict_index_t* index = const_cast<dict_index_t*>( dup->index); @@ -2772,9 +2772,9 @@ row_log_table_apply_ops( UNIV_MEM_INVALID(&mrec_end, sizeof mrec_end); - offsets = static_cast<ulint*>(ut_malloc_nokey(i * sizeof *offsets)); - offsets[0] = i; - offsets[1] = dict_index_get_n_fields(index); + offsets = static_cast<offset_t*>(ut_malloc_nokey(i * sizeof *offsets)); + rec_offs_set_n_alloc(offsets, i); + rec_offs_set_n_fields(offsets, dict_index_get_n_fields(index)); heap = mem_heap_create(srv_page_size); offsets_heap = mem_heap_create(srv_page_size); @@ -3318,7 +3318,7 @@ row_log_apply_op_low( { mtr_t mtr; btr_cur_t cursor; - ulint* offsets = NULL; + offset_t* offsets = NULL; ut_ad(!dict_index_is_clust(index)); @@ -3552,7 +3552,7 @@ row_log_apply_op( in exclusive mode */ const mrec_t* mrec, /*!< in: merge record */ const mrec_t* mrec_end, /*!< in: end of buffer */ - ulint* offsets) /*!< in/out: work area for + offset_t* offsets) /*!< in/out: work area for rec_init_offsets_temp() */ { @@ -3671,7 +3671,7 @@ row_log_apply_ops( const mrec_t* next_mrec_end; mem_heap_t* offsets_heap; mem_heap_t* heap; - ulint* offsets; + offset_t* offsets; bool has_index_lock; const ulint i = 1 + REC_OFFS_HEADER_SIZE + dict_index_get_n_fields(index); @@ -3682,9 +3682,9 @@ row_log_apply_ops( ut_ad(index->online_log); UNIV_MEM_INVALID(&mrec_end, sizeof mrec_end); - offsets = static_cast<ulint*>(ut_malloc_nokey(i * sizeof *offsets)); - offsets[0] = i; - offsets[1] = dict_index_get_n_fields(index); + offsets = static_cast<offset_t*>(ut_malloc_nokey(i * sizeof *offsets)); + rec_offs_set_n_alloc(offsets, i); + rec_offs_set_n_fields(offsets, dict_index_get_n_fields(index)); offsets_heap = mem_heap_create(srv_page_size); heap = mem_heap_create(srv_page_size); diff --git a/storage/innobase/row/row0merge.cc b/storage/innobase/row/row0merge.cc index e488560b97f..44d4a5553b7 100644 --- a/storage/innobase/row/row0merge.cc +++ b/storage/innobase/row/row0merge.cc @@ -120,7 +120,7 @@ public: btr_cur_t ins_cur; mtr_t mtr; rtr_info_t rtr_info; - ulint* ins_offsets = NULL; + offset_t* ins_offsets = NULL; dberr_t error = DB_SUCCESS; dtuple_t* dtuple; ulint count = 0; @@ -1046,8 +1046,8 @@ row_merge_heap_create( /*==================*/ const dict_index_t* index, /*!< in: record descriptor */ mrec_buf_t** buf, /*!< out: 3 buffers */ - ulint** offsets1, /*!< out: offsets */ - ulint** offsets2) /*!< out: offsets */ + offset_t** offsets1, /*!< out: offsets */ + offset_t** offsets2) /*!< out: offsets */ { ulint i = 1 + REC_OFFS_HEADER_SIZE + dict_index_get_n_fields(index); @@ -1056,13 +1056,15 @@ row_merge_heap_create( *buf = static_cast<mrec_buf_t*>( mem_heap_alloc(heap, 3 * sizeof **buf)); - *offsets1 = static_cast<ulint*>( + *offsets1 = static_cast<offset_t*>( mem_heap_alloc(heap, i * sizeof **offsets1)); - *offsets2 = static_cast<ulint*>( + *offsets2 = static_cast<offset_t*>( mem_heap_alloc(heap, i * sizeof **offsets2)); - (*offsets1)[0] = (*offsets2)[0] = i; - (*offsets1)[1] = (*offsets2)[1] = dict_index_get_n_fields(index); + rec_offs_set_n_alloc(*offsets1, i); + rec_offs_set_n_alloc(*offsets2, i); + rec_offs_set_n_fields(*offsets1, dict_index_get_n_fields(index)); + rec_offs_set_n_fields(*offsets2, dict_index_get_n_fields(index)); return(heap); } @@ -1178,7 +1180,7 @@ row_merge_read_rec( const mrec_t** mrec, /*!< out: pointer to merge record, or NULL on end of list (non-NULL on I/O error) */ - ulint* offsets,/*!< out: offsets of mrec */ + offset_t* offsets,/*!< out: offsets of mrec */ row_merge_block_t* crypt_block, /*!< in: crypt buf or NULL */ ulint space) /*!< in: space id */ { @@ -1189,7 +1191,7 @@ row_merge_read_rec( ut_ad(b >= &block[0]); ut_ad(b < &block[srv_sort_buf_size]); - ut_ad(*offsets == 1 + REC_OFFS_HEADER_SIZE + ut_ad(rec_offs_get_n_alloc(offsets) == 1 + REC_OFFS_HEADER_SIZE + dict_index_get_n_fields(index)); DBUG_ENTER("row_merge_read_rec"); @@ -1296,12 +1298,7 @@ err_exit: memcpy(*buf, b, avail_size); *mrec = *buf + extra_size; - /* We cannot invoke rec_offs_make_valid() here, because there - are no REC_N_NEW_EXTRA_BYTES between extra_size and data_size. - Similarly, rec_offs_validate() would fail, because it invokes - rec_get_status(). */ - ut_d(offsets[2] = (ulint) *mrec); - ut_d(offsets[3] = (ulint) index); + rec_init_offsets_temp(*mrec, index, offsets); if (!row_merge_read(fd, ++(*foffs), block, crypt_block, @@ -1340,7 +1337,7 @@ row_merge_write_rec_low( ulint foffs, /*!< in: file offset */ #endif /* !DBUG_OFF */ const mrec_t* mrec, /*!< in: record to write */ - const ulint* offsets)/*!< in: offsets of mrec */ + const offset_t* offsets)/*!< in: offsets of mrec */ #ifdef DBUG_OFF # define row_merge_write_rec_low(b, e, size, fd, foffs, mrec, offsets) \ row_merge_write_rec_low(b, e, mrec, offsets) @@ -1382,7 +1379,7 @@ row_merge_write_rec( const pfs_os_file_t& fd, /*!< in: file descriptor */ ulint* foffs, /*!< in/out: file offset */ const mrec_t* mrec, /*!< in: record to write */ - const ulint* offsets,/*!< in: offsets of mrec */ + const offset_t* offsets,/*!< in: offsets of mrec */ row_merge_block_t* crypt_block, /*!< in: crypt buf or NULL */ ulint space) /*!< in: space id */ { @@ -1929,7 +1926,7 @@ row_merge_read_clustered_index( const rec_t* rec; trx_id_t rec_trx_id; - ulint* offsets; + offset_t* offsets; dtuple_t* row; row_ext_t* ext; page_cur_t* cur = btr_pcur_get_page_cur(&pcur); @@ -2963,8 +2960,8 @@ row_merge_blocks( const mrec_t* mrec0; /*!< merge rec, points to block[0] or buf[0] */ const mrec_t* mrec1; /*!< merge rec, points to block[srv_sort_buf_size] or buf[1] */ - ulint* offsets0;/* offsets of mrec0 */ - ulint* offsets1;/* offsets of mrec1 */ + offset_t* offsets0;/* offsets of mrec0 */ + offset_t* offsets1;/* offsets of mrec1 */ DBUG_ENTER("row_merge_blocks"); DBUG_LOG("ib_merge_sort", @@ -3081,8 +3078,8 @@ row_merge_blocks_copy( const byte* b0; /*!< pointer to block[0] */ byte* b2; /*!< pointer to block[2 * srv_sort_buf_size] */ const mrec_t* mrec0; /*!< merge rec, points to block[0] */ - ulint* offsets0;/* offsets of mrec0 */ - ulint* offsets1;/* dummy offsets */ + offset_t* offsets0;/* offsets of mrec0 */ + offset_t* offsets1;/* dummy offsets */ DBUG_ENTER("row_merge_blocks_copy"); DBUG_LOG("ib_merge_sort", @@ -3421,7 +3418,7 @@ static void row_merge_copy_blobs( const mrec_t* mrec, - const ulint* offsets, + const offset_t* offsets, const page_size_t& page_size, dtuple_t* tuple, mem_heap_t* heap) @@ -3530,7 +3527,7 @@ row_merge_insert_index_tuples( mem_heap_t* tuple_heap; dberr_t error = DB_SUCCESS; ulint foffs = 0; - ulint* offsets; + offset_t* offsets; mrec_buf_t* buf; ulint n_rows = 0; dtuple_t* dtuple; @@ -3558,10 +3555,10 @@ row_merge_insert_index_tuples( ulint i = 1 + REC_OFFS_HEADER_SIZE + dict_index_get_n_fields(index); heap = mem_heap_create(sizeof *buf + i * sizeof *offsets); - offsets = static_cast<ulint*>( + offsets = static_cast<offset_t*>( mem_heap_alloc(heap, i * sizeof *offsets)); - offsets[0] = i; - offsets[1] = dict_index_get_n_fields(index); + rec_offs_set_n_alloc(offsets, i); + rec_offs_set_n_fields(offsets, dict_index_get_n_fields(index)); } if (row_buf != NULL) { diff --git a/storage/innobase/row/row0mysql.cc b/storage/innobase/row/row0mysql.cc index fbd37216ed4..fcb57f47a7f 100644 --- a/storage/innobase/row/row0mysql.cc +++ b/storage/innobase/row/row0mysql.cc @@ -2063,8 +2063,8 @@ row_unlock_for_mysql( + index->trx_id_offset); } else { mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; rec_offs_init(offsets_); offsets = rec_get_offsets(rec, index, offsets, true, @@ -4682,8 +4682,8 @@ row_scan_index_for_mysql( ulint cnt; mem_heap_t* heap = NULL; ulint n_ext; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets; rec_offs_init(offsets_); *n_rows = 0; @@ -4816,7 +4816,7 @@ not_ok: tmp_heap = mem_heap_create(size); - offsets = static_cast<ulint*>( + offsets = static_cast<offset_t*>( mem_heap_dup(tmp_heap, offsets, size)); } diff --git a/storage/innobase/row/row0purge.cc b/storage/innobase/row/row0purge.cc index b71f8491787..bca6d802a53 100644 --- a/storage/innobase/row/row0purge.cc +++ b/storage/innobase/row/row0purge.cc @@ -108,8 +108,8 @@ row_purge_remove_clust_if_poss_low( mtr_t mtr; rec_t* rec; mem_heap_t* heap = NULL; - ulint* offsets; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; rec_offs_init(offsets_); ut_ad(rw_lock_own(&dict_operation_lock, RW_LOCK_S) @@ -801,9 +801,9 @@ static void row_purge_reset_trx_id(purge_node_t* node, mtr_t* mtr) mem_heap_t* heap = NULL; /* Reserve enough offsets for the PRIMARY KEY and 2 columns so that we can access DB_TRX_ID, DB_ROLL_PTR. */ - ulint offsets_[REC_OFFS_HEADER_SIZE + MAX_REF_PARTS + 2]; + offset_t offsets_[REC_OFFS_HEADER_SIZE + MAX_REF_PARTS + 2]; rec_offs_init(offsets_); - ulint* offsets = rec_get_offsets( + offset_t* offsets = rec_get_offsets( rec, index, offsets_, true, trx_id_pos + 2, &heap); ut_ad(heap == NULL); @@ -1381,7 +1381,7 @@ purge_node_t::validate_pcur() dict_index_t* clust_index = pcur.btr_cur.index; - ulint* offsets = rec_get_offsets( + offset_t* offsets = rec_get_offsets( pcur.old_rec, clust_index, NULL, true, pcur.old_n_fields, &heap); diff --git a/storage/innobase/row/row0row.cc b/storage/innobase/row/row0row.cc index a2eb6ea6cf4..cdcb568a508 100644 --- a/storage/innobase/row/row0row.cc +++ b/storage/innobase/row/row0row.cc @@ -393,7 +393,7 @@ row_build_low( ulint type, const dict_index_t* index, const rec_t* rec, - const ulint* offsets, + const offset_t* offsets, const dict_table_t* col_table, const dtuple_t* defaults, const dict_add_v_col_t* add_v, @@ -409,7 +409,7 @@ row_build_low( byte* buf; ulint j; mem_heap_t* tmp_heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; rec_offs_init(offsets_); ut_ad(index != NULL); @@ -457,7 +457,7 @@ row_build_low( } /* Avoid a debug assertion in rec_offs_validate(). */ - rec_offs_make_valid(copy, index, true, const_cast<ulint*>(offsets)); + rec_offs_make_valid(copy, index, true, const_cast<offset_t*>(offsets)); if (!col_table) { ut_ad(!col_map); @@ -551,7 +551,7 @@ row_build_low( } } - rec_offs_make_valid(rec, index, true, const_cast<ulint*>(offsets)); + rec_offs_make_valid(rec, index, true, const_cast<offset_t*>(offsets)); ut_ad(dtuple_check_typed(row)); @@ -604,7 +604,7 @@ row_build( this record must be at least s-latched and the latch held as long as the row dtuple is used! */ - const ulint* offsets,/*!< in: rec_get_offsets(rec,index) + const offset_t* offsets,/*!< in: rec_get_offsets(rec,index) or NULL, in which case this function will invoke rec_get_offsets() */ const dict_table_t* col_table, @@ -657,7 +657,7 @@ row_build_w_add_vcol( ulint type, const dict_index_t* index, const rec_t* rec, - const ulint* offsets, + const offset_t* offsets, const dict_table_t* col_table, const dtuple_t* defaults, const dict_add_v_col_t* add_v, @@ -684,7 +684,7 @@ dtuple_t* row_rec_to_index_entry_impl( const rec_t* rec, const dict_index_t* index, - const ulint* offsets, + const offset_t* offsets, ulint* n_ext, mem_heap_t* heap) { @@ -749,7 +749,7 @@ dtuple_t* row_rec_to_index_entry_low( const rec_t* rec, const dict_index_t* index, - const ulint* offsets, + const offset_t* offsets, ulint* n_ext, mem_heap_t* heap) { @@ -766,7 +766,7 @@ row_rec_to_index_entry( /*===================*/ const rec_t* rec, /*!< in: record in the index */ const dict_index_t* index, /*!< in: index */ - const ulint* offsets,/*!< in: rec_get_offsets(rec) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec) */ ulint* n_ext, /*!< out: number of externally stored columns */ mem_heap_t* heap) /*!< in: memory heap from which @@ -788,11 +788,11 @@ row_rec_to_index_entry( copy_rec = rec_copy(buf, rec, offsets); rec_offs_make_valid(copy_rec, index, true, - const_cast<ulint*>(offsets)); + const_cast<offset_t*>(offsets)); entry = row_rec_to_index_entry_impl<true>( copy_rec, index, offsets, n_ext, heap); rec_offs_make_valid(rec, index, true, - const_cast<ulint*>(offsets)); + const_cast<offset_t*>(offsets)); dtuple_set_info_bits(entry, rec_get_info_bits(rec, rec_offs_comp(offsets))); @@ -834,8 +834,8 @@ row_build_row_ref( ulint clust_col_prefix_len; ulint i; mem_heap_t* tmp_heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; rec_offs_init(offsets_); ut_ad(index != NULL); @@ -930,7 +930,7 @@ row_build_row_ref_in_tuple( held as long as the row reference is used! */ const dict_index_t* index, /*!< in: secondary index */ - ulint* offsets)/*!< in: rec_get_offsets(rec, index) + offset_t* offsets)/*!< in: rec_get_offsets(rec, index) or NULL */ { const dict_index_t* clust_index; @@ -942,7 +942,7 @@ row_build_row_ref_in_tuple( ulint clust_col_prefix_len; ulint i; mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; rec_offs_init(offsets_); ut_ad(!dict_index_is_clust(index)); diff --git a/storage/innobase/row/row0sel.cc b/storage/innobase/row/row0sel.cc index 5e78885a720..c2b23caa513 100644 --- a/storage/innobase/row/row0sel.cc +++ b/storage/innobase/row/row0sel.cc @@ -171,10 +171,10 @@ row_sel_sec_rec_is_for_clust_rec( ulint n; ulint i; mem_heap_t* heap = NULL; - ulint clust_offsets_[REC_OFFS_NORMAL_SIZE]; - ulint sec_offsets_[REC_OFFS_SMALL_SIZE]; - ulint* clust_offs = clust_offsets_; - ulint* sec_offs = sec_offsets_; + offset_t clust_offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t sec_offsets_[REC_OFFS_SMALL_SIZE]; + offset_t* clust_offs = clust_offsets_; + offset_t* sec_offs = sec_offsets_; ibool is_equal = TRUE; VCOL_STORAGE* vcol_storage= 0; byte* record; @@ -493,7 +493,7 @@ row_sel_fetch_columns( dict_index_t* index, /*!< in: record index */ const rec_t* rec, /*!< in: record in a clustered or non-clustered index; must be protected by a page latch */ - const ulint* offsets,/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec, index) */ sym_node_t* column) /*!< in: first column in a column list, or NULL */ { @@ -759,7 +759,7 @@ row_sel_build_prev_vers( ReadView* read_view, /*!< in: read view */ dict_index_t* index, /*!< in: plan node for table */ rec_t* rec, /*!< in: record in a clustered index */ - ulint** offsets, /*!< in/out: offsets returned by + offset_t** offsets, /*!< in/out: offsets returned by rec_get_offsets(rec, plan->index) */ mem_heap_t** offset_heap, /*!< in/out: memory heap from which the offsets are allocated */ @@ -794,7 +794,7 @@ row_sel_build_committed_vers_for_mysql( dict_index_t* clust_index, /*!< in: clustered index */ row_prebuilt_t* prebuilt, /*!< in: prebuilt struct */ const rec_t* rec, /*!< in: record in a clustered index */ - ulint** offsets, /*!< in/out: offsets returned by + offset_t** offsets, /*!< in/out: offsets returned by rec_get_offsets(rec, clust_index) */ mem_heap_t** offset_heap, /*!< in/out: memory heap from which the offsets are allocated */ @@ -908,8 +908,8 @@ row_sel_get_clust_rec( rec_t* old_vers; dberr_t err; mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; rec_offs_init(offsets_); *out_rec = NULL; @@ -1068,7 +1068,7 @@ sel_set_rtr_rec_lock( btr_pcur_t* pcur, /*!< in: cursor */ const rec_t* first_rec,/*!< in: record */ dict_index_t* index, /*!< in: index */ - const ulint* offsets,/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec, index) */ ulint mode, /*!< in: lock mode */ ulint type, /*!< in: LOCK_ORDINARY, LOCK_GAP, or LOC_REC_NOT_GAP */ @@ -1080,8 +1080,8 @@ sel_set_rtr_rec_lock( dberr_t err = DB_SUCCESS; trx_t* trx = thr_get_trx(thr); buf_block_t* cur_block = btr_pcur_get_block(pcur); - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* my_offsets = const_cast<ulint*>(offsets); + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* my_offsets = const_cast<offset_t*>(offsets); rec_t* rec = const_cast<rec_t*>(first_rec); rtr_rec_vector* match_rec; rtr_rec_vector::iterator end; @@ -1234,7 +1234,7 @@ sel_set_rec_lock( btr_pcur_t* pcur, /*!< in: cursor */ const rec_t* rec, /*!< in: record */ dict_index_t* index, /*!< in: index */ - const ulint* offsets,/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec, index) */ ulint mode, /*!< in: lock mode */ ulint type, /*!< in: LOCK_ORDINARY, LOCK_GAP, or LOC_REC_NOT_GAP */ @@ -1509,8 +1509,8 @@ exhausted: a previous version of the record */ mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; rec_offs_init(offsets_); offsets = rec_get_offsets(rec, index, offsets, true, ULINT_UNDEFINED, &heap); @@ -1593,8 +1593,8 @@ row_sel( to the next non-clustered record */ dberr_t err; mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; rec_offs_init(offsets_); ut_ad(thr->run_node == node); @@ -2701,7 +2701,7 @@ row_sel_store_row_id_to_prebuilt( row_prebuilt_t* prebuilt, /*!< in/out: prebuilt */ const rec_t* index_rec, /*!< in: record */ const dict_index_t* index, /*!< in: index of the record */ - const ulint* offsets) /*!< in: rec_get_offsets + const offset_t* offsets) /*!< in: rec_get_offsets (index_rec, index) */ { const byte* data; @@ -2927,7 +2927,7 @@ row_sel_store_mysql_field( row_prebuilt_t* prebuilt, const rec_t* rec, const dict_index_t* index, - const ulint* offsets, + const offset_t* offsets, ulint field_no, const mysql_row_templ_t*templ) { @@ -3083,7 +3083,7 @@ static bool row_sel_store_mysql_rec( const dtuple_t* vrow, bool rec_clust, const dict_index_t* index, - const ulint* offsets) + const offset_t* offsets) { DBUG_ENTER("row_sel_store_mysql_rec"); @@ -3214,7 +3214,7 @@ row_sel_build_prev_vers_for_mysql( dict_index_t* clust_index, /*!< in: clustered index */ row_prebuilt_t* prebuilt, /*!< in: prebuilt struct */ const rec_t* rec, /*!< in: record in a clustered index */ - ulint** offsets, /*!< in/out: offsets returned by + offset_t** offsets, /*!< in/out: offsets returned by rec_get_offsets(rec, clust_index) */ mem_heap_t** offset_heap, /*!< in/out: memory heap from which the offsets are allocated */ @@ -3252,7 +3252,7 @@ public: dberr_t operator()(row_prebuilt_t *prebuilt, dict_index_t *sec_index, const rec_t *rec, que_thr_t *thr, const rec_t **out_rec, - ulint **offsets, mem_heap_t **offset_heap, + offset_t **offsets, mem_heap_t **offset_heap, dtuple_t **vrow, mtr_t *mtr); }; @@ -3275,7 +3275,7 @@ Row_sel_get_clust_rec_for_mysql::operator()( it, NULL if the old version did not exist in the read view, i.e., it was a fresh inserted version */ - ulint** offsets,/*!< in: offsets returned by + offset_t** offsets,/*!< in: offsets returned by rec_get_offsets(rec, sec_index); out: offsets returned by rec_get_offsets(out_rec, clust_index) */ @@ -3856,7 +3856,7 @@ row_sel_try_search_shortcut_for_mysql( /*==================================*/ const rec_t** out_rec,/*!< out: record if found */ row_prebuilt_t* prebuilt,/*!< in: prebuilt struct */ - ulint** offsets,/*!< in/out: for rec_get_offsets(*out_rec) */ + offset_t** offsets,/*!< in/out: for rec_get_offsets(*out_rec) */ mem_heap_t** heap, /*!< in/out: heap for rec_get_offsets() */ mtr_t* mtr) /*!< in: started mtr */ { @@ -3930,7 +3930,7 @@ row_search_idx_cond_check( row_prebuilt_t* prebuilt, /*!< in/out: prebuilt struct for the table handle */ const rec_t* rec, /*!< in: InnoDB record */ - const ulint* offsets) /*!< in: rec_get_offsets() */ + const offset_t* offsets) /*!< in: rec_get_offsets() */ { ICP_RESULT result; ulint i; @@ -4018,8 +4018,8 @@ row_sel_fill_vrow( dtuple_t** vrow, mem_heap_t* heap) { - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; rec_offs_init(offsets_); ut_ad(!(*vrow)); @@ -4073,7 +4073,7 @@ rec_field_len_in_chars( const dict_col_t* col, const ulint field_no, const rec_t* rec, - const ulint* offsets) + const offset_t* offsets) { const ulint cset = dtype_get_charset_coll(col->prtype); const CHARSET_INFO* cs = all_charsets[cset]; @@ -4100,7 +4100,7 @@ static bool row_search_with_covering_prefix( row_prebuilt_t* prebuilt, const rec_t* rec, - const ulint* offsets) + const offset_t* offsets) { const dict_index_t* index = prebuilt->index; ut_ad(!dict_index_is_clust(index)); @@ -4230,8 +4230,8 @@ row_search_mvcc( ibool same_user_rec; mtr_t mtr; mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; ibool table_lock_waited = FALSE; byte* next_buf = 0; bool spatial_search = false; @@ -5931,8 +5931,8 @@ row_search_autoinc_read_column( const byte* data; ib_uint64_t value; mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; rec_offs_init(offsets_); ut_ad(page_rec_is_leaf(rec)); diff --git a/storage/innobase/row/row0uins.cc b/storage/innobase/row/row0uins.cc index 46b70b48f17..1c24e7bd177 100644 --- a/storage/innobase/row/row0uins.cc +++ b/storage/innobase/row/row0uins.cc @@ -115,7 +115,7 @@ row_undo_ins_remove_clust_rec( if (online && dict_index_is_online_ddl(index)) { const rec_t* rec = btr_cur_get_rec(btr_cur); mem_heap_t* heap = NULL; - const ulint* offsets = rec_get_offsets( + const offset_t* offsets = rec_get_offsets( rec, index, NULL, true, ULINT_UNDEFINED, &heap); row_log_table_delete(rec, index, offsets, NULL); mem_heap_free(heap); diff --git a/storage/innobase/row/row0umod.cc b/storage/innobase/row/row0umod.cc index 0172d47b8e2..bb91cb2b672 100644 --- a/storage/innobase/row/row0umod.cc +++ b/storage/innobase/row/row0umod.cc @@ -76,7 +76,7 @@ dberr_t row_undo_mod_clust_low( /*===================*/ undo_node_t* node, /*!< in: row undo node */ - ulint** offsets,/*!< out: rec_get_offsets() on the record */ + offset_t** offsets,/*!< out: rec_get_offsets() on the record */ mem_heap_t** offsets_heap, /*!< in/out: memory heap that can be emptied */ mem_heap_t* heap, /*!< in/out: memory heap */ @@ -159,11 +159,11 @@ static ulint row_trx_id_offset(const rec_t* rec, const dict_index_t* index) if (!trx_id_offset) { /* Reserve enough offsets for the PRIMARY KEY and 2 columns so that we can access DB_TRX_ID, DB_ROLL_PTR. */ - ulint offsets_[REC_OFFS_HEADER_SIZE + MAX_REF_PARTS + 2]; + offset_t offsets_[REC_OFFS_HEADER_SIZE + MAX_REF_PARTS + 2]; rec_offs_init(offsets_); mem_heap_t* heap = NULL; const ulint trx_id_pos = index->n_uniq ? index->n_uniq : 1; - ulint* offsets = rec_get_offsets(rec, index, offsets_, true, + offset_t* offsets = rec_get_offsets(rec, index, offsets_, true, trx_id_pos + 1, &heap); ut_ad(!heap); ulint len; @@ -243,7 +243,7 @@ row_undo_mod_clust( mem_heap_t* heap = mem_heap_create(1024); mem_heap_t* offsets_heap = NULL; - ulint* offsets = NULL; + offset_t* offsets = NULL; const dtuple_t* rebuilt_old_pk; byte sys[DATA_TRX_ID_LEN + DATA_ROLL_PTR_LEN]; @@ -403,7 +403,7 @@ row_undo_mod_clust( ut_ad(index->n_uniq <= MAX_REF_PARTS); /* Reserve enough offsets for the PRIMARY KEY and 2 columns so that we can access DB_TRX_ID, DB_ROLL_PTR. */ - ulint offsets_[REC_OFFS_HEADER_SIZE + MAX_REF_PARTS + 2]; + offset_t offsets_[REC_OFFS_HEADER_SIZE + MAX_REF_PARTS + 2]; rec_offs_init(offsets_); offsets = rec_get_offsets( rec, index, offsets_, true, trx_id_pos + 2, &heap); @@ -696,7 +696,7 @@ try_again: switch (search_result) { mem_heap_t* heap; mem_heap_t* offsets_heap; - ulint* offsets; + offset_t* offsets; case ROW_BUFFERED: case ROW_NOT_DELETED_REF: /* These are invalid outcomes, because the mode passed diff --git a/storage/innobase/row/row0undo.cc b/storage/innobase/row/row0undo.cc index 2c67c2c3442..a8d09b71dc2 100644 --- a/storage/innobase/row/row0undo.cc +++ b/storage/innobase/row/row0undo.cc @@ -168,8 +168,8 @@ row_undo_search_clust_to_pcur( row_ext_t** ext; const rec_t* rec; mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets = offsets_; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; rec_offs_init(offsets_); ut_ad(!node->table->skip_alter_undo); diff --git a/storage/innobase/row/row0upd.cc b/storage/innobase/row/row0upd.cc index 06cd1e93166..ba66c3db1de 100644 --- a/storage/innobase/row/row0upd.cc +++ b/storage/innobase/row/row0upd.cc @@ -214,7 +214,7 @@ row_upd_check_references_constraints( cursor position is lost in this function! */ dict_table_t* table, /*!< in: table in question */ dict_index_t* index, /*!< in: index of the cursor */ - ulint* offsets,/*!< in/out: rec_get_offsets(pcur.rec, index) */ + offset_t* offsets,/*!< in/out: rec_get_offsets(pcur.rec, index) */ que_thr_t* thr, /*!< in: query thread */ mtr_t* mtr) /*!< in: mtr */ { @@ -332,7 +332,7 @@ wsrep_row_upd_check_foreign_constraints( cursor position is lost in this function! */ dict_table_t* table, /*!< in: table in question */ dict_index_t* index, /*!< in: index of the cursor */ - ulint* offsets,/*!< in/out: rec_get_offsets(pcur.rec, index) */ + offset_t* offsets,/*!< in/out: rec_get_offsets(pcur.rec, index) */ que_thr_t* thr, /*!< in: query thread */ mtr_t* mtr) /*!< in: mtr */ { @@ -473,7 +473,7 @@ row_upd_rec_sys_fields_in_recovery( /*===============================*/ rec_t* rec, /*!< in/out: record */ page_zip_des_t* page_zip,/*!< in/out: compressed page, or NULL */ - const ulint* offsets,/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets,/*!< in: array returned by rec_get_offsets() */ ulint pos, /*!< in: TRX_ID position in rec */ trx_id_t trx_id, /*!< in: transaction id */ roll_ptr_t roll_ptr)/*!< in: roll ptr of the undo log record */ @@ -537,7 +537,7 @@ ibool row_upd_changes_field_size_or_external( /*===================================*/ dict_index_t* index, /*!< in: index */ - const ulint* offsets,/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec, index) */ const upd_t* update) /*!< in: update vector */ { const upd_field_t* upd_field; @@ -662,7 +662,7 @@ row_upd_rec_in_place( /*=================*/ rec_t* rec, /*!< in/out: record where replaced */ dict_index_t* index, /*!< in: the index the record belongs to */ - const ulint* offsets,/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets,/*!< in: array returned by rec_get_offsets() */ const upd_t* update, /*!< in: update vector */ page_zip_des_t* page_zip)/*!< in: compressed page with enough space available, or NULL */ @@ -961,7 +961,7 @@ row_upd_build_sec_rec_difference_binary( /*====================================*/ const rec_t* rec, /*!< in: secondary index record */ dict_index_t* index, /*!< in: index */ - const ulint* offsets,/*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec, index) */ const dtuple_t* entry, /*!< in: entry to insert */ mem_heap_t* heap) /*!< in: memory heap from which allocated */ { @@ -1042,7 +1042,7 @@ row_upd_build_difference_binary( dict_index_t* index, const dtuple_t* entry, const rec_t* rec, - const ulint* offsets, + const offset_t* offsets, bool no_sys, trx_t* trx, mem_heap_t* heap, @@ -1053,7 +1053,7 @@ row_upd_build_difference_binary( upd_t* update; ulint n_diff; ulint trx_id_pos; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; const ulint n_v_fld = dtuple_get_n_v_fields(entry); rec_offs_init(offsets_); @@ -2072,7 +2072,7 @@ void row_upd_copy_columns( /*=================*/ rec_t* rec, /*!< in: record in a clustered index */ - const ulint* offsets,/*!< in: array returned by rec_get_offsets() */ + const offset_t* offsets,/*!< in: array returned by rec_get_offsets() */ const dict_index_t* index, /*!< in: index of rec */ sym_node_t* column) /*!< in: first column in a column list, or NULL */ @@ -2224,8 +2224,8 @@ row_upd_store_row( rec_t* rec; mem_heap_t* heap = NULL; row_ext_t** ext; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - const ulint* offsets; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + const offset_t* offsets; rec_offs_init(offsets_); ut_ad(node->pcur->latch_mode != BTR_NO_LATCHES); @@ -2464,7 +2464,7 @@ row_upd_sec_index_entry( && wsrep_must_process_fk(node, trx) && !wsrep_thd_is_BF(trx->mysql_thd, FALSE)) { - ulint* offsets = rec_get_offsets( + offset_t* offsets = rec_get_offsets( rec, index, NULL, true, ULINT_UNDEFINED, &heap); @@ -2509,7 +2509,7 @@ row_upd_sec_index_entry( if (referenced) { - ulint* offsets; + offset_t* offsets; offsets = rec_get_offsets( rec, index, NULL, true, ULINT_UNDEFINED, @@ -2591,7 +2591,7 @@ row_upd_clust_rec_by_insert_inherit_func( /*=====================================*/ const rec_t* rec, /*!< in: old record, or NULL */ #ifdef UNIV_DEBUG - const ulint* offsets,/*!< in: rec_get_offsets(rec), or NULL */ + const offset_t* offsets,/*!< in: rec_get_offsets(rec), or NULL */ #endif /* UNIV_DEBUG */ dtuple_t* entry, /*!< in/out: updated entry to be inserted into the clustered index */ @@ -2692,10 +2692,13 @@ row_upd_clust_rec_by_insert( dtuple_t* entry; dberr_t err; rec_t* rec; - ulint* offsets = NULL; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets = offsets_; ut_ad(dict_index_is_clust(index)); + rec_offs_init(offsets_); + trx = thr_get_trx(thr); table = node->table; pcur = node->pcur; @@ -2724,7 +2727,7 @@ row_upd_clust_rec_by_insert( we update the primary key. Delete-mark the old record in the clustered index and prepare to insert a new entry. */ rec = btr_cur_get_rec(btr_cur); - offsets = rec_get_offsets(rec, index, NULL, true, + offsets = rec_get_offsets(rec, index, offsets, true, ULINT_UNDEFINED, &heap); ut_ad(page_rec_is_user_rec(rec)); @@ -2831,7 +2834,7 @@ row_upd_clust_rec( ulint flags, /*!< in: undo logging and locking flags */ upd_node_t* node, /*!< in: row update node */ dict_index_t* index, /*!< in: clustered index */ - ulint* offsets,/*!< in: rec_get_offsets() on node->pcur */ + offset_t* offsets,/*!< in: rec_get_offsets() on node->pcur */ mem_heap_t** offsets_heap, /*!< in/out: memory heap, can be emptied */ que_thr_t* thr, /*!< in: query thread */ @@ -2962,7 +2965,7 @@ row_upd_del_mark_clust_rec( /*=======================*/ upd_node_t* node, /*!< in: row update node */ dict_index_t* index, /*!< in: clustered index */ - ulint* offsets,/*!< in/out: rec_get_offsets() for the + offset_t* offsets,/*!< in/out: rec_get_offsets() for the record under the cursor */ que_thr_t* thr, /*!< in: query thread */ ibool referenced, @@ -3057,8 +3060,8 @@ row_upd_clust_step( mtr_t mtr; rec_t* rec; mem_heap_t* heap = NULL; - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - ulint* offsets; + offset_t offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets; ibool referenced; ulint flags; trx_t* trx = thr_get_trx(thr); diff --git a/storage/innobase/row/row0vers.cc b/storage/innobase/row/row0vers.cc index b662ce92f28..9fe183ecb29 100644 --- a/storage/innobase/row/row0vers.cc +++ b/storage/innobase/row/row0vers.cc @@ -87,17 +87,20 @@ row_vers_impl_x_locked_low( dict_index_t* clust_index, const rec_t* rec, dict_index_t* index, - const ulint* offsets, + const offset_t* offsets, mtr_t* mtr) { trx_id_t trx_id; rec_t* prev_version = NULL; - ulint* clust_offsets; + offset_t clust_offsets_[REC_OFFS_NORMAL_SIZE]; + offset_t* clust_offsets = clust_offsets_; mem_heap_t* heap; dtuple_t* ientry = NULL; mem_heap_t* v_heap = NULL; dtuple_t* cur_vrow = NULL; + rec_offs_init(clust_offsets_); + DBUG_ENTER("row_vers_impl_x_locked_low"); ut_ad(rec_offs_validate(rec, index, offsets)); @@ -112,8 +115,8 @@ row_vers_impl_x_locked_low( heap = mem_heap_create(1024); - clust_offsets = rec_get_offsets( - clust_rec, clust_index, NULL, true, ULINT_UNDEFINED, &heap); + clust_offsets = rec_get_offsets(clust_rec, clust_index, clust_offsets, + true, ULINT_UNDEFINED, &heap); trx_id = row_get_rec_trx_id(clust_rec, clust_index, clust_offsets); if (trx_id == 0) { @@ -203,7 +206,7 @@ row_vers_impl_x_locked_low( ut_ad(committed || prev_version || !rec_get_deleted_flag(version, comp)); - /* Free version and clust_offsets. */ + /* Free version. */ mem_heap_free(old_heap); if (committed) { @@ -238,7 +241,7 @@ not_locked: } clust_offsets = rec_get_offsets( - prev_version, clust_index, NULL, true, + prev_version, clust_index, clust_offsets, true, ULINT_UNDEFINED, &heap); vers_del = rec_get_deleted_flag(prev_version, comp); @@ -387,7 +390,7 @@ row_vers_impl_x_locked( trx_t* caller_trx, const rec_t* rec, dict_index_t* index, - const ulint* offsets) + const offset_t* offsets) { mtr_t mtr; trx_t* trx; @@ -519,7 +522,7 @@ row_vers_build_cur_vrow_low( bool in_purge, const rec_t* rec, dict_index_t* clust_index, - ulint* clust_offsets, + offset_t* clust_offsets, dict_index_t* index, roll_ptr_t roll_ptr, trx_id_t trx_id, @@ -635,7 +638,7 @@ row_vers_vc_matches_cluster( const rec_t* rec, const dtuple_t* icentry, dict_index_t* clust_index, - ulint* clust_offsets, + offset_t* clust_offsets, dict_index_t* index, const dtuple_t* ientry, roll_ptr_t roll_ptr, @@ -810,7 +813,7 @@ row_vers_build_cur_vrow( bool in_purge, const rec_t* rec, dict_index_t* clust_index, - ulint** clust_offsets, + offset_t** clust_offsets, dict_index_t* index, roll_ptr_t roll_ptr, trx_id_t trx_id, @@ -894,7 +897,7 @@ row_vers_old_has_index_entry( const rec_t* version; rec_t* prev_version; dict_index_t* clust_index; - ulint* clust_offsets; + offset_t* clust_offsets; mem_heap_t* heap; mem_heap_t* heap2; dtuple_t* row; @@ -1151,7 +1154,7 @@ row_vers_build_for_consistent_read( of this records */ mtr_t* mtr, /*!< in: mtr holding the latch on rec */ dict_index_t* index, /*!< in: the clustered index */ - ulint** offsets,/*!< in/out: offsets returned by + offset_t** offsets,/*!< in/out: offsets returned by rec_get_offsets(rec, index) */ ReadView* view, /*!< in: the consistent read view */ mem_heap_t** offset_heap,/*!< in/out: memory heap from which @@ -1267,7 +1270,7 @@ row_vers_build_for_semi_consistent_read( of this records */ mtr_t* mtr, /*!< in: mtr holding the latch on rec */ dict_index_t* index, /*!< in: the clustered index */ - ulint** offsets,/*!< in/out: offsets returned by + offset_t** offsets,/*!< in/out: offsets returned by rec_get_offsets(rec, index) */ mem_heap_t** offset_heap,/*!< in/out: memory heap from which the offsets are allocated */ diff --git a/storage/innobase/trx/trx0i_s.cc b/storage/innobase/trx/trx0i_s.cc index a39fb5d2e95..c45c4f6a182 100644 --- a/storage/innobase/trx/trx0i_s.cc +++ b/storage/innobase/trx/trx0i_s.cc @@ -599,7 +599,7 @@ put_nth_field( ulint n, /*!< in: number of field */ const dict_index_t* index, /*!< in: index */ const rec_t* rec, /*!< in: record */ - const ulint* offsets)/*!< in: record offsets, returned + const offset_t* offsets)/*!< in: record offsets, returned by rec_get_offsets() */ { const byte* data; @@ -680,8 +680,8 @@ fill_lock_data( const dict_index_t* index; ulint n_fields; mem_heap_t* heap; - ulint offsets_onstack[REC_OFFS_NORMAL_SIZE]; - ulint* offsets; + offset_t offsets_onstack[REC_OFFS_NORMAL_SIZE]; + offset_t* offsets; char buf[TRX_I_S_LOCK_DATA_MAX_LEN]; ulint buf_used; ulint i; diff --git a/storage/innobase/trx/trx0rec.cc b/storage/innobase/trx/trx0rec.cc index 901dd90c005..2a5866b3f44 100644 --- a/storage/innobase/trx/trx0rec.cc +++ b/storage/innobase/trx/trx0rec.cc @@ -868,7 +868,7 @@ trx_undo_page_report_modify( delete marking is done */ const rec_t* rec, /*!< in: clustered index record which has NOT yet been modified */ - const ulint* offsets, /*!< in: rec_get_offsets(rec, index) */ + const offset_t* offsets, /*!< in: rec_get_offsets(rec, index) */ const upd_t* update, /*!< in: update vector which tells the columns to be updated; in the case of a delete, this should be set to NULL */ @@ -1967,7 +1967,7 @@ trx_undo_report_row_operation( const rec_t* rec, /*!< in: case of an update or delete marking, the record in the clustered index; NULL if insert */ - const ulint* offsets, /*!< in: rec_get_offsets(rec) */ + const offset_t* offsets, /*!< in: rec_get_offsets(rec) */ roll_ptr_t* roll_ptr) /*!< out: DB_ROLL_PTR to the undo log record */ { @@ -2225,7 +2225,7 @@ trx_undo_prev_version_build( index_rec page and purge_view */ const rec_t* rec, /*!< in: version of a clustered index record */ dict_index_t* index, /*!< in: clustered index */ - ulint* offsets,/*!< in/out: rec_get_offsets(rec, index) */ + offset_t* offsets,/*!< in/out: rec_get_offsets(rec, index) */ mem_heap_t* heap, /*!< in: memory heap from which the memory needed is allocated */ rec_t** old_vers,/*!< out, own: previous version, or NULL if @@ -2407,8 +2407,10 @@ trx_undo_prev_version_build( } #if defined UNIV_DEBUG || defined UNIV_BLOB_LIGHT_DEBUG + offset_t offsets_dbg[REC_OFFS_NORMAL_SIZE]; + rec_offs_init(offsets_dbg); ut_a(!rec_offs_any_null_extern( - *old_vers, rec_get_offsets(*old_vers, index, NULL, true, + *old_vers, rec_get_offsets(*old_vers, index, offsets_dbg, true, ULINT_UNDEFINED, &heap))); #endif // defined UNIV_DEBUG || defined UNIV_BLOB_LIGHT_DEBUG |