~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to plugin/innobase/btr/btr0btr.c

  • Committer: Monty Taylor
  • Date: 2010-11-26 22:50:54 UTC
  • mfrom: (1953.1.6 build)
  • Revision ID: mordred@inaugust.com-20101126225054-sg90svw8579t5p3i
Stewart - InnoDB 1.1.1
Monty - Fixed some autoconf tests which were returning false positives.

Show diffs side-by-side

added added

removed removed

Lines of Context:
603
603
        ulint           line,   /*!< in: line where called */
604
604
        mtr_t*          mtr)    /*!< in: mtr */
605
605
{
 
606
        page_t*         page;
606
607
        dtuple_t*       tuple;
607
608
        rec_t*          user_rec;
608
609
        rec_t*          node_ptr;
619
620
        ut_ad(dict_index_get_page(index) != page_no);
620
621
 
621
622
        level = btr_page_get_level(btr_cur_get_page(cursor), mtr);
 
623
 
 
624
        page = btr_cur_get_page(cursor);
622
625
        user_rec = btr_cur_get_rec(cursor);
623
626
        ut_a(page_rec_is_user_rec(user_rec));
624
627
        tuple = dict_index_build_node_ptr(index, user_rec, 0, heap, level);
949
952
        dict_index_t*   index,  /*!< in: record descriptor */
950
953
        mtr_t*          mtr)    /*!< in: mtr */
951
954
{
 
955
        buf_pool_t*     buf_pool        = buf_pool_from_bpage(&block->page);
952
956
        page_t*         page            = buf_block_get_frame(block);
953
957
        page_zip_des_t* page_zip        = buf_block_get_page_zip(block);
954
958
        buf_block_t*    temp_block;
979
983
        log_mode = mtr_set_log_mode(mtr, MTR_LOG_NONE);
980
984
 
981
985
#ifndef UNIV_HOTBACKUP
982
 
        temp_block = buf_block_alloc(0);
 
986
        temp_block = buf_block_alloc(buf_pool, 0);
983
987
#else /* !UNIV_HOTBACKUP */
984
988
        ut_ad(block == back_block1);
985
989
        temp_block = back_block2;
1937
1941
        if (n_iterations > 0) {
1938
1942
                direction = FSP_UP;
1939
1943
                hint_page_no = page_no + 1;
1940
 
                split_rec = btr_page_get_split_rec(cursor, tuple, n_ext);
 
1944
                split_rec = btr_page_get_split_rec(cursor, tuple, n_ext);
1941
1945
 
1942
1946
                if (UNIV_UNLIKELY(split_rec == NULL)) {
1943
1947
                        insert_left = btr_page_tuple_smaller(
1946
1950
        } else if (btr_page_get_split_rec_to_right(cursor, &split_rec)) {
1947
1951
                direction = FSP_UP;
1948
1952
                hint_page_no = page_no + 1;
1949
 
 
1950
1953
        } else if (btr_page_get_split_rec_to_left(cursor, &split_rec)) {
1951
1954
                direction = FSP_DOWN;
1952
1955
                hint_page_no = page_no - 1;
1953
 
                ut_ad(split_rec);
 
1956
                ut_ad(split_rec);
1954
1957
        } else {
1955
1958
                direction = FSP_UP;
1956
1959
                hint_page_no = page_no + 1;
1957
 
 
1958
1960
                /* If there is only one record in the index page, we
1959
1961
                can't split the node in the middle by default. We need
1960
1962
                to determine whether the new record will be inserted
1961
1963
                to the left or right. */
1962
1964
 
1963
1965
                if (page_get_n_recs(page) > 1) {
1964
 
                        split_rec = page_get_middle_rec(page);
 
1966
                  split_rec = page_get_middle_rec(page);
1965
1967
                } else if (btr_page_tuple_smaller(cursor, tuple,
1966
1968
                                                  offsets, n_uniq, &heap)) {
1967
1969
                        split_rec = page_rec_get_next(
2047
2049
        }
2048
2050
 
2049
2051
        /* 5. Move then the records to the new page */
2050
 
        if (direction == FSP_DOWN
2051
 
#ifdef UNIV_BTR_AVOID_COPY
2052
 
            && page_rec_is_supremum(move_limit)) {
2053
 
                /* Instead of moving all records, make the new page
2054
 
                the empty page. */
2055
 
 
2056
 
                left_block = block;
2057
 
                right_block = new_block;
2058
 
        } else if (direction == FSP_DOWN
2059
 
#endif /* UNIV_BTR_AVOID_COPY */
2060
 
                   ) {
 
2052
        if (direction == FSP_DOWN) {
2061
2053
                /*              fputs("Split left\n", stderr); */
2062
2054
 
2063
2055
                if (0
2100
2092
                right_block = block;
2101
2093
 
2102
2094
                lock_update_split_left(right_block, left_block);
2103
 
#ifdef UNIV_BTR_AVOID_COPY
2104
 
        } else if (!split_rec) {
2105
 
                /* Instead of moving all records, make the new page
2106
 
                the empty page. */
2107
 
 
2108
 
                left_block = new_block;
2109
 
                right_block = block;
2110
 
#endif /* UNIV_BTR_AVOID_COPY */
2111
2095
        } else {
2112
2096
                /*              fputs("Split right\n", stderr); */
2113
2097