0001-Created-protocol.h.patch
application/octet-stream
Filename: 0001-Created-protocol.h.patch
Type: application/octet-stream
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch 0001
Subject: Created protocol.h Protocol.h has defines for every protocol message both backend and frontend Instead of using hardcoded values for each protocol message use defines to make code easier to read
| File | + | − |
|---|---|---|
| src/backend/access/common/printsimple.c | 3 | 2 |
| src/backend/access/transam/parallel.c | 8 | 7 |
| src/backend/backup/basebackup_copy.c | 8 | 7 |
| src/backend/commands/async.c | 2 | 1 |
| src/backend/commands/copyfromparse.c | 12 | 11 |
| src/backend/commands/copyto.c | 3 | 2 |
| src/backend/libpq/auth.c | 5 | 4 |
| src/backend/libpq/auth-sasl.c | 2 | 1 |
| src/backend/postmaster/postmaster.c | 2 | 1 |
| src/backend/replication/walsender.c | 10 | 9 |
| src/backend/tcop/dest.c | 3 | 2 |
| src/backend/tcop/fastpath.c | 2 | 1 |
| src/backend/tcop/postgres.c | 39 | 38 |
| src/backend/utils/error/elog.c | 2 | 1 |
| src/backend/utils/misc/guc.c | 2 | 1 |
| src/include/protocol.h | 59 | 0 |
| src/interfaces/libpq/fe-auth.c | 2 | 1 |
| src/interfaces/libpq/fe-connect.c | 8 | 7 |
| src/interfaces/libpq/fe-exec.c | 21 | 20 |
| src/interfaces/libpq/fe-protocol3.c | 29 | 27 |
| src/interfaces/libpq/fe-trace.c | 29 | 28 |
From f12089999ee79ff0aed114b7790eb4df7bee9be9 Mon Sep 17 00:00:00 2001
From: Dave Cramer <davecramer@gmail.com>
Date: Thu, 20 Apr 2023 15:40:03 -0400
Subject: [PATCH] Created protocol.h Protocol.h has defines for every protocol
message both backend and frontend Instead of using hardcoded values for each
protocol message use defines to make code easier to read
---
src/backend/access/common/printsimple.c | 5 +-
src/backend/access/transam/parallel.c | 15 ++---
src/backend/backup/basebackup_copy.c | 15 ++---
src/backend/commands/async.c | 3 +-
src/backend/commands/copyfromparse.c | 23 ++++----
src/backend/commands/copyto.c | 5 +-
src/backend/libpq/auth-sasl.c | 3 +-
src/backend/libpq/auth.c | 9 +--
src/backend/postmaster/postmaster.c | 3 +-
src/backend/replication/walsender.c | 19 +++---
src/backend/tcop/dest.c | 5 +-
src/backend/tcop/fastpath.c | 3 +-
src/backend/tcop/postgres.c | 77 +++++++++++++------------
src/backend/utils/error/elog.c | 3 +-
src/backend/utils/misc/guc.c | 3 +-
src/include/protocol.h | 59 +++++++++++++++++++
src/interfaces/libpq/fe-auth.c | 3 +-
src/interfaces/libpq/fe-connect.c | 15 ++---
src/interfaces/libpq/fe-exec.c | 41 ++++++-------
src/interfaces/libpq/fe-protocol3.c | 56 +++++++++---------
src/interfaces/libpq/fe-trace.c | 57 +++++++++---------
21 files changed, 251 insertions(+), 171 deletions(-)
create mode 100644 src/include/protocol.h
diff --git a/src/backend/access/common/printsimple.c b/src/backend/access/common/printsimple.c
index ef818228ac..70cb2e4c1d 100644
--- a/src/backend/access/common/printsimple.c
+++ b/src/backend/access/common/printsimple.c
@@ -21,6 +21,7 @@
#include "access/printsimple.h"
#include "catalog/pg_type.h"
#include "libpq/pqformat.h"
+#include "protocol.h"
#include "utils/builtins.h"
/*
@@ -32,7 +33,7 @@ printsimple_startup(DestReceiver *self, int operation, TupleDesc tupdesc)
StringInfoData buf;
int i;
- pq_beginmessage(&buf, 'T'); /* RowDescription */
+ pq_beginmessage(&buf, ROW_DESCRIPTION_RESPONSE); /* RowDescription */
pq_sendint16(&buf, tupdesc->natts);
for (i = 0; i < tupdesc->natts; ++i)
@@ -65,7 +66,7 @@ printsimple(TupleTableSlot *slot, DestReceiver *self)
slot_getallattrs(slot);
/* Prepare and send message */
- pq_beginmessage(&buf, 'D');
+ pq_beginmessage(&buf, DATA_ROW_RESPONSE);
pq_sendint16(&buf, tupdesc->natts);
for (i = 0; i < tupdesc->natts; ++i)
diff --git a/src/backend/access/transam/parallel.c b/src/backend/access/transam/parallel.c
index 7133ec0b22..39a927bac3 100644
--- a/src/backend/access/transam/parallel.c
+++ b/src/backend/access/transam/parallel.c
@@ -32,6 +32,7 @@
#include "miscadmin.h"
#include "optimizer/optimizer.h"
#include "pgstat.h"
+#include "protocol.h"
#include "storage/ipc.h"
#include "storage/predicate.h"
#include "storage/sinval.h"
@@ -1126,7 +1127,7 @@ HandleParallelMessage(ParallelContext *pcxt, int i, StringInfo msg)
switch (msgtype)
{
- case 'K': /* BackendKeyData */
+ case BACKEND_KEY_DATA: /* BackendKeyData */
{
int32 pid = pq_getmsgint(msg, 4);
@@ -1136,8 +1137,8 @@ HandleParallelMessage(ParallelContext *pcxt, int i, StringInfo msg)
break;
}
- case 'E': /* ErrorResponse */
- case 'N': /* NoticeResponse */
+ case ERROR_RESPONSE: /* ErrorResponse */
+ case NOTICE_RESPONSE: /* NoticeResponse */
{
ErrorData edata;
ErrorContextCallback *save_error_context_stack;
@@ -1182,7 +1183,7 @@ HandleParallelMessage(ParallelContext *pcxt, int i, StringInfo msg)
break;
}
- case 'A': /* NotifyResponse */
+ case NOTIFY_RESPONSE: /* NotifyResponse */
{
/* Propagate NotifyResponse. */
int32 pid;
@@ -1199,7 +1200,7 @@ HandleParallelMessage(ParallelContext *pcxt, int i, StringInfo msg)
break;
}
- case 'X': /* Terminate, indicating clean exit */
+ case TERMINATE_REQUEST: /* Terminate, indicating clean exit */
{
shm_mq_detach(pcxt->worker[i].error_mqh);
pcxt->worker[i].error_mqh = NULL;
@@ -1354,7 +1355,7 @@ ParallelWorkerMain(Datum main_arg)
* protocol message is defined, but it won't actually be used for anything
* in this case.
*/
- pq_beginmessage(&msgbuf, 'K');
+ pq_beginmessage(&msgbuf, BACKEND_KEY_DATA);
pq_sendint32(&msgbuf, (int32) MyProcPid);
pq_sendint32(&msgbuf, (int32) MyCancelKey);
pq_endmessage(&msgbuf);
@@ -1532,7 +1533,7 @@ ParallelWorkerMain(Datum main_arg)
DetachSession();
/* Report success. */
- pq_putmessage('X', NULL, 0);
+ pq_putmessage(TERMINATE_REQUEST, NULL, 0);
}
/*
diff --git a/src/backend/backup/basebackup_copy.c b/src/backend/backup/basebackup_copy.c
index 73a3f4a970..885855c18c 100644
--- a/src/backend/backup/basebackup_copy.c
+++ b/src/backend/backup/basebackup_copy.c
@@ -32,6 +32,7 @@
#include "executor/executor.h"
#include "libpq/libpq.h"
#include "libpq/pqformat.h"
+#include "protocol.h"
#include "tcop/dest.h"
#include "utils/builtins.h"
#include "utils/timestamp.h"
@@ -169,7 +170,7 @@ bbsink_copystream_begin_archive(bbsink *sink, const char *archive_name)
StringInfoData buf;
ti = list_nth(state->tablespaces, state->tablespace_num);
- pq_beginmessage(&buf, 'd'); /* CopyData */
+ pq_beginmessage(&buf, COPY_DATA); /* CopyData */
pq_sendbyte(&buf, 'n'); /* New archive */
pq_sendstring(&buf, archive_name);
pq_sendstring(&buf, ti->path == NULL ? "" : ti->path);
@@ -220,8 +221,8 @@ bbsink_copystream_archive_contents(bbsink *sink, size_t len)
{
mysink->last_progress_report_time = now;
- pq_beginmessage(&buf, 'd'); /* CopyData */
- pq_sendbyte(&buf, 'p'); /* Progress report */
+ pq_beginmessage(&buf, COPY_DATA); /* CopyData */
+ pq_sendbyte(&buf, COPY_PROGRESS); /* Progress report */
pq_sendint64(&buf, state->bytes_done);
pq_endmessage(&buf);
pq_flush_if_writable();
@@ -246,7 +247,7 @@ bbsink_copystream_end_archive(bbsink *sink)
mysink->bytes_done_at_last_time_check = state->bytes_done;
mysink->last_progress_report_time = GetCurrentTimestamp();
- pq_beginmessage(&buf, 'd'); /* CopyData */
+ pq_beginmessage(&buf, COPY_DATA); /* CopyData */
pq_sendbyte(&buf, 'p'); /* Progress report */
pq_sendint64(&buf, state->bytes_done);
pq_endmessage(&buf);
@@ -261,7 +262,7 @@ bbsink_copystream_begin_manifest(bbsink *sink)
{
StringInfoData buf;
- pq_beginmessage(&buf, 'd'); /* CopyData */
+ pq_beginmessage(&buf, COPY_DATA); /* CopyData */
pq_sendbyte(&buf, 'm'); /* Manifest */
pq_endmessage(&buf);
}
@@ -318,7 +319,7 @@ SendCopyOutResponse(void)
{
StringInfoData buf;
- pq_beginmessage(&buf, 'H');
+ pq_beginmessage(&buf, COPY_OUT_RESPONSE);
pq_sendbyte(&buf, 0); /* overall format */
pq_sendint16(&buf, 0); /* natts */
pq_endmessage(&buf);
@@ -330,7 +331,7 @@ SendCopyOutResponse(void)
static void
SendCopyDone(void)
{
- pq_putemptymessage('c');
+ pq_putemptymessage(COPY_DONE);
}
/*
diff --git a/src/backend/commands/async.c b/src/backend/commands/async.c
index ef909cf4e0..cd703bcf09 100644
--- a/src/backend/commands/async.c
+++ b/src/backend/commands/async.c
@@ -141,6 +141,7 @@
#include "libpq/libpq.h"
#include "libpq/pqformat.h"
#include "miscadmin.h"
+#include "protocol.h"
#include "storage/ipc.h"
#include "storage/lmgr.h"
#include "storage/proc.h"
@@ -2281,7 +2282,7 @@ NotifyMyFrontEnd(const char *channel, const char *payload, int32 srcPid)
{
StringInfoData buf;
- pq_beginmessage(&buf, 'A');
+ pq_beginmessage(&buf, NOTIFY_RESPONSE);
pq_sendint32(&buf, srcPid);
pq_sendstring(&buf, channel);
pq_sendstring(&buf, payload);
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 3853902a16..cd8924b37d 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -72,6 +72,7 @@
#include "miscadmin.h"
#include "pgstat.h"
#include "port/pg_bswap.h"
+#include "protocol.h"
#include "utils/builtins.h"
#include "utils/memutils.h"
#include "utils/rel.h"
@@ -174,7 +175,7 @@ ReceiveCopyBegin(CopyFromState cstate)
int16 format = (cstate->opts.binary ? 1 : 0);
int i;
- pq_beginmessage(&buf, 'G');
+ pq_beginmessage(&buf, COPY_IN_RESPONSE);
pq_sendbyte(&buf, format); /* overall format */
pq_sendint16(&buf, natts);
for (i = 0; i < natts; i++)
@@ -279,13 +280,13 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
/* Validate message type and set packet size limit */
switch (mtype)
{
- case 'd': /* CopyData */
+ case COPY_DATA: /* CopyData */
maxmsglen = PQ_LARGE_MESSAGE_LIMIT;
break;
- case 'c': /* CopyDone */
- case 'f': /* CopyFail */
- case 'H': /* Flush */
- case 'S': /* Sync */
+ case COPY_DONE: /* CopyDone */
+ case COPY_FAIL: /* CopyFail */
+ case FLUSH_DATA_REQUEST: /* Flush */
+ case SYNC_DATA_REQUEST: /* Sync */
maxmsglen = PQ_SMALL_MESSAGE_LIMIT;
break;
default:
@@ -305,20 +306,20 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
/* ... and process it */
switch (mtype)
{
- case 'd': /* CopyData */
+ case COPY_DATA: /* CopyData */
break;
- case 'c': /* CopyDone */
+ case COPY_DONE: /* CopyDone */
/* COPY IN correctly terminated by frontend */
cstate->raw_reached_eof = true;
return bytesread;
- case 'f': /* CopyFail */
+ case COPY_FAIL: /* CopyFail */
ereport(ERROR,
(errcode(ERRCODE_QUERY_CANCELED),
errmsg("COPY from stdin failed: %s",
pq_getmsgstring(cstate->fe_msgbuf))));
break;
- case 'H': /* Flush */
- case 'S': /* Sync */
+ case FLUSH_DATA_REQUEST: /* Flush */
+ case SYNC_DATA_REQUEST: /* Sync */
/*
* Ignore Flush/Sync for the convenience of client
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 9e4b2437a5..4eaa5b9ec3 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -34,6 +34,7 @@
#include "miscadmin.h"
#include "optimizer/optimizer.h"
#include "pgstat.h"
+#include "protocol.h"
#include "rewrite/rewriteHandler.h"
#include "storage/fd.h"
#include "tcop/tcopprot.h"
@@ -144,7 +145,7 @@ SendCopyBegin(CopyToState cstate)
int16 format = (cstate->opts.binary ? 1 : 0);
int i;
- pq_beginmessage(&buf, 'H');
+ pq_beginmessage(&buf, COPY_OUT_RESPONSE);
pq_sendbyte(&buf, format); /* overall format */
pq_sendint16(&buf, natts);
for (i = 0; i < natts; i++)
@@ -159,7 +160,7 @@ SendCopyEnd(CopyToState cstate)
/* Shouldn't have any unsent data */
Assert(cstate->fe_msgbuf->len == 0);
/* Send Copy Done message */
- pq_putemptymessage('c');
+ pq_putemptymessage(COPY_DONE);
}
/*----------
diff --git a/src/backend/libpq/auth-sasl.c b/src/backend/libpq/auth-sasl.c
index 684680897b..9477331e27 100644
--- a/src/backend/libpq/auth-sasl.c
+++ b/src/backend/libpq/auth-sasl.c
@@ -19,6 +19,7 @@
#include "libpq/libpq.h"
#include "libpq/pqformat.h"
#include "libpq/sasl.h"
+#include "protocol.h"
/*
* Maximum accepted size of SASL messages.
@@ -87,7 +88,7 @@ CheckSASLAuth(const pg_be_sasl_mech *mech, Port *port, char *shadow_pass,
{
pq_startmsgread();
mtype = pq_getbyte();
- if (mtype != 'p')
+ if (mtype != GSS_RESPONSE)
{
/* Only log error if client didn't disconnect. */
if (mtype != EOF)
diff --git a/src/backend/libpq/auth.c b/src/backend/libpq/auth.c
index a1a826e37f..19f2ad3f47 100644
--- a/src/backend/libpq/auth.c
+++ b/src/backend/libpq/auth.c
@@ -34,6 +34,7 @@
#include "libpq/scram.h"
#include "miscadmin.h"
#include "port/pg_bswap.h"
+#include "protocol.h"
#include "postmaster/postmaster.h"
#include "replication/walsender.h"
#include "storage/ipc.h"
@@ -665,7 +666,7 @@ sendAuthRequest(Port *port, AuthRequest areq, const char *extradata, int extrale
CHECK_FOR_INTERRUPTS();
- pq_beginmessage(&buf, 'R');
+ pq_beginmessage(&buf, AUTHENTICATION_REQUEST);
pq_sendint32(&buf, (int32) areq);
if (extralen > 0)
pq_sendbytes(&buf, extradata, extralen);
@@ -698,7 +699,7 @@ recv_password_packet(Port *port)
/* Expect 'p' message type */
mtype = pq_getbyte();
- if (mtype != 'p')
+ if (mtype != PASSWORD_RESPONSE)
{
/*
* If the client just disconnects without offering a password, don't
@@ -966,7 +967,7 @@ pg_GSS_recvauth(Port *port)
CHECK_FOR_INTERRUPTS();
mtype = pq_getbyte();
- if (mtype != 'p')
+ if (mtype != GSS_RESPONSE)
{
/* Only log error if client didn't disconnect. */
if (mtype != EOF)
@@ -1237,7 +1238,7 @@ pg_SSPI_recvauth(Port *port)
{
pq_startmsgread();
mtype = pq_getbyte();
- if (mtype != 'p')
+ if (mtype != GSS_RESPONSE)
{
if (sspictx != NULL)
{
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index 4c49393fc5..75becab234 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -114,6 +114,7 @@
#include "postmaster/pgarch.h"
#include "postmaster/postmaster.h"
#include "postmaster/syslogger.h"
+#include "protocol.h"
#include "replication/logicallauncher.h"
#include "replication/walsender.h"
#include "storage/fd.h"
@@ -2385,7 +2386,7 @@ SendNegotiateProtocolVersion(List *unrecognized_protocol_options)
StringInfoData buf;
ListCell *lc;
- pq_beginmessage(&buf, 'v'); /* NegotiateProtocolVersion */
+ pq_beginmessage(&buf, NEGOTIATE_PROTOCOL); /* NegotiateProtocolVersion */
pq_sendint32(&buf, PG_PROTOCOL_LATEST);
pq_sendint32(&buf, list_length(unrecognized_protocol_options));
foreach(lc, unrecognized_protocol_options)
diff --git a/src/backend/replication/walsender.c b/src/backend/replication/walsender.c
index 45b8b3684f..4e43ec3458 100644
--- a/src/backend/replication/walsender.c
+++ b/src/backend/replication/walsender.c
@@ -69,6 +69,7 @@
#include "nodes/replnodes.h"
#include "pgstat.h"
#include "postmaster/interrupt.h"
+#include "protocol.h"
#include "replication/decode.h"
#include "replication/logical.h"
#include "replication/slot.h"
@@ -603,7 +604,7 @@ SendTimeLineHistory(TimeLineHistoryCmd *cmd)
dest->rStartup(dest, CMD_SELECT, tupdesc);
/* Send a DataRow message */
- pq_beginmessage(&buf, 'D');
+ pq_beginmessage(&buf, DATA_ROW_RESPONSE);
pq_sendint16(&buf, 2); /* # of columns */
len = strlen(histfname);
pq_sendint32(&buf, len); /* col1 len */
@@ -801,7 +802,7 @@ StartReplication(StartReplicationCmd *cmd)
WalSndSetState(WALSNDSTATE_CATCHUP);
/* Send a CopyBothResponse message, and start streaming */
- pq_beginmessage(&buf, 'W');
+ pq_beginmessage(&buf, COPY_BOTH_RESPONSE);
pq_sendbyte(&buf, 0);
pq_sendint16(&buf, 0);
pq_endmessage(&buf);
@@ -1295,7 +1296,7 @@ StartLogicalReplication(StartReplicationCmd *cmd)
WalSndSetState(WALSNDSTATE_CATCHUP);
/* Send a CopyBothResponse message, and start streaming */
- pq_beginmessage(&buf, 'W');
+ pq_beginmessage(&buf, COPY_BOTH_RESPONSE);
pq_sendbyte(&buf, 0);
pq_sendint16(&buf, 0);
pq_endmessage(&buf);
@@ -1924,11 +1925,11 @@ ProcessRepliesIfAny(void)
/* Validate message type and set packet size limit */
switch (firstchar)
{
- case 'd':
+ case COPY_DATA:
maxmsglen = PQ_LARGE_MESSAGE_LIMIT;
break;
- case 'c':
- case 'X':
+ case COPY_DONE:
+ case TERMINATE_REQUEST:
maxmsglen = PQ_SMALL_MESSAGE_LIMIT;
break;
default:
@@ -1956,7 +1957,7 @@ ProcessRepliesIfAny(void)
/*
* 'd' means a standby reply wrapped in a CopyData packet.
*/
- case 'd':
+ case COPY_DATA:
ProcessStandbyMessage();
received = true;
break;
@@ -1965,7 +1966,7 @@ ProcessRepliesIfAny(void)
* CopyDone means the standby requested to finish streaming.
* Reply with CopyDone, if we had not sent that already.
*/
- case 'c':
+ case COPY_DONE:
if (!streamingDoneSending)
{
pq_putmessage_noblock('c', NULL, 0);
@@ -1979,7 +1980,7 @@ ProcessRepliesIfAny(void)
/*
* 'X' means that the standby is closing down the socket.
*/
- case 'X':
+ case TERMINATE_REQUEST:
proc_exit(0);
default:
diff --git a/src/backend/tcop/dest.c b/src/backend/tcop/dest.c
index c0406e2ee5..4b5e2e12e5 100644
--- a/src/backend/tcop/dest.c
+++ b/src/backend/tcop/dest.c
@@ -39,6 +39,7 @@
#include "executor/tstoreReceiver.h"
#include "libpq/libpq.h"
#include "libpq/pqformat.h"
+#include "protocol.h"
#include "utils/portal.h"
@@ -220,7 +221,7 @@ NullCommand(CommandDest dest)
case DestRemoteSimple:
/* Tell the FE that we saw an empty query string */
- pq_putemptymessage('I');
+ pq_putemptymessage(EMPTY_QUERY_RESPONSE);
break;
case DestNone:
@@ -258,7 +259,7 @@ ReadyForQuery(CommandDest dest)
{
StringInfoData buf;
- pq_beginmessage(&buf, 'Z');
+ pq_beginmessage(&buf, READY_FOR_QUERY);
pq_sendbyte(&buf, TransactionBlockStatusCode());
pq_endmessage(&buf);
}
diff --git a/src/backend/tcop/fastpath.c b/src/backend/tcop/fastpath.c
index 2f70ebd5fa..83320cd3f7 100644
--- a/src/backend/tcop/fastpath.c
+++ b/src/backend/tcop/fastpath.c
@@ -27,6 +27,7 @@
#include "mb/pg_wchar.h"
#include "miscadmin.h"
#include "port/pg_bswap.h"
+#include "protocol.h"
#include "tcop/fastpath.h"
#include "tcop/tcopprot.h"
#include "utils/acl.h"
@@ -69,7 +70,7 @@ SendFunctionResult(Datum retval, bool isnull, Oid rettype, int16 format)
{
StringInfoData buf;
- pq_beginmessage(&buf, 'V');
+ pq_beginmessage(&buf, FUNCTION_CALL_RESPONSE);
if (isnull)
{
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
index 01b6cc1f7d..0b084a4292 100644
--- a/src/backend/tcop/postgres.c
+++ b/src/backend/tcop/postgres.c
@@ -55,6 +55,7 @@
#include "postmaster/autovacuum.h"
#include "postmaster/interrupt.h"
#include "postmaster/postmaster.h"
+#include "protocol.h"
#include "replication/logicallauncher.h"
#include "replication/logicalworker.h"
#include "replication/slot.h"
@@ -402,37 +403,37 @@ SocketBackend(StringInfo inBuf)
*/
switch (qtype)
{
- case 'Q': /* simple query */
+ case SIMPLE_QUERY: /* simple query */
maxmsglen = PQ_LARGE_MESSAGE_LIMIT;
doing_extended_query_message = false;
break;
- case 'F': /* fastpath function call */
+ case FUNCTION_CALL_REQUEST: /* fastpath function call */
maxmsglen = PQ_LARGE_MESSAGE_LIMIT;
doing_extended_query_message = false;
break;
- case 'X': /* terminate */
+ case TERMINATE_REQUEST: /* terminate */
maxmsglen = PQ_SMALL_MESSAGE_LIMIT;
doing_extended_query_message = false;
ignore_till_sync = false;
break;
- case 'B': /* bind */
- case 'P': /* parse */
+ case BIND_REQUEST : /* bind */
+ case PARSE_REQUEST: /* parse */
maxmsglen = PQ_LARGE_MESSAGE_LIMIT;
doing_extended_query_message = true;
break;
- case 'C': /* close */
- case 'D': /* describe */
- case 'E': /* execute */
- case 'H': /* flush */
+ case CLOSE_REQUEST: /* close */
+ case DESCRIBE_REQUEST: /* describe */
+ case EXECUTE_REQUEST: /* execute */
+ case FLUSH_DATA_REQUEST: /* flush */
maxmsglen = PQ_SMALL_MESSAGE_LIMIT;
doing_extended_query_message = true;
break;
- case 'S': /* sync */
+ case SYNC_DATA_REQUEST: /* sync */
maxmsglen = PQ_SMALL_MESSAGE_LIMIT;
/* stop any active skip-till-Sync */
ignore_till_sync = false;
@@ -440,13 +441,13 @@ SocketBackend(StringInfo inBuf)
doing_extended_query_message = false;
break;
- case 'd': /* copy data */
+ case COPY_DATA: /* copy data */
maxmsglen = PQ_LARGE_MESSAGE_LIMIT;
doing_extended_query_message = false;
break;
- case 'c': /* copy done */
- case 'f': /* copy fail */
+ case COPY_DONE: /* copy done */
+ case COPY_FAIL: /* copy fail */
maxmsglen = PQ_SMALL_MESSAGE_LIMIT;
doing_extended_query_message = false;
break;
@@ -1589,7 +1590,7 @@ exec_parse_message(const char *query_string, /* string to execute */
* Send ParseComplete.
*/
if (whereToSendOutput == DestRemote)
- pq_putemptymessage('1');
+ pq_putemptymessage(PARSE_COMPLETE_RESPONSE);
/*
* Emit duration logging if appropriate.
@@ -2047,7 +2048,7 @@ exec_bind_message(StringInfo input_message)
* Send BindComplete.
*/
if (whereToSendOutput == DestRemote)
- pq_putemptymessage('2');
+ pq_putemptymessage(BIND_COMPLETE_RESPONSE);
/*
* Emit duration logging if appropriate.
@@ -2290,7 +2291,7 @@ exec_execute_message(const char *portal_name, long max_rows)
{
/* Portal run not complete, so send PortalSuspended */
if (whereToSendOutput == DestRemote)
- pq_putemptymessage('s');
+ pq_putemptymessage(PORTAL_SUSPENDED_RESPONSE);
/*
* Set XACT_FLAGS_PIPELINING whenever we suspend an Execute message,
@@ -2683,7 +2684,7 @@ exec_describe_statement_message(const char *stmt_name)
NULL);
}
else
- pq_putemptymessage('n'); /* NoData */
+ pq_putemptymessage(NO_DATA_RESPONSE); /* NoData */
}
/*
@@ -2736,7 +2737,7 @@ exec_describe_portal_message(const char *portal_name)
FetchPortalTargetList(portal),
portal->formats);
else
- pq_putemptymessage('n'); /* NoData */
+ pq_putemptymessage(NO_DATA_RESPONSE); /* NoData */
}
@@ -4239,7 +4240,7 @@ PostgresMain(const char *dbname, const char *username)
{
StringInfoData buf;
- pq_beginmessage(&buf, 'K');
+ pq_beginmessage(&buf, BACKEND_KEY_DATA);
pq_sendint32(&buf, (int32) MyProcPid);
pq_sendint32(&buf, (int32) MyCancelKey);
pq_endmessage(&buf);
@@ -4613,7 +4614,7 @@ PostgresMain(const char *dbname, const char *username)
switch (firstchar)
{
- case 'Q': /* simple query */
+ case SIMPLE_QUERY: /* simple query */
{
const char *query_string;
@@ -4637,7 +4638,7 @@ PostgresMain(const char *dbname, const char *username)
}
break;
- case 'P': /* parse */
+ case PARSE_REQUEST: /* parse */
{
const char *stmt_name;
const char *query_string;
@@ -4667,7 +4668,7 @@ PostgresMain(const char *dbname, const char *username)
}
break;
- case 'B': /* bind */
+ case BIND_REQUEST: /* bind */
forbidden_in_wal_sender(firstchar);
/* Set statement_timestamp() */
@@ -4682,7 +4683,7 @@ PostgresMain(const char *dbname, const char *username)
/* exec_bind_message does valgrind_report_error_query */
break;
- case 'E': /* execute */
+ case EXECUTE_REQUEST: /* execute */
{
const char *portal_name;
int max_rows;
@@ -4702,7 +4703,7 @@ PostgresMain(const char *dbname, const char *username)
}
break;
- case 'F': /* fastpath function call */
+ case FUNCTION_CALL_REQUEST: /* fastpath function call */
forbidden_in_wal_sender(firstchar);
/* Set statement_timestamp() */
@@ -4737,7 +4738,7 @@ PostgresMain(const char *dbname, const char *username)
send_ready_for_query = true;
break;
- case 'C': /* close */
+ case CLOSE_REQUEST: /* close */
{
int close_type;
const char *close_target;
@@ -4750,7 +4751,7 @@ PostgresMain(const char *dbname, const char *username)
switch (close_type)
{
- case 'S':
+ case DESCRIBE_PREPARED:
if (close_target[0] != '\0')
DropPreparedStatement(close_target, false);
else
@@ -4759,7 +4760,7 @@ PostgresMain(const char *dbname, const char *username)
drop_unnamed_stmt();
}
break;
- case 'P':
+ case DESCRIBE_PORTAL:
{
Portal portal;
@@ -4777,13 +4778,13 @@ PostgresMain(const char *dbname, const char *username)
}
if (whereToSendOutput == DestRemote)
- pq_putemptymessage('3'); /* CloseComplete */
+ pq_putemptymessage(CLOSE_COMPLETE_RESPONSE); /* CloseComplete */
valgrind_report_error_query("CLOSE message");
}
break;
- case 'D': /* describe */
+ case DESCRIBE_REQUEST: /* describe */
{
int describe_type;
const char *describe_target;
@@ -4799,10 +4800,10 @@ PostgresMain(const char *dbname, const char *username)
switch (describe_type)
{
- case 'S':
+ case DESCRIBE_PREPARED:
exec_describe_statement_message(describe_target);
break;
- case 'P':
+ case DESCRIBE_PORTAL:
exec_describe_portal_message(describe_target);
break;
default:
@@ -4817,13 +4818,13 @@ PostgresMain(const char *dbname, const char *username)
}
break;
- case 'H': /* flush */
+ case FLUSH_DATA_REQUEST: /* flush */
pq_getmsgend(&input_message);
if (whereToSendOutput == DestRemote)
pq_flush();
break;
- case 'S': /* sync */
+ case SYNC_DATA_REQUEST: /* sync */
pq_getmsgend(&input_message);
finish_xact_command();
valgrind_report_error_query("SYNC message");
@@ -4842,7 +4843,7 @@ PostgresMain(const char *dbname, const char *username)
/* FALLTHROUGH */
- case 'X':
+ case TERMINATE_REQUEST:
/*
* Reset whereToSendOutput to prevent ereport from attempting
@@ -4860,9 +4861,9 @@ PostgresMain(const char *dbname, const char *username)
*/
proc_exit(0);
- case 'd': /* copy data */
- case 'c': /* copy done */
- case 'f': /* copy fail */
+ case COPY_DATA: /* copy data */
+ case COPY_DONE: /* copy done */
+ case COPY_FAIL: /* copy fail */
/*
* Accept but ignore these messages, per protocol spec; we
@@ -4892,7 +4893,7 @@ forbidden_in_wal_sender(char firstchar)
{
if (am_walsender)
{
- if (firstchar == 'F')
+ if (firstchar == FUNCTION_CALL_REQUEST)
ereport(ERROR,
(errcode(ERRCODE_PROTOCOL_VIOLATION),
errmsg("fastpath function calls not supported in a replication connection")));
diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c
index 5898100acb..17c75479b6 100644
--- a/src/backend/utils/error/elog.c
+++ b/src/backend/utils/error/elog.c
@@ -77,6 +77,7 @@
#include "postmaster/bgworker.h"
#include "postmaster/postmaster.h"
#include "postmaster/syslogger.h"
+#include "protocol.h"
#include "storage/ipc.h"
#include "storage/proc.h"
#include "tcop/tcopprot.h"
@@ -3465,7 +3466,7 @@ send_message_to_frontend(ErrorData *edata)
char tbuf[12];
/* 'N' (Notice) is for nonfatal conditions, 'E' is for errors */
- pq_beginmessage(&msgbuf, (edata->elevel < ERROR) ? 'N' : 'E');
+ pq_beginmessage(&msgbuf, (edata->elevel < ERROR) ? NOTICE_RESPONSE : ERROR_RESPONSE);
sev = error_severity(edata->elevel);
pq_sendbyte(&msgbuf, PG_DIAG_SEVERITY);
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index 9dd624b3ae..724b422b44 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -37,6 +37,7 @@
#include "libpq/pqformat.h"
#include "parser/scansup.h"
#include "port/pg_bitutils.h"
+#include "protocol.h"
#include "storage/fd.h"
#include "storage/lwlock.h"
#include "storage/shmem.h"
@@ -2592,7 +2593,7 @@ ReportGUCOption(struct config_generic *record)
{
StringInfoData msgbuf;
- pq_beginmessage(&msgbuf, 'S');
+ pq_beginmessage(&msgbuf, PARAMETER_STATUS_RESPONSE);
pq_sendstring(&msgbuf, record->name);
pq_sendstring(&msgbuf, val);
pq_endmessage(&msgbuf);
diff --git a/src/include/protocol.h b/src/include/protocol.h
new file mode 100644
index 0000000000..ffdaf91414
--- /dev/null
+++ b/src/include/protocol.h
@@ -0,0 +1,59 @@
+/*-------------------------------------------------------------------------
+ *
+ * protocol.h
+ * Exports from postmaster/postmaster.c.
+ *
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
+ *
+ * src/include/protocol.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef _PROTOCOL_H
+#define _PROTOCOL_H
+
+#define BIND_REQUEST 'B'
+#define CLOSE_REQUEST 'C'
+#define DESCRIBE_REQUEST 'D'
+#define EXECUTE_REQUEST 'E'
+#define FUNCTION_CALL_REQUEST 'F'
+#define FLUSH_DATA_REQUEST 'H'
+#define BACKEND_KEY_DATA 'K'
+#define PARSE_REQUEST 'P'
+#define AUTHENTICATION_REQUEST 'R'
+#define SYNC_DATA_REQUEST 'S'
+#define SIMPLE_QUERY 'Q'
+#define TERMINATE_REQUEST 'X'
+#define COPY_FAIL 'f'
+#define COPY_DONE 'c'
+#define COPY_DATA 'd'
+#define COPY_PROGRESS 'p'
+#define DESCRIBE_PREPARED 'S'
+#define DESCRIBE_PORTAL 'P'
+
+/*
+Responses
+*/
+#define PARSE_COMPLETE_RESPONSE '1'
+#define BIND_COMPLETE_RESPONSE '2'
+#define CLOSE_COMPLETE_RESPONSE '3'
+#define NOTIFY_RESPONSE 'A'
+#define COMMAND_COMPLETE 'C'
+#define DATA_ROW_RESPONSE 'D'
+#define ERROR_RESPONSE 'E'
+#define COPY_IN_RESPONSE 'G'
+#define COPY_OUT_RESPONSE 'H'
+#define EMPTY_QUERY_RESPONSE 'I'
+#define NOTICE_RESPONSE 'N'
+#define FUNCTION_CALL_RESPONSE 'V'
+#define PARAMETER_STATUS_RESPONSE 'S'
+#define ROW_DESCRIPTION_RESPONSE 'T'
+#define COPY_BOTH_RESPONSE 'W'
+#define READY_FOR_QUERY 'Z'
+#define NO_DATA_RESPONSE 'n'
+#define PASSWORD_RESPONSE 'p'
+#define GSS_RESPONSE 'p'
+#define PORTAL_SUSPENDED_RESPONSE 's'
+#define PARAMETER_DESCRIPTION_RESPONSE 't'
+#define NEGOTIATE_PROTOCOL 'v'
+#endif
\ No newline at end of file
diff --git a/src/interfaces/libpq/fe-auth.c b/src/interfaces/libpq/fe-auth.c
index fe2634230a..b1158946df 100644
--- a/src/interfaces/libpq/fe-auth.c
+++ b/src/interfaces/libpq/fe-auth.c
@@ -42,6 +42,7 @@
#include "fe-auth.h"
#include "fe-auth-sasl.h"
#include "libpq-fe.h"
+#include "protocol.h"
#ifdef ENABLE_GSS
/*
@@ -585,7 +586,7 @@ pg_SASL_init(PGconn *conn, int payloadlen)
/*
* Build a SASLInitialResponse message, and send it.
*/
- if (pqPutMsgStart('p', conn))
+ if (pqPutMsgStart(GSS_RESPONSE, conn))
goto error;
if (pqPuts(selected_mechanism, conn))
goto error;
diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c
index fcd3d0d9a3..035a5aa407 100644
--- a/src/interfaces/libpq/fe-connect.c
+++ b/src/interfaces/libpq/fe-connect.c
@@ -32,6 +32,7 @@
#include "mb/pg_wchar.h"
#include "pg_config_paths.h"
#include "port/pg_bswap.h"
+#include "protocol.h"
#ifdef WIN32
#include "win32.h"
@@ -3593,7 +3594,7 @@ keep_going: /* We will come back to here until there is
* Anything else probably means it's not Postgres on the other
* end at all.
*/
- if (!(beresp == 'R' || beresp == 'v' || beresp == 'E'))
+ if (!(beresp == AUTHENTICATION_REQUEST || beresp == NEGOTIATE_PROTOCOL || beresp == ERROR_RESPONSE))
{
libpq_append_conn_error(conn, "expected authentication request from server, but received %c",
beresp);
@@ -3620,19 +3621,19 @@ keep_going: /* We will come back to here until there is
* version 14, the server also used the old protocol for
* errors that happened before processing the startup packet.)
*/
- if (beresp == 'R' && (msgLength < 8 || msgLength > 2000))
+ if (beresp == AUTHENTICATION_REQUEST && (msgLength < 8 || msgLength > 2000))
{
libpq_append_conn_error(conn, "received invalid authentication request");
goto error_return;
}
- if (beresp == 'v' && (msgLength < 8 || msgLength > 2000))
+ if (beresp == NEGOTIATE_PROTOCOL && (msgLength < 8 || msgLength > 2000))
{
libpq_append_conn_error(conn, "received invalid protocol negotiation message");
goto error_return;
}
#define MAX_ERRLEN 30000
- if (beresp == 'E' && (msgLength < 8 || msgLength > MAX_ERRLEN))
+ if (beresp == ERROR_RESPONSE && (msgLength < 8 || msgLength > MAX_ERRLEN))
{
/* Handle error from a pre-3.0 server */
conn->inCursor = conn->inStart + 1; /* reread data */
@@ -3695,7 +3696,7 @@ keep_going: /* We will come back to here until there is
}
/* Handle errors. */
- if (beresp == 'E')
+ if (beresp == ERROR_RESPONSE)
{
if (pqGetErrorNotice3(conn, true))
{
@@ -3772,7 +3773,7 @@ keep_going: /* We will come back to here until there is
goto error_return;
}
- else if (beresp == 'v')
+ else if (beresp == NEGOTIATE_PROTOCOL)
{
if (pqGetNegotiateProtocolVersion3(conn))
{
@@ -4542,7 +4543,7 @@ sendTerminateConn(PGconn *conn)
* Try to send "close connection" message to backend. Ignore any
* error.
*/
- pqPutMsgStart('X', conn);
+ pqPutMsgStart(TERMINATE_REQUEST, conn);
pqPutMsgEnd(conn);
(void) pqFlush(conn);
}
diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c
index a16bbf32ef..850043dc91 100644
--- a/src/interfaces/libpq/fe-exec.c
+++ b/src/interfaces/libpq/fe-exec.c
@@ -27,6 +27,7 @@
#include "libpq-fe.h"
#include "libpq-int.h"
#include "mb/pg_wchar.h"
+#include "protocol.h"
/* keep this in same order as ExecStatusType in libpq-fe.h */
char *const pgresStatus[] = {
@@ -1458,7 +1459,7 @@ PQsendQueryInternal(PGconn *conn, const char *query, bool newQuery)
/* Send the query message(s) */
/* construct the outgoing Query message */
- if (pqPutMsgStart('Q', conn) < 0 ||
+ if (pqPutMsgStart(SIMPLE_QUERY, conn) < 0 ||
pqPuts(query, conn) < 0 ||
pqPutMsgEnd(conn) < 0)
{
@@ -1571,7 +1572,7 @@ PQsendPrepare(PGconn *conn,
return 0; /* error msg already set */
/* construct the Parse message */
- if (pqPutMsgStart('P', conn) < 0 ||
+ if (pqPutMsgStart(PARSE_REQUEST, conn) < 0 ||
pqPuts(stmtName, conn) < 0 ||
pqPuts(query, conn) < 0)
goto sendFailed;
@@ -1599,7 +1600,7 @@ PQsendPrepare(PGconn *conn,
/* Add a Sync, unless in pipeline mode. */
if (conn->pipelineStatus == PQ_PIPELINE_OFF)
{
- if (pqPutMsgStart('S', conn) < 0 ||
+ if (pqPutMsgStart(SYNC_DATA_REQUEST, conn) < 0 ||
pqPutMsgEnd(conn) < 0)
goto sendFailed;
}
@@ -1784,7 +1785,7 @@ PQsendQueryGuts(PGconn *conn,
if (command)
{
/* construct the Parse message */
- if (pqPutMsgStart('P', conn) < 0 ||
+ if (pqPutMsgStart(PARSE_REQUEST, conn) < 0 ||
pqPuts(stmtName, conn) < 0 ||
pqPuts(command, conn) < 0)
goto sendFailed;
@@ -1808,7 +1809,7 @@ PQsendQueryGuts(PGconn *conn,
}
/* Construct the Bind message */
- if (pqPutMsgStart('B', conn) < 0 ||
+ if (pqPutMsgStart(BIND_REQUEST, conn) < 0 ||
pqPuts("", conn) < 0 ||
pqPuts(stmtName, conn) < 0)
goto sendFailed;
@@ -1874,14 +1875,14 @@ PQsendQueryGuts(PGconn *conn,
goto sendFailed;
/* construct the Describe Portal message */
- if (pqPutMsgStart('D', conn) < 0 ||
+ if (pqPutMsgStart(DESCRIBE_PORTAL, conn) < 0 ||
pqPutc('P', conn) < 0 ||
pqPuts("", conn) < 0 ||
pqPutMsgEnd(conn) < 0)
goto sendFailed;
/* construct the Execute message */
- if (pqPutMsgStart('E', conn) < 0 ||
+ if (pqPutMsgStart(EXECUTE_REQUEST, conn) < 0 ||
pqPuts("", conn) < 0 ||
pqPutInt(0, 4, conn) < 0 ||
pqPutMsgEnd(conn) < 0)
@@ -1890,7 +1891,7 @@ PQsendQueryGuts(PGconn *conn,
/* construct the Sync message if not in pipeline mode */
if (conn->pipelineStatus == PQ_PIPELINE_OFF)
{
- if (pqPutMsgStart('S', conn) < 0 ||
+ if (pqPutMsgStart(SYNC_DATA_REQUEST, conn) < 0 ||
pqPutMsgEnd(conn) < 0)
goto sendFailed;
}
@@ -2423,7 +2424,7 @@ PQdescribePrepared(PGconn *conn, const char *stmt)
{
if (!PQexecStart(conn))
return NULL;
- if (!PQsendDescribe(conn, 'S', stmt))
+ if (!PQsendDescribe(conn, DESCRIBE_PREPARED, stmt))
return NULL;
return PQexecFinish(conn);
}
@@ -2442,7 +2443,7 @@ PQdescribePortal(PGconn *conn, const char *portal)
{
if (!PQexecStart(conn))
return NULL;
- if (!PQsendDescribe(conn, 'P', portal))
+ if (!PQsendDescribe(conn, DESCRIBE_PORTAL, portal))
return NULL;
return PQexecFinish(conn);
}
@@ -2457,7 +2458,7 @@ PQdescribePortal(PGconn *conn, const char *portal)
int
PQsendDescribePrepared(PGconn *conn, const char *stmt)
{
- return PQsendDescribe(conn, 'S', stmt);
+ return PQsendDescribe(conn, DESCRIBE_PREPARED, stmt);
}
/*
@@ -2470,7 +2471,7 @@ PQsendDescribePrepared(PGconn *conn, const char *stmt)
int
PQsendDescribePortal(PGconn *conn, const char *portal)
{
- return PQsendDescribe(conn, 'P', portal);
+ return PQsendDescribe(conn, DESCRIBE_PORTAL, portal);
}
/*
@@ -2499,7 +2500,7 @@ PQsendDescribe(PGconn *conn, char desc_type, const char *desc_target)
return 0; /* error msg already set */
/* construct the Describe message */
- if (pqPutMsgStart('D', conn) < 0 ||
+ if (pqPutMsgStart(DESCRIBE_REQUEST, conn) < 0 ||
pqPutc(desc_type, conn) < 0 ||
pqPuts(desc_target, conn) < 0 ||
pqPutMsgEnd(conn) < 0)
@@ -2508,7 +2509,7 @@ PQsendDescribe(PGconn *conn, char desc_type, const char *desc_target)
/* construct the Sync message */
if (conn->pipelineStatus == PQ_PIPELINE_OFF)
{
- if (pqPutMsgStart('S', conn) < 0 ||
+ if (pqPutMsgStart(SYNC_DATA_REQUEST, conn) < 0 ||
pqPutMsgEnd(conn) < 0)
goto sendFailed;
}
@@ -2615,7 +2616,7 @@ PQputCopyData(PGconn *conn, const char *buffer, int nbytes)
return pqIsnonblocking(conn) ? 0 : -1;
}
/* Send the data (too simple to delegate to fe-protocol files) */
- if (pqPutMsgStart('d', conn) < 0 ||
+ if (pqPutMsgStart(COPY_DATA, conn) < 0 ||
pqPutnchar(buffer, nbytes, conn) < 0 ||
pqPutMsgEnd(conn) < 0)
return -1;
@@ -2650,7 +2651,7 @@ PQputCopyEnd(PGconn *conn, const char *errormsg)
if (errormsg)
{
/* Send COPY FAIL */
- if (pqPutMsgStart('f', conn) < 0 ||
+ if (pqPutMsgStart(COPY_FAIL, conn) < 0 ||
pqPuts(errormsg, conn) < 0 ||
pqPutMsgEnd(conn) < 0)
return -1;
@@ -2658,7 +2659,7 @@ PQputCopyEnd(PGconn *conn, const char *errormsg)
else
{
/* Send COPY DONE */
- if (pqPutMsgStart('c', conn) < 0 ||
+ if (pqPutMsgStart(COPY_DONE, conn) < 0 ||
pqPutMsgEnd(conn) < 0)
return -1;
}
@@ -2670,7 +2671,7 @@ PQputCopyEnd(PGconn *conn, const char *errormsg)
if (conn->cmd_queue_head &&
conn->cmd_queue_head->queryclass != PGQUERY_SIMPLE)
{
- if (pqPutMsgStart('S', conn) < 0 ||
+ if (pqPutMsgStart(SYNC_DATA_REQUEST, conn) < 0 ||
pqPutMsgEnd(conn) < 0)
return -1;
}
@@ -3181,7 +3182,7 @@ PQpipelineSync(PGconn *conn)
entry->query = NULL;
/* construct the Sync message */
- if (pqPutMsgStart('S', conn) < 0 ||
+ if (pqPutMsgStart(SYNC_DATA_REQUEST, conn) < 0 ||
pqPutMsgEnd(conn) < 0)
goto sendFailed;
@@ -3229,7 +3230,7 @@ PQsendFlushRequest(PGconn *conn)
return 0;
}
- if (pqPutMsgStart('H', conn) < 0 ||
+ if (pqPutMsgStart(FLUSH_DATA_REQUEST, conn) < 0 ||
pqPutMsgEnd(conn) < 0)
{
return 0;
diff --git a/src/interfaces/libpq/fe-protocol3.c b/src/interfaces/libpq/fe-protocol3.c
index 8ab6a88416..2e6c6c9132 100644
--- a/src/interfaces/libpq/fe-protocol3.c
+++ b/src/interfaces/libpq/fe-protocol3.c
@@ -28,14 +28,16 @@
#include "libpq-int.h"
#include "mb/pg_wchar.h"
#include "port/pg_bswap.h"
+#include "protocol.h"
/*
* This macro lists the backend message types that could be "long" (more
* than a couple of kilobytes).
*/
#define VALID_LONG_MESSAGE_TYPE(id) \
- ((id) == 'T' || (id) == 'D' || (id) == 'd' || (id) == 'V' || \
- (id) == 'E' || (id) == 'N' || (id) == 'A')
+ ((id) == ROW_DESCRIPTION_RESPONSE || (id) == DATA_ROW_RESPONSE || (id) == COPY_DATA || \
+ (id) == FUNCTION_CALL_RESPONSE || (id) == ERROR_RESPONSE || (id) == NOTICE_RESPONSE || \
+ (id) == NOTIFY_RESPONSE)
static void handleSyncLoss(PGconn *conn, char id, int msgLength);
@@ -140,12 +142,12 @@ pqParseInput3(PGconn *conn)
* from config file due to SIGHUP), but otherwise we hold off until
* BUSY state.
*/
- if (id == 'A')
+ if (id == NOTIFY_RESPONSE)
{
if (getNotify(conn))
return;
}
- else if (id == 'N')
+ else if (id == NOTICE_RESPONSE)
{
if (pqGetErrorNotice3(conn, false))
return;
@@ -165,12 +167,12 @@ pqParseInput3(PGconn *conn)
* it is about to close the connection, so we don't want to just
* discard it...)
*/
- if (id == 'E')
+ if (id == ERROR_RESPONSE)
{
if (pqGetErrorNotice3(conn, false /* treat as notice */ ))
return;
}
- else if (id == 'S')
+ else if (id == PARAMETER_STATUS_RESPONSE)
{
if (getParameterStatus(conn))
return;
@@ -192,7 +194,7 @@ pqParseInput3(PGconn *conn)
*/
switch (id)
{
- case 'C': /* command complete */
+ case COMMAND_COMPLETE: /* command complete */
if (pqGets(&conn->workBuffer, conn))
return;
if (!pgHavePendingResult(conn))
@@ -210,12 +212,12 @@ pqParseInput3(PGconn *conn)
CMDSTATUS_LEN);
conn->asyncStatus = PGASYNC_READY;
break;
- case 'E': /* error return */
+ case ERROR_RESPONSE: /* error return */
if (pqGetErrorNotice3(conn, true))
return;
conn->asyncStatus = PGASYNC_READY;
break;
- case 'Z': /* sync response, backend is ready for new
+ case READY_FOR_QUERY: /* sync response, backend is ready for new
* query */
if (getReadyForQuery(conn))
return;
@@ -246,7 +248,7 @@ pqParseInput3(PGconn *conn)
conn->asyncStatus = PGASYNC_IDLE;
}
break;
- case 'I': /* empty query */
+ case EMPTY_QUERY_RESPONSE: /* empty query */
if (!pgHavePendingResult(conn))
{
conn->result = PQmakeEmptyPGresult(conn,
@@ -259,7 +261,7 @@ pqParseInput3(PGconn *conn)
}
conn->asyncStatus = PGASYNC_READY;
break;
- case '1': /* Parse Complete */
+ case PARSE_COMPLETE_RESPONSE: /* Parse Complete */
/* If we're doing PQprepare, we're done; else ignore */
if (conn->cmd_queue_head &&
conn->cmd_queue_head->queryclass == PGQUERY_PREPARE)
@@ -277,15 +279,15 @@ pqParseInput3(PGconn *conn)
conn->asyncStatus = PGASYNC_READY;
}
break;
- case '2': /* Bind Complete */
- case '3': /* Close Complete */
+ case BIND_COMPLETE_RESPONSE: /* Bind Complete */
+ case CLOSE_COMPLETE_RESPONSE: /* Close Complete */
/* Nothing to do for these message types */
break;
- case 'S': /* parameter status */
+ case PARAMETER_STATUS_RESPONSE: /* parameter status */
if (getParameterStatus(conn))
return;
break;
- case 'K': /* secret key data from the backend */
+ case BACKEND_KEY_DATA: /* secret key data from the backend */
/*
* This is expected only during backend startup, but it's
@@ -297,7 +299,7 @@ pqParseInput3(PGconn *conn)
if (pqGetInt(&(conn->be_key), 4, conn))
return;
break;
- case 'T': /* Row Description */
+ case ROW_DESCRIPTION_RESPONSE: /* Row Description */
if (conn->error_result ||
(conn->result != NULL &&
conn->result->resultStatus == PGRES_FATAL_ERROR))
@@ -329,7 +331,7 @@ pqParseInput3(PGconn *conn)
return;
}
break;
- case 'n': /* No Data */
+ case NO_DATA_RESPONSE: /* No Data */
/*
* NoData indicates that we will not be seeing a
@@ -357,11 +359,11 @@ pqParseInput3(PGconn *conn)
conn->asyncStatus = PGASYNC_READY;
}
break;
- case 't': /* Parameter Description */
+ case PARAMETER_DESCRIPTION_RESPONSE: /* Parameter Description */
if (getParamDescriptions(conn, msgLength))
return;
break;
- case 'D': /* Data Row */
+ case DATA_ROW_RESPONSE: /* Data Row */
if (conn->result != NULL &&
conn->result->resultStatus == PGRES_TUPLES_OK)
{
@@ -388,24 +390,24 @@ pqParseInput3(PGconn *conn)
conn->inCursor += msgLength;
}
break;
- case 'G': /* Start Copy In */
+ case COPY_IN_RESPONSE: /* Start Copy In */
if (getCopyStart(conn, PGRES_COPY_IN))
return;
conn->asyncStatus = PGASYNC_COPY_IN;
break;
- case 'H': /* Start Copy Out */
+ case COPY_OUT_RESPONSE: /* Start Copy Out */
if (getCopyStart(conn, PGRES_COPY_OUT))
return;
conn->asyncStatus = PGASYNC_COPY_OUT;
conn->copy_already_done = 0;
break;
- case 'W': /* Start Copy Both */
+ case COPY_BOTH_RESPONSE: /* Start Copy Both */
if (getCopyStart(conn, PGRES_COPY_BOTH))
return;
conn->asyncStatus = PGASYNC_COPY_BOTH;
conn->copy_already_done = 0;
break;
- case 'd': /* Copy Data */
+ case COPY_DATA: /* Copy Data */
/*
* If we see Copy Data, just silently drop it. This would
@@ -414,7 +416,7 @@ pqParseInput3(PGconn *conn)
*/
conn->inCursor += msgLength;
break;
- case 'c': /* Copy Done */
+ case COPY_DONE: /* Copy Done */
/*
* If we see Copy Done, just silently drop it. This is
@@ -1911,7 +1913,7 @@ pqEndcopy3(PGconn *conn)
if (conn->asyncStatus == PGASYNC_COPY_IN ||
conn->asyncStatus == PGASYNC_COPY_BOTH)
{
- if (pqPutMsgStart('c', conn) < 0 ||
+ if (pqPutMsgStart(COPY_DONE, conn) < 0 ||
pqPutMsgEnd(conn) < 0)
return 1;
@@ -1922,7 +1924,7 @@ pqEndcopy3(PGconn *conn)
if (conn->cmd_queue_head &&
conn->cmd_queue_head->queryclass != PGQUERY_SIMPLE)
{
- if (pqPutMsgStart('S', conn) < 0 ||
+ if (pqPutMsgStart(SYNC_DATA_REQUEST, conn) < 0 ||
pqPutMsgEnd(conn) < 0)
return 1;
}
@@ -2005,7 +2007,7 @@ pqFunctionCall3(PGconn *conn, Oid fnid,
/* PQfn already validated connection state */
- if (pqPutMsgStart('F', conn) < 0 || /* function call msg */
+ if (pqPutMsgStart(FUNCTION_CALL_REQUEST, conn) < 0 || /* function call msg */
pqPutInt(fnid, 4, conn) < 0 || /* function id */
pqPutInt(1, 2, conn) < 0 || /* # of format codes */
pqPutInt(1, 2, conn) < 0 || /* format code: BINARY */
diff --git a/src/interfaces/libpq/fe-trace.c b/src/interfaces/libpq/fe-trace.c
index 402784f40e..a39228816d 100644
--- a/src/interfaces/libpq/fe-trace.c
+++ b/src/interfaces/libpq/fe-trace.c
@@ -28,6 +28,7 @@
#include "libpq-fe.h"
#include "libpq-int.h"
#include "port/pg_bswap.h"
+#include "protocol.h"
/* Enable tracing */
@@ -562,72 +563,72 @@ pqTraceOutputMessage(PGconn *conn, const char *message, bool toServer)
switch (id)
{
- case '1':
+ case PARSE_COMPLETE_RESPONSE:
fprintf(conn->Pfdebug, "ParseComplete");
/* No message content */
break;
- case '2':
+ case BIND_COMPLETE_RESPONSE:
fprintf(conn->Pfdebug, "BindComplete");
/* No message content */
break;
- case '3':
+ case CLOSE_COMPLETE_RESPONSE:
fprintf(conn->Pfdebug, "CloseComplete");
/* No message content */
break;
- case 'A': /* Notification Response */
+ case NOTIFY_RESPONSE: /* Notification Response */
pqTraceOutputA(conn->Pfdebug, message, &logCursor, regress);
break;
- case 'B': /* Bind */
+ case BIND_REQUEST: /* Bind */
pqTraceOutputB(conn->Pfdebug, message, &logCursor);
break;
- case 'c':
+ case COPY_DONE:
fprintf(conn->Pfdebug, "CopyDone");
/* No message content */
break;
- case 'C': /* Close(F) or Command Complete(B) */
+ case COMMAND_COMPLETE: /* Close(F) or Command Complete(B) */
pqTraceOutputC(conn->Pfdebug, toServer, message, &logCursor);
break;
- case 'd': /* Copy Data */
+ case COPY_DATA: /* Copy Data */
/* Drop COPY data to reduce the overhead of logging. */
break;
- case 'D': /* Describe(F) or Data Row(B) */
+ case DESCRIBE_REQUEST: /* Describe(F) or Data Row(B) */
pqTraceOutputD(conn->Pfdebug, toServer, message, &logCursor);
break;
- case 'E': /* Execute(F) or Error Response(B) */
+ case EXECUTE_REQUEST: /* Execute(F) or Error Response(B) */
pqTraceOutputE(conn->Pfdebug, toServer, message, &logCursor,
regress);
break;
- case 'f': /* Copy Fail */
+ case COPY_FAIL: /* Copy Fail */
pqTraceOutputf(conn->Pfdebug, message, &logCursor);
break;
- case 'F': /* Function Call */
+ case FUNCTION_CALL_REQUEST: /* Function Call */
pqTraceOutputF(conn->Pfdebug, message, &logCursor, regress);
break;
- case 'G': /* Start Copy In */
+ case COPY_IN_RESPONSE: /* Start Copy In */
pqTraceOutputG(conn->Pfdebug, message, &logCursor);
break;
- case 'H': /* Flush(F) or Start Copy Out(B) */
+ case FLUSH_DATA_REQUEST: /* Flush(F) or Start Copy Out(B) */
if (!toServer)
pqTraceOutputH(conn->Pfdebug, message, &logCursor);
else
fprintf(conn->Pfdebug, "Flush"); /* no message content */
break;
- case 'I':
+ case EMPTY_QUERY_RESPONSE:
fprintf(conn->Pfdebug, "EmptyQueryResponse");
/* No message content */
break;
- case 'K': /* secret key data from the backend */
+ case BACKEND_KEY_DATA: /* secret key data from the backend */
pqTraceOutputK(conn->Pfdebug, message, &logCursor, regress);
break;
- case 'n':
+ case NO_DATA_RESPONSE:
fprintf(conn->Pfdebug, "NoData");
/* No message content */
break;
- case 'N':
+ case NOTICE_RESPONSE:
pqTraceOutputNR(conn->Pfdebug, "NoticeResponse", message,
&logCursor, regress);
break;
- case 'P': /* Parse */
+ case PARSE_REQUEST: /* Parse */
pqTraceOutputP(conn->Pfdebug, message, &logCursor, regress);
break;
case 'Q': /* Query */
@@ -636,36 +637,36 @@ pqTraceOutputMessage(PGconn *conn, const char *message, bool toServer)
case 'R': /* Authentication */
pqTraceOutputR(conn->Pfdebug, message, &logCursor);
break;
- case 's':
+ case PORTAL_SUSPENDED_RESPONSE:
fprintf(conn->Pfdebug, "PortalSuspended");
/* No message content */
break;
- case 'S': /* Parameter Status(B) or Sync(F) */
+ case SYNC_DATA_REQUEST: /* Parameter Status(B) or Sync(F) */
if (!toServer)
pqTraceOutputS(conn->Pfdebug, message, &logCursor);
else
fprintf(conn->Pfdebug, "Sync"); /* no message content */
break;
- case 't': /* Parameter Description */
+ case PARAMETER_DESCRIPTION_RESPONSE: /* Parameter Description */
pqTraceOutputt(conn->Pfdebug, message, &logCursor, regress);
break;
- case 'T': /* Row Description */
+ case ROW_DESCRIPTION_RESPONSE: /* Row Description */
pqTraceOutputT(conn->Pfdebug, message, &logCursor, regress);
break;
- case 'v': /* Negotiate Protocol Version */
+ case NEGOTIATE_PROTOCOL: /* Negotiate Protocol Version */
pqTraceOutputv(conn->Pfdebug, message, &logCursor);
break;
- case 'V': /* Function Call response */
+ case FUNCTION_CALL_RESPONSE: /* Function Call response */
pqTraceOutputV(conn->Pfdebug, message, &logCursor);
break;
- case 'W': /* Start Copy Both */
+ case COPY_BOTH_RESPONSE: /* Start Copy Both */
pqTraceOutputW(conn->Pfdebug, message, &logCursor, length);
break;
- case 'X':
+ case TERMINATE_REQUEST:
fprintf(conn->Pfdebug, "Terminate");
/* No message content */
break;
- case 'Z': /* Ready For Query */
+ case READY_FOR_QUERY: /* Ready For Query */
pqTraceOutputZ(conn->Pfdebug, message, &logCursor);
break;
default:
--
2.37.1 (Apple Git-137.1)