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

@ -1,4 +1,4 @@
<!-- $PostgreSQL: pgsql/doc/src/sgml/errcodes.sgml,v 1.8 2004/08/24 00:06:50 neilc Exp $ -->
<!-- $PostgreSQL: pgsql/doc/src/sgml/errcodes.sgml,v 1.9 2004/10/01 16:39:46 tgl Exp $ -->
<appendix id="errcodes-appendix">
<title><productname>PostgreSQL</productname> Error Codes</title>
@ -1099,6 +1099,11 @@
<entry>CANT CHANGE RUNTIME PARAM</entry>
</row>
<row>
<entry><literal>55P03</literal></entry>
<entry>LOCK NOT AVAILABLE</entry>
</row>
<row>
<entry>Class 57</entry>

View File

@ -1,5 +1,5 @@
<!--
$PostgreSQL: pgsql/doc/src/sgml/ref/lock.sgml,v 1.42 2004/03/12 00:52:23 neilc Exp $
$PostgreSQL: pgsql/doc/src/sgml/ref/lock.sgml,v 1.43 2004/10/01 16:39:47 tgl Exp $
PostgreSQL documentation
-->
@ -37,7 +37,7 @@ where <replaceable class="PARAMETER">lockmode</replaceable> is one of:
if necessary for any conflicting locks to be released. If
<literal>NOWAIT</literal> is specified, <command>LOCK
TABLE</command> does not wait to acquire the desired lock: if it
cannot be immediately acquired, the transaction is aborted and an
cannot be acquired immediately, the command is aborted and an
error is emitted. Once obtained, the lock is held for the
remainder of the current transaction. (There is no <command>UNLOCK
TABLE</command> command; locks are always released at transaction

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
},