diff options
Diffstat (limited to 'storage/innobase/gis/gis0rtree.cc')
-rw-r--r-- | storage/innobase/gis/gis0rtree.cc | 53 |
1 files changed, 28 insertions, 25 deletions
diff --git a/storage/innobase/gis/gis0rtree.cc b/storage/innobase/gis/gis0rtree.cc index d14bafff72b..b8220d73ec0 100644 --- a/storage/innobase/gis/gis0rtree.cc +++ b/storage/innobase/gis/gis0rtree.cc @@ -85,7 +85,8 @@ rtr_page_split_initialize_nodes( stop = task + n_recs; rec = page_rec_get_next(page_get_infimum_rec(page)); - *offsets = rec_get_offsets(rec, cursor->index, *offsets, + ut_d(const bool is_leaf = page_is_leaf(page)); + *offsets = rec_get_offsets(rec, cursor->index, *offsets, is_leaf, n_uniq, &heap); source_cur = rec_get_nth_field(rec, *offsets, 0, &len); @@ -98,7 +99,7 @@ rtr_page_split_initialize_nodes( rec = page_rec_get_next(rec); *offsets = rec_get_offsets(rec, cursor->index, *offsets, - n_uniq, &heap); + is_leaf, n_uniq, &heap); source_cur = rec_get_nth_field(rec, *offsets, 0, &len); } @@ -324,7 +325,7 @@ rtr_update_mbr_field( if (cursor2) { rec_t* del_rec = btr_cur_get_rec(cursor2); offsets2 = rec_get_offsets(btr_cur_get_rec(cursor2), - index, NULL, + index, NULL, false, ULINT_UNDEFINED, &heap); del_page_no = btr_node_ptr_get_child_page_no(del_rec, offsets2); cur2_pos = page_rec_get_n_recs_before(btr_cur_get_rec(cursor2)); @@ -389,7 +390,7 @@ rtr_update_mbr_field( = page_rec_get_nth(page, cur2_pos); } offsets2 = rec_get_offsets(btr_cur_get_rec(cursor2), - index, NULL, + index, NULL, false, ULINT_UNDEFINED, &heap); ut_ad(del_page_no == btr_node_ptr_get_child_page_no( cursor2->page_cur.rec, @@ -427,8 +428,7 @@ rtr_update_mbr_field( ut_ad(old_rec != insert_rec); page_cur_position(old_rec, block, &page_cur); - offsets2 = rec_get_offsets(old_rec, - index, NULL, + offsets2 = rec_get_offsets(old_rec, index, NULL, !level, ULINT_UNDEFINED, &heap); page_cur_delete_rec(&page_cur, index, offsets2, mtr); @@ -458,6 +458,7 @@ update_mbr: cur2_rec = cursor2->page_cur.rec; offsets2 = rec_get_offsets(cur2_rec, index, NULL, + !level, ULINT_UNDEFINED, &heap); cur2_rec_info = rec_get_info_bits(cur2_rec, @@ -517,7 +518,7 @@ update_mbr: if (ins_suc) { btr_cur_position(index, insert_rec, block, cursor); offsets = rec_get_offsets(insert_rec, - index, offsets, + index, offsets, !level, ULINT_UNDEFINED, &heap); } @@ -532,6 +533,7 @@ update_mbr: cur2_rec = btr_cur_get_rec(cursor2); offsets2 = rec_get_offsets(cur2_rec, index, NULL, + !level, ULINT_UNDEFINED, &heap); /* If the cursor2 position is on a wrong rec, we @@ -545,6 +547,7 @@ update_mbr: while (!page_rec_is_supremum(cur2_rec)) { offsets2 = rec_get_offsets(cur2_rec, index, NULL, + !level, ULINT_UNDEFINED, &heap); cur2_pno = btr_node_ptr_get_child_page_no( @@ -862,6 +865,7 @@ rtr_split_page_move_rec_list( rec_move = static_cast<rtr_rec_move_t*>(mem_heap_alloc( heap, sizeof (*rec_move) * max_to_move)); + const bool is_leaf = page_is_leaf(page); /* Insert the recs in group 2 to new page. */ for (cur_split_node = node_array; @@ -871,11 +875,10 @@ rtr_split_page_move_rec_list( block, cur_split_node->key); offsets = rec_get_offsets(cur_split_node->key, - index, offsets, + index, offsets, is_leaf, ULINT_UNDEFINED, &heap); - ut_ad (cur_split_node->key != first_rec - || !page_is_leaf(page)); + ut_ad(!is_leaf || cur_split_node->key != first_rec); rec = page_cur_insert_rec_low( page_cur_get_rec(&new_page_cursor), @@ -910,8 +913,7 @@ rtr_split_page_move_rec_list( same temp-table in parallel. max_trx_id is ignored for temp tables because it not required for MVCC. */ - if (page_is_leaf(page) - && !dict_table_is_temporary(index->table)) { + if (is_leaf && !dict_table_is_temporary(index->table)) { page_update_max_trx_id(new_block, NULL, page_get_max_trx_id(page), mtr); @@ -964,7 +966,7 @@ rtr_split_page_move_rec_list( block, &page_cursor); offsets = rec_get_offsets( page_cur_get_rec(&page_cursor), index, - offsets, ULINT_UNDEFINED, + offsets, is_leaf, ULINT_UNDEFINED, &heap); page_cur_delete_rec(&page_cursor, index, offsets, mtr); @@ -1183,9 +1185,8 @@ func_start: *offsets = rec_get_offsets( page_cur_get_rec(page_cursor), - cursor->index, - *offsets, ULINT_UNDEFINED, - heap); + cursor->index, *offsets, !page_level, + ULINT_UNDEFINED, heap); page_cur_delete_rec(page_cursor, cursor->index, *offsets, mtr); @@ -1201,9 +1202,8 @@ func_start: block, page_cursor); *offsets = rec_get_offsets( page_cur_get_rec(page_cursor), - cursor->index, - *offsets, ULINT_UNDEFINED, - heap); + cursor->index, *offsets, !page_level, + ULINT_UNDEFINED, heap); page_cur_delete_rec(page_cursor, cursor->index, *offsets, mtr); } @@ -1461,13 +1461,14 @@ rtr_page_copy_rec_list_end_no_locks( cur_rec = page_rec_get_next(cur_rec); } - offsets1 = rec_get_offsets(cur1_rec, index, offsets1, + offsets1 = rec_get_offsets(cur1_rec, index, offsets1, is_leaf, ULINT_UNDEFINED, &heap); while (!page_rec_is_supremum(cur_rec)) { ulint cur_matched_fields = 0; int cmp; offsets2 = rec_get_offsets(cur_rec, index, offsets2, + is_leaf, ULINT_UNDEFINED, &heap); cmp = cmp_rec_rec_with_match(cur1_rec, cur_rec, offsets1, offsets2, @@ -1503,7 +1504,7 @@ rtr_page_copy_rec_list_end_no_locks( cur_rec = page_cur_get_rec(&page_cur); - offsets1 = rec_get_offsets(cur1_rec, index, offsets1, + offsets1 = rec_get_offsets(cur1_rec, index, offsets1, is_leaf, ULINT_UNDEFINED, &heap); ins_rec = page_cur_insert_rec_low(cur_rec, index, @@ -1579,7 +1580,7 @@ rtr_page_copy_rec_list_start_no_locks( cur_rec = page_rec_get_next(cur_rec); } - offsets1 = rec_get_offsets(cur1_rec, index, offsets1, + offsets1 = rec_get_offsets(cur1_rec, index, offsets1, is_leaf, ULINT_UNDEFINED, &heap); while (!page_rec_is_supremum(cur_rec)) { @@ -1587,6 +1588,7 @@ rtr_page_copy_rec_list_start_no_locks( int cmp; offsets2 = rec_get_offsets(cur_rec, index, offsets2, + is_leaf, ULINT_UNDEFINED, &heap); cmp = cmp_rec_rec_with_match(cur1_rec, cur_rec, offsets1, offsets2, @@ -1624,7 +1626,7 @@ rtr_page_copy_rec_list_start_no_locks( cur_rec = page_cur_get_rec(&page_cur); - offsets1 = rec_get_offsets(cur1_rec, index, offsets1, + offsets1 = rec_get_offsets(cur1_rec, index, offsets1, is_leaf, ULINT_UNDEFINED, &heap); ins_rec = page_cur_insert_rec_low(cur_rec, index, @@ -1787,7 +1789,7 @@ rtr_check_same_block( while (!page_rec_is_supremum(rec)) { offsets = rec_get_offsets( - rec, index, NULL, ULINT_UNDEFINED, &heap); + rec, index, NULL, false, ULINT_UNDEFINED, &heap); if (btr_node_ptr_get_child_page_no(rec, offsets) == page_no) { btr_cur_position(index, rec, parentb, cursor); @@ -1913,7 +1915,8 @@ rtr_estimate_n_rows_in_range( heap = mem_heap_create(512); rec = page_rec_get_next(page_get_infimum_rec(page)); - offsets = rec_get_offsets(rec, index, offsets, ULINT_UNDEFINED, &heap); + offsets = rec_get_offsets(rec, index, offsets, page_rec_is_leaf(rec), + ULINT_UNDEFINED, &heap); /* Scan records in root page and calculate area. */ double area = 0; |