diff options
Diffstat (limited to 'src/backend')
-rw-r--r-- | src/backend/parser/gram.y | 22 | ||||
-rw-r--r-- | src/backend/storage/lmgr/lmgr.c | 44 | ||||
-rw-r--r-- | src/backend/storage/lmgr/lock.c | 3 |
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", |