~percona-core/percona-server/5.5

« back to all changes in this revision

Viewing changes to Percona-Server/storage/innobase/include/read0read.ic

  • Committer: jenkins at percona
  • Date: 2013-03-26 01:40:02 UTC
  • mfrom: (450.9.2 bug1131189)
  • Revision ID: jenkins@jenkins.percona.com-20130326014002-1m2hg8pt1b27chq2
MergeĀ lp:~akopytov/percona-server/bug1131189

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
 
26
26
/*********************************************************************//**
27
27
Gets the nth trx id in a read view.
 
28
 
 
29
Upstream code stores array of trx_ids in the descending order. Percona Server
 
30
keeps it in the ascending order for performance reasons. Let us keep the
 
31
semantics.
 
32
 
28
33
@return trx id */
29
34
UNIV_INLINE
30
35
trx_id_t
33
38
        const read_view_t*      view,   /*!< in: read view */
34
39
        ulint                   n)      /*!< in: position */
35
40
{
36
 
        ut_ad(n < view->n_trx_ids);
 
41
        ut_ad(n < view->n_descr);
37
42
 
38
 
        return(*(view->trx_ids + n));
 
43
        return(view->descriptors[view->n_descr - 1 - n]);
39
44
}
40
45
 
41
46
/*********************************************************************//**
42
 
Sets the nth trx id in a read view. */
 
47
Sets the nth trx id in a read view.
 
48
 
 
49
Upstream code stores array of trx_ids in the descending order. Percona Server
 
50
keeps it in the ascending order for performance reasons. Let us keep the
 
51
semantics. */
43
52
UNIV_INLINE
44
53
void
45
54
read_view_set_nth_trx_id(
48
57
        ulint           n,      /*!< in: position */
49
58
        trx_id_t        trx_id) /*!< in: trx id to set */
50
59
{
51
 
        ut_ad(n < view->n_trx_ids);
 
60
        ut_ad(n < view->n_descr);
52
61
 
53
 
        *(view->trx_ids + n) = trx_id;
 
62
        view->descriptors[view->n_descr - 1 - n] = trx_id;
54
63
}
55
64
 
56
65
/*********************************************************************//**
63
72
        const read_view_t*      view,   /*!< in: read view */
64
73
        trx_id_t                trx_id) /*!< in: trx id */
65
74
{
66
 
        ulint   n_ids;
67
 
        ulint   i;
68
 
 
69
75
        if (trx_id < view->up_limit_id) {
70
76
 
71
77
                return(TRUE);
76
82
                return(FALSE);
77
83
        }
78
84
 
79
 
        /* We go through the trx ids in the array smallest first: this order
80
 
        may save CPU time, because if there was a very long running
81
 
        transaction in the trx id array, its trx id is looked at first, and
82
 
        the first two comparisons may well decide the visibility of trx_id. */
83
 
 
84
 
        n_ids = view->n_trx_ids;
85
 
 
86
 
        for (i = 0; i < n_ids; i++) {
87
 
                trx_id_t        view_trx_id
88
 
                        = read_view_get_nth_trx_id(view, n_ids - i - 1);
89
 
 
90
 
                if (trx_id <= view_trx_id) {
91
 
                        return(trx_id != view_trx_id);
92
 
                }
93
 
        }
94
 
 
95
 
        return(TRUE);
 
85
        /* Do a binary search over this view's descriptors array */
 
86
 
 
87
        return(trx_find_descriptor(view->descriptors, view->n_descr,
 
88
                                   trx_id) == NULL);
96
89
}