diff -r -u postgresql-8.2.3.orig/doc/src/sgml/ref/lock.sgml postgresql-8.2.3/doc/src/sgml/ref/lock.sgml --- postgresql-8.2.3.orig/doc/src/sgml/ref/lock.sgml Sat Sep 16 04:30:19 2006 +++ postgresql-8.2.3/doc/src/sgml/ref/lock.sgml Mon Feb 12 17:42:31 2007 @@ -26,6 +26,7 @@ ACCESS SHARE | ROW SHARE | ROW EXCLUSIVE | SHARE UPDATE EXCLUSIVE | SHARE | SHARE ROW EXCLUSIVE | EXCLUSIVE | ACCESS EXCLUSIVE + | APPLICATION SHARE | APPLICATION EXCLUSIVE diff -r -u postgresql-8.2.3.orig/src/backend/parser/gram.y postgresql-8.2.3/src/backend/parser/gram.y --- postgresql-8.2.3.orig/src/backend/parser/gram.y Mon Feb 12 18:19:12 2007 +++ postgresql-8.2.3/src/backend/parser/gram.y Mon Feb 12 18:08:35 2007 @@ -356,7 +356,7 @@ /* ordinary key words in alphabetical order */ %token ABORT_P ABSOLUTE_P ACCESS ACTION ADD_P ADMIN AFTER - AGGREGATE ALL ALSO ALTER ANALYSE ANALYZE AND ANY ARRAY AS ASC + AGGREGATE ALL ALSO ALTER ANALYSE ANALYZE AND ANY APPLICATION ARRAY AS ASC ASSERTION ASSIGNMENT ASYMMETRIC AT AUTHORIZATION BACKWARD BEFORE BEGIN_P BETWEEN BIGINT BINARY BIT @@ -5486,11 +5486,12 @@ lock_type: ACCESS SHARE { $$ = AccessShareLock; } | ROW SHARE { $$ = RowShareLock; } | ROW EXCLUSIVE { $$ = RowExclusiveLock; } + | APPLICATION SHARE { $$ = ApplicationShareLock; } + | APPLICATION EXCLUSIVE { $$ = ApplicationExclusiveLock; } | SHARE UPDATE EXCLUSIVE { $$ = ShareUpdateExclusiveLock; } | SHARE { $$ = ShareLock; } | SHARE ROW EXCLUSIVE { $$ = ShareRowExclusiveLock; } | EXCLUSIVE { $$ = ExclusiveLock; } - | ACCESS EXCLUSIVE { $$ = AccessExclusiveLock; } ; opt_nowait: NOWAIT { $$ = TRUE; } @@ -8832,7 +8833,8 @@ * looks too much like a function call for an LR(1) parser. */ col_name_keyword: - BIGINT + APPLICATION + | BIGINT | BIT | BOOLEAN_P | CHAR_P diff -r -u postgresql-8.2.3.orig/src/backend/parser/keywords.c postgresql-8.2.3/src/backend/parser/keywords.c --- postgresql-8.2.3.orig/src/backend/parser/keywords.c Mon Feb 12 18:19:12 2007 +++ postgresql-8.2.3/src/backend/parser/keywords.c Mon Feb 12 17:42:31 2007 @@ -46,6 +46,7 @@ {"analyze", ANALYZE}, {"and", AND}, {"any", ANY}, + {"application", APPLICATION}, {"array", ARRAY}, {"as", AS}, {"asc", ASC}, diff -r -u postgresql-8.2.3.orig/src/backend/storage/lmgr/lock.c postgresql-8.2.3.patched/src/backend/storage/lmgr/lock.c --- postgresql-8.2.3.orig/src/backend/storage/lmgr/lock.c 2006-10-04 04:29:57.000000000 +0400 +++ postgresql-8.2.3/src/backend/storage/lmgr/lock.c 2007-03-09 13:20:04.348635100 +0300 @@ -93,8 +93,14 @@ (1 << AccessShareLock) | (1 << RowShareLock) | (1 << RowExclusiveLock) | (1 << ShareUpdateExclusiveLock) | (1 << ShareLock) | (1 << ShareRowExclusiveLock) | - (1 << ExclusiveLock) | (1 << AccessExclusiveLock) + (1 << ExclusiveLock) | (1 << AccessExclusiveLock), + /* ApplicationShareLock*/ + (1 << ApplicationExclusiveLock), + + + /* ApplicationExclusiveLock*/ + (1 << ApplicationExclusiveLock | 1 << ApplicationShareLock) }; /* Names of lock modes, for debug printouts */ @@ -108,7 +114,9 @@ "ShareLock", "ShareRowExclusiveLock", "ExclusiveLock", - "AccessExclusiveLock" + "AccessExclusiveLock", + "ApplicationShareLock", + "ApplicationExclusiveLock" }; #ifndef LOCK_DEBUG @@ -116,7 +124,7 @@ #endif static const LockMethodData default_lockmethod = { - AccessExclusiveLock, /* highest valid lock mode number */ + ApplicationExclusiveLock, /* highest valid lock mode number */ true, LockConflicts, lock_mode_names, @@ -128,7 +136,7 @@ }; static const LockMethodData user_lockmethod = { - AccessExclusiveLock, /* highest valid lock mode number */ + ApplicationExclusiveLock, /* highest valid lock mode number */ false, LockConflicts, lock_mode_names, diff -r -u postgresql-8.2.3.orig/src/include/storage/lock.h postgresql-8.2.3/src/include/storage/lock.h --- postgresql-8.2.3.orig/src/include/storage/lock.h Thu Nov 23 08:14:04 2006 +++ postgresql-8.2.3/src/include/storage/lock.h Mon Feb 12 18:10:28 2007 @@ -50,7 +50,7 @@ typedef int LOCKMODE; /* MAX_LOCKMODES cannot be larger than the # of bits in LOCKMASK */ -#define MAX_LOCKMODES 10 +#define MAX_LOCKMODES 12 #define LOCKBIT_ON(lockmode) (1 << (lockmode)) #define LOCKBIT_OFF(lockmode) (~(1 << (lockmode))) @@ -118,6 +118,9 @@ * UPDATE */ #define AccessExclusiveLock 8 /* ALTER TABLE, DROP TABLE, VACUUM * FULL, and unqualified LOCK TABLE */ + +#define ApplicationShareLock 9 /* requested explicitly */ +#define ApplicationExclusiveLock 10 /* requested explicitly */ /*