aboutsummaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/parser/gram.y22
-rw-r--r--src/backend/storage/lmgr/lmgr.c44
-rw-r--r--src/backend/storage/lmgr/lock.c3
3 files changed, 41 insertions, 28 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index cf518f3cadd..7e6f782984e 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -11,7 +11,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.233 2001/06/30 22:03:25 petere Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.234 2001/07/09 22:18:33 tgl Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
@@ -153,7 +153,7 @@ static void doNegateFloat(Value *v);
%type <list> createdb_opt_list, createdb_opt_item
%type <ival> opt_lock, lock_type
-%type <boolean> opt_lmode, opt_force
+%type <boolean> opt_force
%type <ival> user_createdb_clause, user_createuser_clause
%type <str> user_passwd_clause
@@ -3277,18 +3277,18 @@ LockStmt: LOCK_P opt_table relation_name opt_lock
}
;
-opt_lock: IN lock_type MODE { $$ = $2; }
+opt_lock: IN lock_type MODE { $$ = $2; }
| /*EMPTY*/ { $$ = AccessExclusiveLock; }
;
-lock_type: SHARE ROW EXCLUSIVE { $$ = ShareRowExclusiveLock; }
- | ROW opt_lmode { $$ = ($2? RowShareLock: RowExclusiveLock); }
- | ACCESS opt_lmode { $$ = ($2? AccessShareLock: AccessExclusiveLock); }
- | opt_lmode { $$ = ($1? ShareLock: ExclusiveLock); }
- ;
-
-opt_lmode: SHARE { $$ = TRUE; }
- | EXCLUSIVE { $$ = FALSE; }
+lock_type: ACCESS SHARE { $$ = AccessShareLock; }
+ | ROW SHARE { $$ = RowShareLock; }
+ | ROW EXCLUSIVE { $$ = RowExclusiveLock; }
+ | SHARE UPDATE EXCLUSIVE { $$ = ShareUpdateExclusiveLock; }
+ | SHARE { $$ = ShareLock; }
+ | SHARE ROW EXCLUSIVE { $$ = ShareRowExclusiveLock; }
+ | EXCLUSIVE { $$ = ExclusiveLock; }
+ | ACCESS EXCLUSIVE { $$ = AccessExclusiveLock; }
;
diff --git a/src/backend/storage/lmgr/lmgr.c b/src/backend/storage/lmgr/lmgr.c
index fa3812a87eb..10861348e80 100644
--- a/src/backend/storage/lmgr/lmgr.c
+++ b/src/backend/storage/lmgr/lmgr.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lmgr.c,v 1.48 2001/06/22 00:04:59 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lmgr.c,v 1.49 2001/07/09 22:18:33 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -33,25 +33,35 @@ static LOCKMASK LockConflicts[] = {
(1 << ExclusiveLock) | (1 << AccessExclusiveLock),
/* RowExclusiveLock */
- (1 << ExclusiveLock) | (1 << ShareRowExclusiveLock) | (1 << ShareLock) |
- (1 << AccessExclusiveLock),
+ (1 << ShareLock) | (1 << ShareRowExclusiveLock) |
+ (1 << ExclusiveLock) | (1 << AccessExclusiveLock),
+
+ /* ShareUpdateExclusiveLock */
+ (1 << ShareUpdateExclusiveLock) |
+ (1 << ShareLock) | (1 << ShareRowExclusiveLock) |
+ (1 << ExclusiveLock) | (1 << AccessExclusiveLock),
/* ShareLock */
- (1 << ExclusiveLock) | (1 << ShareRowExclusiveLock) |
- (1 << RowExclusiveLock) | (1 << AccessExclusiveLock),
+ (1 << RowExclusiveLock) | (1 << ShareUpdateExclusiveLock) |
+ (1 << ShareRowExclusiveLock) |
+ (1 << ExclusiveLock) | (1 << AccessExclusiveLock),
/* ShareRowExclusiveLock */
- (1 << ExclusiveLock) | (1 << ShareRowExclusiveLock) |
- (1 << ShareLock) | (1 << RowExclusiveLock) | (1 << AccessExclusiveLock),
+ (1 << RowExclusiveLock) | (1 << ShareUpdateExclusiveLock) |
+ (1 << ShareLock) | (1 << ShareRowExclusiveLock) |
+ (1 << ExclusiveLock) | (1 << AccessExclusiveLock),
/* ExclusiveLock */
- (1 << ExclusiveLock) | (1 << ShareRowExclusiveLock) | (1 << ShareLock) |
- (1 << RowExclusiveLock) | (1 << RowShareLock) | (1 << AccessExclusiveLock),
+ (1 << RowShareLock) |
+ (1 << RowExclusiveLock) | (1 << ShareUpdateExclusiveLock) |
+ (1 << ShareLock) | (1 << ShareRowExclusiveLock) |
+ (1 << ExclusiveLock) | (1 << AccessExclusiveLock),
/* AccessExclusiveLock */
- (1 << ExclusiveLock) | (1 << ShareRowExclusiveLock) | (1 << ShareLock) |
- (1 << RowExclusiveLock) | (1 << RowShareLock) |
- (1 << AccessExclusiveLock) | (1 << AccessShareLock)
+ (1 << AccessShareLock) | (1 << RowShareLock) |
+ (1 << RowExclusiveLock) | (1 << ShareUpdateExclusiveLock) |
+ (1 << ShareLock) | (1 << ShareRowExclusiveLock) |
+ (1 << ExclusiveLock) | (1 << AccessExclusiveLock)
};
@@ -63,14 +73,16 @@ static int LockPrios[] = {
2,
/* RowExclusiveLock */
3,
- /* ShareLock */
+ /* ShareUpdateExclusiveLock */
4,
- /* ShareRowExclusiveLock */
+ /* ShareLock */
5,
- /* ExclusiveLock */
+ /* ShareRowExclusiveLock */
6,
+ /* ExclusiveLock */
+ 7,
/* AccessExclusiveLock */
- 7
+ 8
};
LOCKMETHOD LockTableId = (LOCKMETHOD) NULL;
diff --git a/src/backend/storage/lmgr/lock.c b/src/backend/storage/lmgr/lock.c
index 3eb01048274..cff407a4a81 100644
--- a/src/backend/storage/lmgr/lock.c
+++ b/src/backend/storage/lmgr/lock.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lock.c,v 1.90 2001/06/27 23:31:39 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lock.c,v 1.91 2001/07/09 22:18:33 tgl Exp $
*
* NOTES
* Outside modules can create a lock table and acquire/release
@@ -58,6 +58,7 @@ static char *lock_mode_names[] =
"AccessShareLock",
"RowShareLock",
"RowExclusiveLock",
+ "ShareUpdateExclusiveLock",
"ShareLock",
"ShareRowExclusiveLock",
"ExclusiveLock",