1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-27 12:41:57 +03:00

Code review for NOWAIT patch: downgrade NOWAIT from fully reserved keyword

to unreserved keyword, use ereport not elog, assign a separate error code
for 'could not obtain lock' so that applications will be able to detect
that case cleanly.
This commit is contained in:
Tom Lane
2004-10-01 16:40:05 +00:00
parent 392b187a21
commit 4c5e810fcd
6 changed files with 29 additions and 9 deletions

View File

@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/access/heap/heapam.c,v 1.176 2004/09/17 18:09:55 tgl Exp $
* $PostgreSQL: pgsql/src/backend/access/heap/heapam.c,v 1.177 2004/10/01 16:39:54 tgl Exp $
*
*
* INTERFACE ROUTINES
@ -465,6 +465,13 @@ relation_open(Oid relationId, LOCKMODE lockmode)
return r;
}
/* ----------------
* conditional_relation_open - open with option not to wait
*
* As above, but if nowait is true, then throw an error rather than
* waiting when the lock is not immediately obtainable.
* ----------------
*/
Relation
conditional_relation_open(Oid relationId, LOCKMODE lockmode, bool nowait)
{
@ -483,7 +490,10 @@ conditional_relation_open(Oid relationId, LOCKMODE lockmode, bool nowait)
if (nowait)
{
if (!ConditionalLockRelation(r, lockmode))
elog(ERROR, "could not acquire relation lock");
ereport(ERROR,
(errcode(ERRCODE_LOCK_NOT_AVAILABLE),
errmsg("could not obtain lock on \"%s\"",
RelationGetRelationName(r))));
}
else
LockRelation(r, lockmode);

View File

@ -11,7 +11,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.477 2004/09/30 00:24:20 tgl Exp $
* $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.478 2004/10/01 16:39:59 tgl Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
@ -7727,6 +7727,7 @@ unreserved_keyword:
| NOCREATEUSER
| NOTHING
| NOTIFY
| NOWAIT
| OBJECT_P
| OF
| OIDS
@ -7944,7 +7945,6 @@ reserved_keyword:
| LOCALTIMESTAMP
| NEW
| NOT
| NOWAIT
| NULL_P
| OFF
| OFFSET

View File

@ -11,7 +11,7 @@
*
* Copyright (c) 2003, PostgreSQL Global Development Group
*
* $PostgreSQL: pgsql/src/include/utils/errcodes.h,v 1.15 2004/08/29 05:06:58 momjian Exp $
* $PostgreSQL: pgsql/src/include/utils/errcodes.h,v 1.16 2004/10/01 16:40:04 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@ -308,6 +308,7 @@
#define ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE MAKE_SQLSTATE('5','5', '0','0','0')
#define ERRCODE_OBJECT_IN_USE MAKE_SQLSTATE('5','5', '0','0','6')
#define ERRCODE_CANT_CHANGE_RUNTIME_PARAM MAKE_SQLSTATE('5','5', 'P','0','2')
#define ERRCODE_LOCK_NOT_AVAILABLE MAKE_SQLSTATE('5','5', 'P','0','3')
/* Class 57 - Operator Intervention (class borrowed from DB2) */
#define ERRCODE_OPERATOR_INTERVENTION MAKE_SQLSTATE('5','7', '0','0','0')

View File

@ -9,7 +9,7 @@
*
* Copyright (c) 2003, PostgreSQL Global Development Group
*
* $PostgreSQL: pgsql/src/pl/plpgsql/src/plerrcodes.h,v 1.4 2004/08/29 05:07:01 momjian Exp $
* $PostgreSQL: pgsql/src/pl/plpgsql/src/plerrcodes.h,v 1.5 2004/10/01 16:40:05 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@ -659,6 +659,10 @@
"cant_change_runtime_param", ERRCODE_CANT_CHANGE_RUNTIME_PARAM
},
{
"lock_not_available", ERRCODE_LOCK_NOT_AVAILABLE
},
{
"operator_intervention", ERRCODE_OPERATOR_INTERVENTION
},