Code review for NOWAIT patch: downgrade NOWAIT from fully reserved keyword
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 1 Oct 2004 16:40:05 +0000 (16:40 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 1 Oct 2004 16:40:05 +0000 (16:40 +0000)
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.

doc/src/sgml/errcodes.sgml
doc/src/sgml/ref/lock.sgml
src/backend/access/heap/heapam.c
src/backend/parser/gram.y
src/include/utils/errcodes.h
src/pl/plpgsql/src/plerrcodes.h

index 950f97151bc3aab325a64b37b143e30e215bd21a..7bcff2c1d90870d8cb53e01e8961507eda7da2b7 100644 (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>
 <entry>CANT CHANGE RUNTIME PARAM</entry>
 </row>
 
+<row>
+<entry><literal>55P03</literal></entry>
+<entry>LOCK NOT AVAILABLE</entry>
+</row>
+
 
 <row>
 <entry>Class 57</entry>
index cab378ec95cb12d6da61a2914eab9d3c2e9c879c..34e01c82a58edab66938d4455e0dd9f26346b0d7 100644 (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
index b8d38cc86baebec63d589df85c604fe52be3bbb2..a5426d089a9045867bcaa469a42426f15a154716 100644 (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);
index 8f1b393d29a084f8e2f5221f37fba14874532969..5a12bf118919d65a08b4e241b4d7a9e6ec014125 100644 (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
index 5ef9461f444fc4219f0e9cf523efbd8289ca18ed..a43f6991da77134e723286db7d3b39fc8a471c29 100644 (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 $
  *
  *-------------------------------------------------------------------------
  */
 #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')
index 5ad86ed07ed1a1ae1f5ff74f80a8666d05f14682..d5893c6ed6de045d3cea01b0c62498db2777e9ad 100644 (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 $
  *
  *-------------------------------------------------------------------------
  */
        "cant_change_runtime_param", ERRCODE_CANT_CHANGE_RUNTIME_PARAM
 },
 
+{
+       "lock_not_available", ERRCODE_LOCK_NOT_AVAILABLE
+},
+
 {
        "operator_intervention", ERRCODE_OPERATOR_INTERVENTION
 },