~drizzle-trunk/drizzle/development

« back to all changes in this revision

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

  • Committer: brian
  • Date: 2008-06-25 05:29:13 UTC
  • Revision ID: brian@localhost.localdomain-20080625052913-6upwo0jsrl4lnapl
clean slate

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/******************************************************
 
2
Lock module internal structures and methods.
 
3
 
 
4
(c) 2007 Innobase Oy
 
5
 
 
6
Created July 12, 2007 Vasil Dimov
 
7
*******************************************************/
 
8
 
 
9
#ifndef lock0priv_h
 
10
#define lock0priv_h
 
11
 
 
12
#ifndef LOCK_MODULE_IMPLEMENTATION
 
13
/* If you need to access members of the structures defined in this
 
14
file, please write appropriate functions that retrieve them and put
 
15
those functions in lock/ */
 
16
#error Do not include lock0priv.h outside of the lock/ module
 
17
#endif
 
18
 
 
19
#include "univ.i"
 
20
#include "dict0types.h"
 
21
#include "hash0hash.h"
 
22
#include "trx0types.h"
 
23
#include "ut0lst.h"
 
24
 
 
25
/* A table lock */
 
26
typedef struct lock_table_struct        lock_table_t;
 
27
struct lock_table_struct {
 
28
        dict_table_t*   table;          /* database table in dictionary
 
29
                                        cache */
 
30
        UT_LIST_NODE_T(lock_t)
 
31
                        locks;          /* list of locks on the same
 
32
                                        table */
 
33
};
 
34
 
 
35
/* Record lock for a page */
 
36
typedef struct lock_rec_struct          lock_rec_t;
 
37
struct lock_rec_struct {
 
38
        ulint   space;                  /* space id */
 
39
        ulint   page_no;                /* page number */
 
40
        ulint   n_bits;                 /* number of bits in the lock
 
41
                                        bitmap; NOTE: the lock bitmap is
 
42
                                        placed immediately after the
 
43
                                        lock struct */
 
44
};
 
45
 
 
46
/* Lock struct */
 
47
struct lock_struct {
 
48
        trx_t*          trx;            /* transaction owning the
 
49
                                        lock */
 
50
        UT_LIST_NODE_T(lock_t)
 
51
                        trx_locks;      /* list of the locks of the
 
52
                                        transaction */
 
53
        ulint           type_mode;      /* lock type, mode, LOCK_GAP or
 
54
                                        LOCK_REC_NOT_GAP,
 
55
                                        LOCK_INSERT_INTENTION,
 
56
                                        wait flag, ORed */
 
57
        hash_node_t     hash;           /* hash chain node for a record
 
58
                                        lock */
 
59
        dict_index_t*   index;          /* index for a record lock */
 
60
        union {
 
61
                lock_table_t    tab_lock;/* table lock */
 
62
                lock_rec_t      rec_lock;/* record lock */
 
63
        } un_member;
 
64
};
 
65
 
 
66
/*************************************************************************
 
67
Gets the type of a lock. */
 
68
UNIV_INLINE
 
69
ulint
 
70
lock_get_type(
 
71
/*==========*/
 
72
                                /* out: LOCK_TABLE or LOCK_REC */
 
73
        const lock_t*   lock);  /* in: lock */
 
74
 
 
75
/**************************************************************************
 
76
Looks for a set bit in a record lock bitmap. Returns ULINT_UNDEFINED,
 
77
if none found. */
 
78
 
 
79
ulint
 
80
lock_rec_find_set_bit(
 
81
/*==================*/
 
82
                        /* out: bit index == heap number of the record, or
 
83
                        ULINT_UNDEFINED if none found */
 
84
        lock_t* lock);  /* in: record lock with at least one bit set */
 
85
 
 
86
/*************************************************************************
 
87
Gets the previous record lock set on a record. */
 
88
 
 
89
lock_t*
 
90
lock_rec_get_prev(
 
91
/*==============*/
 
92
                        /* out: previous lock on the same record, NULL if
 
93
                        none exists */
 
94
        lock_t* in_lock,/* in: record lock */
 
95
        ulint   heap_no);/* in: heap number of the record */
 
96
 
 
97
#ifndef UNIV_NONINL
 
98
#include "lock0priv.ic"
 
99
#endif
 
100
 
 
101
#endif /* lock0priv_h */