~ubuntu-branches/ubuntu/precise/mysql-5.1/precise

« back to all changes in this revision

Viewing changes to storage/innobase/include/btr0pcur.h

  • Committer: Bazaar Package Importer
  • Author(s): Norbert Tretkowski
  • Date: 2010-03-17 14:56:02 UTC
  • Revision ID: james.westby@ubuntu.com-20100317145602-x7e30l1b2sb5s6w6
Tags: upstream-5.1.45
ImportĀ upstreamĀ versionĀ 5.1.45

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/******************************************************
 
2
The index tree persistent cursor
 
3
 
 
4
(c) 1996 Innobase Oy
 
5
 
 
6
Created 2/23/1996 Heikki Tuuri
 
7
*******************************************************/
 
8
 
 
9
#ifndef btr0pcur_h
 
10
#define btr0pcur_h
 
11
 
 
12
#include "univ.i"
 
13
#include "dict0dict.h"
 
14
#include "data0data.h"
 
15
#include "mtr0mtr.h"
 
16
#include "page0cur.h"
 
17
#include "btr0cur.h"
 
18
#include "btr0btr.h"
 
19
#include "btr0types.h"
 
20
 
 
21
/* Relative positions for a stored cursor position */
 
22
#define BTR_PCUR_ON                     1
 
23
#define BTR_PCUR_BEFORE                 2
 
24
#define BTR_PCUR_AFTER                  3
 
25
/* Note that if the tree is not empty, btr_pcur_store_position does not
 
26
use the following, but only uses the above three alternatives, where the
 
27
position is stored relative to a specific record: this makes implementation
 
28
of a scroll cursor easier */
 
29
#define BTR_PCUR_BEFORE_FIRST_IN_TREE   4       /* in an empty tree */
 
30
#define BTR_PCUR_AFTER_LAST_IN_TREE     5       /* in an empty tree */
 
31
 
 
32
/******************************************************************
 
33
Allocates memory for a persistent cursor object and initializes the cursor. */
 
34
 
 
35
btr_pcur_t*
 
36
btr_pcur_create_for_mysql(void);
 
37
/*============================*/
 
38
                                /* out, own: persistent cursor */
 
39
/******************************************************************
 
40
Frees the memory for a persistent cursor object. */
 
41
 
 
42
void
 
43
btr_pcur_free_for_mysql(
 
44
/*====================*/
 
45
        btr_pcur_t*     cursor);        /* in, own: persistent cursor */
 
46
/******************************************************************
 
47
Copies the stored position of a pcur to another pcur. */
 
48
 
 
49
void
 
50
btr_pcur_copy_stored_position(
 
51
/*==========================*/
 
52
        btr_pcur_t*     pcur_receive,   /* in: pcur which will receive the
 
53
                                        position info */
 
54
        btr_pcur_t*     pcur_donate);   /* in: pcur from which the info is
 
55
                                        copied */
 
56
/******************************************************************
 
57
Sets the old_rec_buf field to NULL. */
 
58
UNIV_INLINE
 
59
void
 
60
btr_pcur_init(
 
61
/*==========*/
 
62
        btr_pcur_t*     pcur);  /* in: persistent cursor */
 
63
/******************************************************************
 
64
Initializes and opens a persistent cursor to an index tree. It should be
 
65
closed with btr_pcur_close. */
 
66
UNIV_INLINE
 
67
void
 
68
btr_pcur_open(
 
69
/*==========*/
 
70
        dict_index_t*   index,  /* in: index */
 
71
        dtuple_t*       tuple,  /* in: tuple on which search done */
 
72
        ulint           mode,   /* in: PAGE_CUR_L, ...;
 
73
                                NOTE that if the search is made using a unique
 
74
                                prefix of a record, mode should be
 
75
                                PAGE_CUR_LE, not PAGE_CUR_GE, as the latter
 
76
                                may end up on the previous page from the
 
77
                                record! */
 
78
        ulint           latch_mode,/* in: BTR_SEARCH_LEAF, ... */
 
79
        btr_pcur_t*     cursor, /* in: memory buffer for persistent cursor */
 
80
        mtr_t*          mtr);   /* in: mtr */
 
81
/******************************************************************
 
82
Opens an persistent cursor to an index tree without initializing the
 
83
cursor. */
 
84
UNIV_INLINE
 
85
void
 
86
btr_pcur_open_with_no_init(
 
87
/*=======================*/
 
88
        dict_index_t*   index,  /* in: index */
 
89
        dtuple_t*       tuple,  /* in: tuple on which search done */
 
90
        ulint           mode,   /* in: PAGE_CUR_L, ...;
 
91
                                NOTE that if the search is made using a unique
 
92
                                prefix of a record, mode should be
 
93
                                PAGE_CUR_LE, not PAGE_CUR_GE, as the latter
 
94
                                may end up on the previous page of the
 
95
                                record! */
 
96
        ulint           latch_mode,/* in: BTR_SEARCH_LEAF, ...;
 
97
                                NOTE that if has_search_latch != 0 then
 
98
                                we maybe do not acquire a latch on the cursor
 
99
                                page, but assume that the caller uses his
 
100
                                btr search latch to protect the record! */
 
101
        btr_pcur_t*     cursor, /* in: memory buffer for persistent cursor */
 
102
        ulint           has_search_latch,/* in: latch mode the caller
 
103
                                currently has on btr_search_latch:
 
104
                                RW_S_LATCH, or 0 */
 
105
        mtr_t*          mtr);   /* in: mtr */
 
106
/*********************************************************************
 
107
Opens a persistent cursor at either end of an index. */
 
108
UNIV_INLINE
 
109
void
 
110
btr_pcur_open_at_index_side(
 
111
/*========================*/
 
112
        ibool           from_left,      /* in: TRUE if open to the low end,
 
113
                                        FALSE if to the high end */
 
114
        dict_index_t*   index,          /* in: index */
 
115
        ulint           latch_mode,     /* in: latch mode */
 
116
        btr_pcur_t*     pcur,           /* in: cursor */
 
117
        ibool           do_init,        /* in: TRUE if should be initialized */
 
118
        mtr_t*          mtr);           /* in: mtr */
 
119
/******************************************************************
 
120
Gets the up_match value for a pcur after a search. */
 
121
UNIV_INLINE
 
122
ulint
 
123
btr_pcur_get_up_match(
 
124
/*==================*/
 
125
                                /* out: number of matched fields at the cursor
 
126
                                or to the right if search mode was PAGE_CUR_GE,
 
127
                                otherwise undefined */
 
128
        btr_pcur_t*     cursor); /* in: memory buffer for persistent cursor */
 
129
/******************************************************************
 
130
Gets the low_match value for a pcur after a search. */
 
131
UNIV_INLINE
 
132
ulint
 
133
btr_pcur_get_low_match(
 
134
/*===================*/
 
135
                                /* out: number of matched fields at the cursor
 
136
                                or to the right if search mode was PAGE_CUR_LE,
 
137
                                otherwise undefined */
 
138
        btr_pcur_t*     cursor); /* in: memory buffer for persistent cursor */
 
139
/******************************************************************
 
140
If mode is PAGE_CUR_G or PAGE_CUR_GE, opens a persistent cursor on the first
 
141
user record satisfying the search condition, in the case PAGE_CUR_L or
 
142
PAGE_CUR_LE, on the last user record. If no such user record exists, then
 
143
in the first case sets the cursor after last in tree, and in the latter case
 
144
before first in tree. The latching mode must be BTR_SEARCH_LEAF or
 
145
BTR_MODIFY_LEAF. */
 
146
 
 
147
void
 
148
btr_pcur_open_on_user_rec(
 
149
/*======================*/
 
150
        dict_index_t*   index,          /* in: index */
 
151
        dtuple_t*       tuple,          /* in: tuple on which search done */
 
152
        ulint           mode,           /* in: PAGE_CUR_L, ... */
 
153
        ulint           latch_mode,     /* in: BTR_SEARCH_LEAF or
 
154
                                        BTR_MODIFY_LEAF */
 
155
        btr_pcur_t*     cursor,         /* in: memory buffer for persistent
 
156
                                        cursor */
 
157
        mtr_t*          mtr);           /* in: mtr */
 
158
/**************************************************************************
 
159
Positions a cursor at a randomly chosen position within a B-tree. */
 
160
UNIV_INLINE
 
161
void
 
162
btr_pcur_open_at_rnd_pos(
 
163
/*=====================*/
 
164
        dict_index_t*   index,          /* in: index */
 
165
        ulint           latch_mode,     /* in: BTR_SEARCH_LEAF, ... */
 
166
        btr_pcur_t*     cursor,         /* in/out: B-tree pcur */
 
167
        mtr_t*          mtr);           /* in: mtr */
 
168
/******************************************************************
 
169
Frees the possible old_rec_buf buffer of a persistent cursor and sets the
 
170
latch mode of the persistent cursor to BTR_NO_LATCHES. */
 
171
UNIV_INLINE
 
172
void
 
173
btr_pcur_close(
 
174
/*===========*/
 
175
        btr_pcur_t*     cursor);        /* in: persistent cursor */
 
176
/******************************************************************
 
177
The position of the cursor is stored by taking an initial segment of the
 
178
record the cursor is positioned on, before, or after, and copying it to the
 
179
cursor data structure, or just setting a flag if the cursor id before the
 
180
first in an EMPTY tree, or after the last in an EMPTY tree. NOTE that the
 
181
page where the cursor is positioned must not be empty if the index tree is
 
182
not totally empty! */
 
183
 
 
184
void
 
185
btr_pcur_store_position(
 
186
/*====================*/
 
187
        btr_pcur_t*     cursor, /* in: persistent cursor */
 
188
        mtr_t*          mtr);   /* in: mtr */
 
189
/******************************************************************
 
190
Restores the stored position of a persistent cursor bufferfixing the page and
 
191
obtaining the specified latches. If the cursor position was saved when the
 
192
(1) cursor was positioned on a user record: this function restores the position
 
193
to the last record LESS OR EQUAL to the stored record;
 
194
(2) cursor was positioned on a page infimum record: restores the position to
 
195
the last record LESS than the user record which was the successor of the page
 
196
infimum;
 
197
(3) cursor was positioned on the page supremum: restores to the first record
 
198
GREATER than the user record which was the predecessor of the supremum.
 
199
(4) cursor was positioned before the first or after the last in an empty tree:
 
200
restores to before first or after the last in the tree. */
 
201
 
 
202
ibool
 
203
btr_pcur_restore_position(
 
204
/*======================*/
 
205
                                        /* out: TRUE if the cursor position
 
206
                                        was stored when it was on a user record
 
207
                                        and it can be restored on a user record
 
208
                                        whose ordering fields are identical to
 
209
                                        the ones of the original user record */
 
210
        ulint           latch_mode,     /* in: BTR_SEARCH_LEAF, ... */
 
211
        btr_pcur_t*     cursor,         /* in: detached persistent cursor */
 
212
        mtr_t*          mtr);           /* in: mtr */
 
213
/******************************************************************
 
214
If the latch mode of the cursor is BTR_LEAF_SEARCH or BTR_LEAF_MODIFY,
 
215
releases the page latch and bufferfix reserved by the cursor.
 
216
NOTE! In the case of BTR_LEAF_MODIFY, there should not exist changes
 
217
made by the current mini-transaction to the data protected by the
 
218
cursor latch, as then the latch must not be released until mtr_commit. */
 
219
 
 
220
void
 
221
btr_pcur_release_leaf(
 
222
/*==================*/
 
223
        btr_pcur_t*     cursor, /* in: persistent cursor */
 
224
        mtr_t*          mtr);   /* in: mtr */
 
225
/*************************************************************
 
226
Gets the rel_pos field for a cursor whose position has been stored. */
 
227
UNIV_INLINE
 
228
ulint
 
229
btr_pcur_get_rel_pos(
 
230
/*=================*/
 
231
                                /* out: BTR_PCUR_ON, ... */
 
232
        btr_pcur_t*     cursor);/* in: persistent cursor */
 
233
/*************************************************************
 
234
Sets the mtr field for a pcur. */
 
235
UNIV_INLINE
 
236
void
 
237
btr_pcur_set_mtr(
 
238
/*=============*/
 
239
        btr_pcur_t*     cursor, /* in: persistent cursor */
 
240
        mtr_t*          mtr);   /* in, own: mtr */
 
241
/*************************************************************
 
242
Gets the mtr field for a pcur. */
 
243
UNIV_INLINE
 
244
mtr_t*
 
245
btr_pcur_get_mtr(
 
246
/*=============*/
 
247
                                /* out: mtr */
 
248
        btr_pcur_t*     cursor);        /* in: persistent cursor */
 
249
/******************************************************************
 
250
Commits the pcur mtr and sets the pcur latch mode to BTR_NO_LATCHES,
 
251
that is, the cursor becomes detached. If there have been modifications
 
252
to the page where pcur is positioned, this can be used instead of
 
253
btr_pcur_release_leaf. Function btr_pcur_store_position should be used
 
254
before calling this, if restoration of cursor is wanted later. */
 
255
UNIV_INLINE
 
256
void
 
257
btr_pcur_commit(
 
258
/*============*/
 
259
        btr_pcur_t*     pcur);  /* in: persistent cursor */
 
260
/******************************************************************
 
261
Differs from btr_pcur_commit in that we can specify the mtr to commit. */
 
262
UNIV_INLINE
 
263
void
 
264
btr_pcur_commit_specify_mtr(
 
265
/*========================*/
 
266
        btr_pcur_t*     pcur,   /* in: persistent cursor */
 
267
        mtr_t*          mtr);   /* in: mtr to commit */
 
268
/******************************************************************
 
269
Tests if a cursor is detached: that is the latch mode is BTR_NO_LATCHES. */
 
270
UNIV_INLINE
 
271
ibool
 
272
btr_pcur_is_detached(
 
273
/*=================*/
 
274
                                /* out: TRUE if detached */
 
275
        btr_pcur_t*     pcur);  /* in: persistent cursor */
 
276
/*************************************************************
 
277
Moves the persistent cursor to the next record in the tree. If no records are
 
278
left, the cursor stays 'after last in tree'. */
 
279
UNIV_INLINE
 
280
ibool
 
281
btr_pcur_move_to_next(
 
282
/*==================*/
 
283
                                /* out: TRUE if the cursor was not after last
 
284
                                in tree */
 
285
        btr_pcur_t*     cursor, /* in: persistent cursor; NOTE that the
 
286
                                function may release the page latch */
 
287
        mtr_t*          mtr);   /* in: mtr */
 
288
/*************************************************************
 
289
Moves the persistent cursor to the previous record in the tree. If no records
 
290
are left, the cursor stays 'before first in tree'. */
 
291
 
 
292
ibool
 
293
btr_pcur_move_to_prev(
 
294
/*==================*/
 
295
                                /* out: TRUE if the cursor was not before first
 
296
                                in tree */
 
297
        btr_pcur_t*     cursor, /* in: persistent cursor; NOTE that the
 
298
                                function may release the page latch */
 
299
        mtr_t*          mtr);   /* in: mtr */
 
300
/*************************************************************
 
301
Moves the persistent cursor to the last record on the same page. */
 
302
UNIV_INLINE
 
303
void
 
304
btr_pcur_move_to_last_on_page(
 
305
/*==========================*/
 
306
        btr_pcur_t*     cursor, /* in: persistent cursor */
 
307
        mtr_t*          mtr);   /* in: mtr */
 
308
/*************************************************************
 
309
Moves the persistent cursor to the next user record in the tree. If no user
 
310
records are left, the cursor ends up 'after last in tree'. */
 
311
UNIV_INLINE
 
312
ibool
 
313
btr_pcur_move_to_next_user_rec(
 
314
/*===========================*/
 
315
                                /* out: TRUE if the cursor moved forward,
 
316
                                ending on a user record */
 
317
        btr_pcur_t*     cursor, /* in: persistent cursor; NOTE that the
 
318
                                function may release the page latch */
 
319
        mtr_t*          mtr);   /* in: mtr */
 
320
/*************************************************************
 
321
Moves the persistent cursor to the first record on the next page.
 
322
Releases the latch on the current page, and bufferunfixes it.
 
323
Note that there must not be modifications on the current page,
 
324
as then the x-latch can be released only in mtr_commit. */
 
325
 
 
326
void
 
327
btr_pcur_move_to_next_page(
 
328
/*=======================*/
 
329
        btr_pcur_t*     cursor, /* in: persistent cursor; must be on the
 
330
                                last record of the current page */
 
331
        mtr_t*          mtr);   /* in: mtr */
 
332
/*************************************************************
 
333
Moves the persistent cursor backward if it is on the first record
 
334
of the page. Releases the latch on the current page, and bufferunfixes
 
335
it. Note that to prevent a possible deadlock, the operation first
 
336
stores the position of the cursor, releases the leaf latch, acquires
 
337
necessary latches and restores the cursor position again before returning.
 
338
The alphabetical position of the cursor is guaranteed to be sensible
 
339
on return, but it may happen that the cursor is not positioned on the
 
340
last record of any page, because the structure of the tree may have
 
341
changed while the cursor had no latches. */
 
342
 
 
343
void
 
344
btr_pcur_move_backward_from_page(
 
345
/*=============================*/
 
346
        btr_pcur_t*     cursor, /* in: persistent cursor, must be on the
 
347
                                first record of the current page */
 
348
        mtr_t*          mtr);   /* in: mtr */
 
349
/*************************************************************
 
350
Returns the btr cursor component of a persistent cursor. */
 
351
UNIV_INLINE
 
352
btr_cur_t*
 
353
btr_pcur_get_btr_cur(
 
354
/*=================*/
 
355
                                /* out: pointer to btr cursor component */
 
356
        btr_pcur_t*     cursor);        /* in: persistent cursor */
 
357
/*************************************************************
 
358
Returns the page cursor component of a persistent cursor. */
 
359
UNIV_INLINE
 
360
page_cur_t*
 
361
btr_pcur_get_page_cur(
 
362
/*==================*/
 
363
                                /* out: pointer to page cursor component */
 
364
        btr_pcur_t*     cursor);        /* in: persistent cursor */
 
365
/*************************************************************
 
366
Returns the page of a persistent cursor. */
 
367
UNIV_INLINE
 
368
page_t*
 
369
btr_pcur_get_page(
 
370
/*==============*/
 
371
                                /* out: pointer to the page */
 
372
        btr_pcur_t*     cursor);/* in: persistent cursor */
 
373
/*************************************************************
 
374
Returns the record of a persistent cursor. */
 
375
UNIV_INLINE
 
376
rec_t*
 
377
btr_pcur_get_rec(
 
378
/*=============*/
 
379
                                /* out: pointer to the record */
 
380
        btr_pcur_t*     cursor);/* in: persistent cursor */
 
381
/*************************************************************
 
382
Checks if the persistent cursor is on a user record. */
 
383
UNIV_INLINE
 
384
ibool
 
385
btr_pcur_is_on_user_rec(
 
386
/*====================*/
 
387
        btr_pcur_t*     cursor, /* in: persistent cursor */
 
388
        mtr_t*          mtr);   /* in: mtr */
 
389
/*************************************************************
 
390
Checks if the persistent cursor is after the last user record on
 
391
a page. */
 
392
UNIV_INLINE
 
393
ibool
 
394
btr_pcur_is_after_last_on_page(
 
395
/*===========================*/
 
396
        btr_pcur_t*     cursor, /* in: persistent cursor */
 
397
        mtr_t*          mtr);   /* in: mtr */
 
398
/*************************************************************
 
399
Checks if the persistent cursor is before the first user record on
 
400
a page. */
 
401
UNIV_INLINE
 
402
ibool
 
403
btr_pcur_is_before_first_on_page(
 
404
/*=============================*/
 
405
        btr_pcur_t*     cursor, /* in: persistent cursor */
 
406
        mtr_t*          mtr);   /* in: mtr */
 
407
/*************************************************************
 
408
Checks if the persistent cursor is before the first user record in
 
409
the index tree. */
 
410
UNIV_INLINE
 
411
ibool
 
412
btr_pcur_is_before_first_in_tree(
 
413
/*=============================*/
 
414
        btr_pcur_t*     cursor, /* in: persistent cursor */
 
415
        mtr_t*          mtr);   /* in: mtr */
 
416
/*************************************************************
 
417
Checks if the persistent cursor is after the last user record in
 
418
the index tree. */
 
419
UNIV_INLINE
 
420
ibool
 
421
btr_pcur_is_after_last_in_tree(
 
422
/*===========================*/
 
423
        btr_pcur_t*     cursor, /* in: persistent cursor */
 
424
        mtr_t*          mtr);   /* in: mtr */
 
425
/*************************************************************
 
426
Moves the persistent cursor to the next record on the same page. */
 
427
UNIV_INLINE
 
428
void
 
429
btr_pcur_move_to_next_on_page(
 
430
/*==========================*/
 
431
        btr_pcur_t*     cursor, /* in: persistent cursor */
 
432
        mtr_t*          mtr);   /* in: mtr */
 
433
/*************************************************************
 
434
Moves the persistent cursor to the previous record on the same page. */
 
435
UNIV_INLINE
 
436
void
 
437
btr_pcur_move_to_prev_on_page(
 
438
/*==========================*/
 
439
        btr_pcur_t*     cursor, /* in: persistent cursor */
 
440
        mtr_t*          mtr);   /* in: mtr */
 
441
 
 
442
 
 
443
/* The persistent B-tree cursor structure. This is used mainly for SQL
 
444
selects, updates, and deletes. */
 
445
 
 
446
struct btr_pcur_struct{
 
447
        btr_cur_t       btr_cur;        /* a B-tree cursor */
 
448
        ulint           latch_mode;     /* see TODO note below!
 
449
                                        BTR_SEARCH_LEAF, BTR_MODIFY_LEAF,
 
450
                                        BTR_MODIFY_TREE, or BTR_NO_LATCHES,
 
451
                                        depending on the latching state of
 
452
                                        the page and tree where the cursor is
 
453
                                        positioned; the last value means that
 
454
                                        the cursor is not currently positioned:
 
455
                                        we say then that the cursor is
 
456
                                        detached; it can be restored to
 
457
                                        attached if the old position was
 
458
                                        stored in old_rec */
 
459
        ulint           old_stored;     /* BTR_PCUR_OLD_STORED
 
460
                                        or BTR_PCUR_OLD_NOT_STORED */
 
461
        rec_t*          old_rec;        /* if cursor position is stored,
 
462
                                        contains an initial segment of the
 
463
                                        latest record cursor was positioned
 
464
                                        either on, before, or after */
 
465
        ulint           old_n_fields;   /* number of fields in old_rec */
 
466
        ulint           rel_pos;        /* BTR_PCUR_ON, BTR_PCUR_BEFORE, or
 
467
                                        BTR_PCUR_AFTER, depending on whether
 
468
                                        cursor was on, before, or after the
 
469
                                        old_rec record */
 
470
        buf_block_t*    block_when_stored;/* buffer block when the position was
 
471
                                        stored; note that if AWE is on, frames
 
472
                                        may move */
 
473
        dulint          modify_clock;   /* the modify clock value of the
 
474
                                        buffer block when the cursor position
 
475
                                        was stored */
 
476
        ulint           pos_state;      /* see TODO note below!
 
477
                                        BTR_PCUR_IS_POSITIONED,
 
478
                                        BTR_PCUR_WAS_POSITIONED,
 
479
                                        BTR_PCUR_NOT_POSITIONED */
 
480
        ulint           search_mode;    /* PAGE_CUR_G, ... */
 
481
        trx_t*          trx_if_known;   /* the transaction, if we know it;
 
482
                                        otherwise this field is not defined;
 
483
                                        can ONLY BE USED in error prints in
 
484
                                        fatal assertion failures! */
 
485
        /*-----------------------------*/
 
486
        /* NOTE that the following fields may possess dynamically allocated
 
487
        memory which should be freed if not needed anymore! */
 
488
 
 
489
        mtr_t*          mtr;            /* NULL, or this field may contain
 
490
                                        a mini-transaction which holds the
 
491
                                        latch on the cursor page */
 
492
        byte*           old_rec_buf;    /* NULL, or a dynamically allocated
 
493
                                        buffer for old_rec */
 
494
        ulint           buf_size;       /* old_rec_buf size if old_rec_buf
 
495
                                        is not NULL */
 
496
};
 
497
 
 
498
#define BTR_PCUR_IS_POSITIONED  1997660512      /* TODO: currently, the state
 
499
                                                can be BTR_PCUR_IS_POSITIONED,
 
500
                                                though it really should be
 
501
                                                BTR_PCUR_WAS_POSITIONED,
 
502
                                                because we have no obligation
 
503
                                                to commit the cursor with
 
504
                                                mtr; similarly latch_mode may
 
505
                                                be out of date. This can
 
506
                                                lead to problems if btr_pcur
 
507
                                                is not used the right way;
 
508
                                                all current code should be
 
509
                                                ok. */
 
510
#define BTR_PCUR_WAS_POSITIONED 1187549791
 
511
#define BTR_PCUR_NOT_POSITIONED 1328997689
 
512
 
 
513
#define BTR_PCUR_OLD_STORED     908467085
 
514
#define BTR_PCUR_OLD_NOT_STORED 122766467
 
515
 
 
516
#ifndef UNIV_NONINL
 
517
#include "btr0pcur.ic"
 
518
#endif
 
519
 
 
520
#endif