CUBRID Engine
latest
Main Page
Namespaces
Classes
Files
File List
File Members
lock_table.c
Go to the documentation of this file.
1
/*
2
* Copyright 2008 Search Solution Corporation
3
* Copyright 2016 CUBRID Corporation
4
*
5
* Licensed under the Apache License, Version 2.0 (the "License");
6
* you may not use this file except in compliance with the License.
7
* You may obtain a copy of the License at
8
*
9
* http://www.apache.org/licenses/LICENSE-2.0
10
*
11
* Unless required by applicable law or agreed to in writing, software
12
* distributed under the License is distributed on an "AS IS" BASIS,
13
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
* See the License for the specific language governing permissions and
15
* limitations under the License.
16
*
17
*/
18
19
/*
20
* lock_table.c - lock managment module. (client + server)
21
* Definition of lock matrix tables
22
*/
23
24
#ident "$Id$"
25
26
#include "config.h"
27
28
#include "
storage_common.h
"
29
30
/*
31
*
32
* LOCK COMPATIBILITY TABLE
33
*
34
* column : current lock mode (granted lock mode)
35
* row : request lock mode
36
* ----------------------------------------------------------------------------------------------------------
37
* | N/A NON2PL NULL SCH-S IS S IX BU SIX U X SCH-M
38
* ----------------------------------------------------------------------------------------------------------
39
* N/A | N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A
40
*
41
* NON2PL | N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A
42
*
43
* NULL | N/A N/A True True True True True True True True True True
44
*
45
* SCH-S | N/A N/A True True True True True True True N/A True False
46
*
47
* IS | N/A N/A True True True True True False True N/A False False
48
*
49
* S | N/A N/A True True True True False False False False False False
50
*
51
* IX | N/A N/A True True True False True False False N/A False False
52
*
53
* BU | N/A N/A True True False False False True False N/A False False
54
*
55
* SIX | N/A N/A True True True False False False False N/A False False
56
*
57
* U | N/A N/A True N/A N/A True N/A N/A N/A False False N/A
58
*
59
* X | N/A N/A True True False False False False False False False False
60
*
61
* SCH-M | N/A N/A True False False False False False False N/A False False
62
* ----------------------------------------------------------------------------------------------------------
63
* N/A : not applicable
64
*/
65
66
/* *INDENT-OFF* */
67
LOCK_COMPATIBILITY
lock_Comp
[12][12] = {
68
/* N/A */
69
{
/* N/A */
LOCK_COMPAT_UNKNOWN
,
/* NON2PL */
LOCK_COMPAT_UNKNOWN
,
/* NULL */
LOCK_COMPAT_UNKNOWN
,
70
/* SCH-S */
LOCK_COMPAT_UNKNOWN
,
/* IS */
LOCK_COMPAT_UNKNOWN
,
/* S */
LOCK_COMPAT_UNKNOWN
,
71
/* IX */
LOCK_COMPAT_UNKNOWN
,
/* BU */
LOCK_COMPAT_UNKNOWN
,
/* SIX */
LOCK_COMPAT_UNKNOWN
,
72
/* U */
LOCK_COMPAT_UNKNOWN
,
/* X */
LOCK_COMPAT_UNKNOWN
,
/* SCH-M */
LOCK_COMPAT_UNKNOWN},
73
74
/* NON2PL */
75
{
/* N/A */
LOCK_COMPAT_UNKNOWN
,
/* NON2PL */
LOCK_COMPAT_UNKNOWN
,
/* NULL */
LOCK_COMPAT_UNKNOWN
,
76
/* SCH-S */
LOCK_COMPAT_UNKNOWN
,
/* IS */
LOCK_COMPAT_UNKNOWN
,
/* S */
LOCK_COMPAT_UNKNOWN
,
77
/* IX */
LOCK_COMPAT_UNKNOWN
,
/* BU */
LOCK_COMPAT_UNKNOWN
,
/* SIX */
LOCK_COMPAT_UNKNOWN
,
78
/* U */
LOCK_COMPAT_UNKNOWN
,
/* X */
LOCK_COMPAT_UNKNOWN
,
/* SCH-M */
LOCK_COMPAT_UNKNOWN},
79
80
/* NULL */
81
{
/* N/A */
LOCK_COMPAT_UNKNOWN
,
/* NON2PL */
LOCK_COMPAT_UNKNOWN
,
/* NULL */
LOCK_COMPAT_YES
,
82
/* SCH-S */
LOCK_COMPAT_YES
,
/* IS */
LOCK_COMPAT_YES
,
/* S */
LOCK_COMPAT_YES
,
83
/* IX */
LOCK_COMPAT_YES
,
/* BU */
LOCK_COMPAT_YES
,
/* SIX */
LOCK_COMPAT_YES
,
84
/* U */
LOCK_COMPAT_YES
,
/* X */
LOCK_COMPAT_YES
,
/* SCH-M */
LOCK_COMPAT_YES},
85
86
/* SCH-S */
87
{
/* N/A */
LOCK_COMPAT_UNKNOWN
,
/* NON2PL */
LOCK_COMPAT_UNKNOWN
,
/* NULL */
LOCK_COMPAT_YES
,
88
/* SCH-S */
LOCK_COMPAT_YES
,
/* IS */
LOCK_COMPAT_YES
,
/* S */
LOCK_COMPAT_YES
,
89
/* IX */
LOCK_COMPAT_YES
,
/* BU */
LOCK_COMPAT_YES
,
/* SIX */
LOCK_COMPAT_YES
,
90
/* U */
LOCK_COMPAT_UNKNOWN
,
/* X */
LOCK_COMPAT_YES
,
/* SCH-M */
LOCK_COMPAT_NO
},
91
92
/* IS */
93
{
/* N/A */
LOCK_COMPAT_UNKNOWN
,
/* NON2PL */
LOCK_COMPAT_UNKNOWN
,
/* NULL */
LOCK_COMPAT_YES
,
94
/* SCH-S */
LOCK_COMPAT_YES
,
/* IS */
LOCK_COMPAT_YES
,
/* S */
LOCK_COMPAT_YES
,
95
/* IX */
LOCK_COMPAT_YES
,
/* BU */
LOCK_COMPAT_NO
,
/* SIX */
LOCK_COMPAT_YES
,
96
/* U */
LOCK_COMPAT_UNKNOWN
,
/* X */
LOCK_COMPAT_NO
,
/* SCH-M */
LOCK_COMPAT_NO},
97
98
/* S */
99
{
/* N/A */
LOCK_COMPAT_UNKNOWN
,
/* NON2PL */
LOCK_COMPAT_UNKNOWN
,
/* NULL */
LOCK_COMPAT_YES
,
100
/* SCH-S */
LOCK_COMPAT_YES
,
/* IS */
LOCK_COMPAT_YES
,
/* S */
LOCK_COMPAT_YES
,
101
/* IX */
LOCK_COMPAT_NO
,
/* BU */
LOCK_COMPAT_NO
,
/* SIX */
LOCK_COMPAT_NO
,
102
/* U */
LOCK_COMPAT_NO
,
/* X */
LOCK_COMPAT_NO
,
/* SCH-M */
LOCK_COMPAT_NO},
103
104
/* IX */
105
{
/* N/A */
LOCK_COMPAT_UNKNOWN
,
/* NON2PL */
LOCK_COMPAT_UNKNOWN
,
/* NULL */
LOCK_COMPAT_YES
,
106
/* SCH-S */
LOCK_COMPAT_YES
,
/* IS */
LOCK_COMPAT_YES
,
/* S */
LOCK_COMPAT_NO
,
107
/* IX */
LOCK_COMPAT_YES
,
/* BU */
LOCK_COMPAT_NO
,
/* SIX */
LOCK_COMPAT_NO
,
108
/* U */
LOCK_COMPAT_UNKNOWN
,
/* X */
LOCK_COMPAT_NO
,
/* SCH-M */
LOCK_COMPAT_NO},
109
110
/* BU_LOCK */
111
{
/* N/A */
LOCK_COMPAT_UNKNOWN
,
/* NON2PL */
LOCK_COMPAT_UNKNOWN
,
/* NULL */
LOCK_COMPAT_YES
,
112
/* SCH-S */
LOCK_COMPAT_YES
,
/* IS */
LOCK_COMPAT_NO
,
/* S */
LOCK_COMPAT_NO
,
113
/* IX */
LOCK_COMPAT_NO
,
/* BU */
LOCK_COMPAT_YES
,
/* SIX */
LOCK_COMPAT_NO
,
114
/* U */
LOCK_COMPAT_UNKNOWN
,
/* X */
LOCK_COMPAT_NO
,
/* SCH-M */
LOCK_COMPAT_NO},
115
116
/* SIX */
117
{
/* N/A */
LOCK_COMPAT_UNKNOWN
,
/* NON2PL */
LOCK_COMPAT_UNKNOWN
,
/* NULL */
LOCK_COMPAT_YES
,
118
/* SCH-S */
LOCK_COMPAT_YES
,
/* IS */
LOCK_COMPAT_YES
,
/* S */
LOCK_COMPAT_NO
,
119
/* IX */
LOCK_COMPAT_NO
,
/* BU */
LOCK_COMPAT_NO
,
/* SIX */
LOCK_COMPAT_NO
,
120
/* U */
LOCK_COMPAT_UNKNOWN
,
/* X */
LOCK_COMPAT_NO
,
/* SCH-M */
LOCK_COMPAT_NO},
121
122
/* U */
123
{
/* N/A */
LOCK_COMPAT_UNKNOWN
,
/* NON2PL */
LOCK_COMPAT_UNKNOWN
,
/* NULL */
LOCK_COMPAT_YES
,
124
/* SCH-S */
LOCK_COMPAT_UNKNOWN
,
/* IS */
LOCK_COMPAT_UNKNOWN
,
/* S */
LOCK_COMPAT_YES
,
125
/* IX */
LOCK_COMPAT_UNKNOWN
,
/* BU */
LOCK_COMPAT_UNKNOWN
,
/* SIX */
LOCK_COMPAT_UNKNOWN
,
126
/* U */
LOCK_COMPAT_NO
,
/* X */
LOCK_COMPAT_NO
,
/* SCH-M */
LOCK_COMPAT_UNKNOWN},
127
128
/* X */
129
{
/* N/A */
LOCK_COMPAT_UNKNOWN
,
/* NON2PL */
LOCK_COMPAT_UNKNOWN
,
/* NULL */
LOCK_COMPAT_YES
,
130
/* SCH-S */
LOCK_COMPAT_YES
,
/* IS */
LOCK_COMPAT_NO
,
/* S */
LOCK_COMPAT_NO
,
131
/* IX */
LOCK_COMPAT_NO
,
/* BU */
LOCK_COMPAT_NO
,
/* SIX */
LOCK_COMPAT_NO
,
132
/* U */
LOCK_COMPAT_NO
,
/* X */
LOCK_COMPAT_NO
,
/* SCH-M */
LOCK_COMPAT_NO},
133
134
/* SCH-M */
135
{
/* N/A */
LOCK_COMPAT_UNKNOWN
,
/* NON2PL */
LOCK_COMPAT_UNKNOWN
,
/* NULL */
LOCK_COMPAT_YES
,
136
/* SCH-S */
LOCK_COMPAT_NO
,
/* IS */
LOCK_COMPAT_NO
,
/* S */
LOCK_COMPAT_NO
,
137
/* IX */
LOCK_COMPAT_NO
,
/* BU */
LOCK_COMPAT_NO
,
/* SIX */
LOCK_COMPAT_NO
,
138
/* U */
LOCK_COMPAT_UNKNOWN
,
/* X */
LOCK_COMPAT_NO
,
/* SCH-M */
LOCK_COMPAT_NO}
139
};
140
/* *INDENT-ON* */
141
142
/*
143
*
144
* LOCK CONVERSION TABLE
145
*
146
* column : current lock mode (granted lock mode)
147
* row : request lock mode
148
* -----------------------------------------------------------------------------------------------
149
* | N/A NON2PL NULL SCH-S IS S IX BU SIX U X SCH-M
150
* -----------------------------------------------------------------------------------------------
151
* N/A | N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A
152
*
153
* NON2PL | N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A
154
*
155
* NULL | N/A N/A NULL SCH-S IS S IX BU SIX U X SCH-M
156
*
157
* SCH-S | N/A N/A SCH-S SCH-S IS S IX BU SIX N/A X SCH-M
158
*
159
* IS | N/A N/A IS IS IS S IX X SIX N/A X SCH-M
160
*
161
* S | N/A N/A S S S S SIX X SIX U X SCH-M
162
*
163
* IX | N/A N/A IX IX IX SIX IX X SIX N/A X SCH-M
164
*
165
* BU | N/A N/A BU BU BU X BU BU BU N/A X SCH-M
166
*
167
* SIX | N/A N/A SIX SIX SIX SIX SIX X SIX N/A X SCH-M
168
*
169
* U | N/A N/A U N/A N/A U N/A N/A N/A U X N/A
170
*
171
* X | N/A N/A X X X X X X X X X SCH-M
172
*
173
* SCH-M | N/A N/A SCH-M SCH-M SCH-M SCH-M SCH-M SCH-M SCH-M N/A SCH-M SCH-M
174
* -----------------------------------------------------------------------------------------------
175
* N/A : not applicable
176
*/
177
178
/* *INDENT-OFF* */
179
LOCK
lock_Conv
[12][12] = {
180
/* N/A */
181
{
/* N/A */
NA_LOCK
,
/* NON2PL */
NA_LOCK
,
/* NULL */
NA_LOCK
,
/* SCH-S */
NA_LOCK
,
182
/* IS */
NA_LOCK
,
/* S */
NA_LOCK
,
/* IX */
NA_LOCK
,
/* BU */
NA_LOCK
,
/* SIX */
NA_LOCK
,
183
/* U */
NA_LOCK
,
/* X */
NA_LOCK
,
/* SCH-M */
NA_LOCK},
184
185
/* NON2PL */
186
{
/* N/A */
NA_LOCK
,
/* NON2PL */
NA_LOCK
,
/* NULL */
NA_LOCK
,
/* SCH-S */
NA_LOCK
,
187
/* IS */
NA_LOCK
,
/* S */
NA_LOCK
,
/* IX */
NA_LOCK
,
/* BU */
NA_LOCK
,
/* SIX */
NA_LOCK
,
188
/* U */
NA_LOCK
,
/* X */
NA_LOCK
,
/* SCH-M */
NA_LOCK},
189
190
/* NULL */
191
{
/* N/A */
NA_LOCK
,
/* NON2PL */
NA_LOCK
,
/* NULL */
NULL_LOCK
,
/* SCH-S */
SCH_S_LOCK
,
192
/* IS */
IS_LOCK
,
/* S */
S_LOCK
,
/* IX */
IX_LOCK
,
/* BU */
BU_LOCK
,
/* SIX */
SIX_LOCK
,
193
/* U */
U_LOCK
,
/* X */
X_LOCK
,
/* SCH-M */
SCH_M_LOCK
},
194
195
/* SCH-S */
196
{
/* N/A */
NA_LOCK
,
/* NON2PL */
NA_LOCK
,
/* NULL */
SCH_S_LOCK
,
/* SCH-S */
SCH_S_LOCK
,
197
/* IS */
IS_LOCK
,
/* S */
S_LOCK
,
/* IX */
IX_LOCK
,
/* BU */
BU_LOCK
,
/* SIX */
SIX_LOCK
,
198
/* U */
NA_LOCK
,
/* X */
X_LOCK
,
/* SCH-M */
SCH_M_LOCK},
199
200
/* IS */
201
{
/* N/A */
NA_LOCK
,
/* NON2PL */
NA_LOCK
,
/* NULL */
IS_LOCK
,
/* SCH-S */
IS_LOCK
,
202
/* IS */
IS_LOCK
,
/* S */
S_LOCK
,
/* IX */
IX_LOCK
,
/* BU */
X_LOCK
,
/* SIX */
SIX_LOCK
,
203
/* U */
NA_LOCK
,
/* X */
X_LOCK
,
/* SCH-M */
SCH_M_LOCK},
204
205
/* S */
206
{
/* N/A */
NA_LOCK
,
/* NON2PL */
NA_LOCK
,
/* NULL */
S_LOCK
,
/* SCH-S */
S_LOCK
,
207
/* IS */
S_LOCK
,
/* S */
S_LOCK
,
/* IX */
SIX_LOCK
,
/* BU */
X_LOCK
,
/* SIX */
SIX_LOCK
,
208
/* U */
U_LOCK
,
/* X */
X_LOCK
,
/* SCH-M */
SCH_M_LOCK},
209
210
/* IX */
211
{
/* N/A */
NA_LOCK
,
/* NON2PL */
NA_LOCK
,
/* NULL */
IX_LOCK
,
/* SCH-S */
IX_LOCK
,
212
/* IS */
IX_LOCK
,
/* S */
SIX_LOCK
,
/* IX */
IX_LOCK
,
/* BU */
X_LOCK
,
/* SIX */
SIX_LOCK
,
213
/* U */
NA_LOCK
,
/* X */
X_LOCK
,
/* SCH-M */
SCH_M_LOCK},
214
215
/* BU */
216
{
/* N/A */
NA_LOCK
,
/* NON2PL */
NA_LOCK
,
/* NULL */
BU_LOCK
,
/* SCH-S */
BU_LOCK
,
217
/* IS */
BU_LOCK
,
/* S */
X_LOCK
,
/* IX */
BU_LOCK
,
/* BU */
BU_LOCK
,
/* SIX */
BU_LOCK
,
218
/* U */
NA_LOCK
,
/* X */
X_LOCK
,
/* SCH-M */
SCH_M_LOCK},
219
220
/* SIX */
221
{
/* N/A */
NA_LOCK
,
/* NON2PL */
NA_LOCK
,
/* NULL */
SIX_LOCK
,
/* SCH-S */
SIX_LOCK
,
222
/* IS */
SIX_LOCK
,
/* S */
SIX_LOCK
,
/* IX */
SIX_LOCK
,
/* BU */
X_LOCK
,
/* SIX */
SIX_LOCK
,
223
/* U */
NA_LOCK
,
/* X */
X_LOCK
,
/* SCH-M */
SCH_M_LOCK},
224
225
/* U */
226
{
/* N/A */
NA_LOCK
,
/* NON2PL */
NA_LOCK
,
/* NULL */
U_LOCK
,
/* SCH-S */
NA_LOCK
,
227
/* IS */
NA_LOCK
,
/* S */
U_LOCK
,
/* IX */
NA_LOCK
,
/* BU */
NA_LOCK
,
/* SIX */
NA_LOCK
,
228
/* U */
U_LOCK
,
/* X */
X_LOCK
,
/* SCH-M */
NA_LOCK},
229
230
/* X */
231
{
/* N/A */
NA_LOCK
,
/* NON2PL */
NA_LOCK
,
/* NULL */
X_LOCK
,
/* SCH-S */
X_LOCK
,
232
/* IS */
X_LOCK
,
/* S */
X_LOCK
,
/* IX */
X_LOCK
,
/* BU */
X_LOCK
,
/* SIX */
X_LOCK
,
233
/* U */
X_LOCK
,
/* X */
X_LOCK
,
/* SCH-M */
SCH_M_LOCK},
234
235
/* SCH-M */
236
{
/* N/A */
NA_LOCK
,
/* NON2PL */
NA_LOCK
,
/* NULL */
SCH_M_LOCK
,
/* SCH-S */
SCH_M_LOCK
,
237
/* IS */
SCH_M_LOCK
,
/* S */
SCH_M_LOCK
,
/* IX */
SCH_M_LOCK
,
/* BU */
SCH_M_LOCK
,
/* SIX */
SCH_M_LOCK
,
238
/* U */
NA_LOCK
,
/* X */
SCH_M_LOCK
,
/* SCH-M */
SCH_M_LOCK}
239
};
240
/* *INDENT-ON* */
LOCK_COMPAT_UNKNOWN
Definition:
storage_common.h:364
S_LOCK
Definition:
storage_common.h:375
NULL_LOCK
Definition:
storage_common.h:372
LOCK_COMPAT_YES
Definition:
storage_common.h:363
storage_common.h
lock_Comp
LOCK_COMPATIBILITY lock_Comp[12][12]
Definition:
lock_table.c:67
lock_Conv
LOCK lock_Conv[12][12]
Definition:
lock_table.c:179
X_LOCK
Definition:
storage_common.h:380
LOCK
LOCK
Definition:
storage_common.h:367
U_LOCK
Definition:
storage_common.h:379
SCH_M_LOCK
Definition:
storage_common.h:381
SCH_S_LOCK
Definition:
storage_common.h:373
LOCK_COMPAT_NO
Definition:
storage_common.h:362
LOCK_COMPATIBILITY
LOCK_COMPATIBILITY
Definition:
storage_common.h:360
SIX_LOCK
Definition:
storage_common.h:378
IS_LOCK
Definition:
storage_common.h:374
BU_LOCK
Definition:
storage_common.h:377
NA_LOCK
Definition:
storage_common.h:370
IX_LOCK
Definition:
storage_common.h:376
src
transaction
lock_table.c
Generated by
1.8.11