Add macro PGWARNING, and make PGERROR available on all platforms.
authorTom Lane
Sun, 11 Apr 2021 17:22:56 +0000 (13:22 -0400)
committerTom Lane
Sun, 11 Apr 2021 17:22:56 +0000 (13:22 -0400)
We'd previously noted the need for coping with Windows headers
that provide some other definition of macro "ERROR" than elog.h
does.  It turns out that R also wants to define ERROR, and
WARNING too.  PL/R has been working around this in a hacky way
that broke when we recently changed the numeric value of ERROR.
To let them have a more future-proof solution, provide an
alternate macro PGWARNING for WARNING, and make PGERROR visible
always, not only when #ifdef WIN32.

Discussion: https://postgr.es/m/CADK3HHK6iMChd1yoOqssxBn5Z14Zar8Ztr3G-N_fuG7F8YTP3w@mail.gmail.com

src/include/utils/elog.h

index 9acb57a27b542ec76a0755cd3285c102bac6c329..f53607e12eb81de91cd4e933a210dddf7588a980 100644 (file)
 #define WARNING        19          /* Warnings.  NOTICE is for expected messages
                                 * like implicit sequence creation by SERIAL.
                                 * WARNING is for unexpected messages. */
+#define PGWARNING  19          /* Must equal WARNING; see NOTE below. */
 #define WARNING_CLIENT_ONLY    20  /* Warnings to be sent to client as usual, but
                                 * never to the server log. */
 #define ERROR      21          /* user error - abort transaction; return to
                                 * known state */
-/* Save ERROR value in PGERROR so it can be restored when Win32 includes
- * modify it.  We have to use a constant rather than ERROR because macros
- * are expanded only when referenced outside macros.
- */
-#ifdef WIN32
-#define PGERROR        21
-#endif
+#define PGERROR        21          /* Must equal ERROR; see NOTE below. */
 #define FATAL      22          /* fatal error - abort process */
 #define PANIC      23          /* take down the other backends with me */
 
+/*
+ * NOTE: the alternate names PGWARNING and PGERROR are useful for dealing
+ * with third-party headers that make other definitions of WARNING and/or
+ * ERROR.  One can, for example, re-define ERROR as PGERROR after including
+ * such a header.
+ */
+
 
 /* macros for representing SQLSTATE strings compactly */
 #define PGSIXBIT(ch)   (((ch) - '0') & 0x3F)