diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2003-05-08 18:16:37 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2003-05-08 18:16:37 +0000 |
commit | c0a8c3ac13f84602a46ba25b9a2fd5427514f61a (patch) | |
tree | f321719251471a05a768117f35010d28076f938a /src/backend/commands/copy.c | |
parent | 5e7a5c9511b65d483639dd3f7dfab7b9e92c3433 (diff) | |
download | postgresql-c0a8c3ac13f84602a46ba25b9a2fd5427514f61a.tar.gz postgresql-c0a8c3ac13f84602a46ba25b9a2fd5427514f61a.zip |
Update 3.0 protocol support to match recent agreements about how to
handle multiple 'formats' for data I/O. Restructure CommandDest and
DestReceiver stuff one more time (it's finally starting to look a bit
clean though). Code now matches latest 3.0 protocol document as far
as message formats go --- but there is no support for binary I/O yet.
Diffstat (limited to 'src/backend/commands/copy.c')
-rw-r--r-- | src/backend/commands/copy.c | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c index ec6e771aedc..93d4b8406e8 100644 --- a/src/backend/commands/copy.c +++ b/src/backend/commands/copy.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.197 2003/04/25 02:28:22 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.198 2003/05/08 18:16:36 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -125,8 +125,8 @@ static int server_encoding; /* * Internal communications functions */ -static void SendCopyBegin(bool binary); -static void ReceiveCopyBegin(bool binary); +static void SendCopyBegin(bool binary, int natts); +static void ReceiveCopyBegin(bool binary, int natts); static void SendCopyEnd(bool binary); static void CopySendData(void *databuf, int datasize); static void CopySendString(const char *str); @@ -143,15 +143,20 @@ static void CopyDonePeek(int c, bool pickup); * in past protocol redesigns. */ static void -SendCopyBegin(bool binary) +SendCopyBegin(bool binary, int natts) { if (PG_PROTOCOL_MAJOR(FrontendProtocol) >= 3) { /* new way */ StringInfoData buf; + int16 format = (binary ? 1 : 0); + int i; pq_beginmessage(&buf, 'H'); - pq_sendbyte(&buf, binary ? 1 : 0); + pq_sendbyte(&buf, format); /* overall format */ + pq_sendint(&buf, natts, 2); + for (i = 0; i < natts; i++) + pq_sendint(&buf, format, 2); /* per-column formats */ pq_endmessage(&buf); copy_dest = COPY_NEW_FE; copy_msgbuf = makeStringInfo(); @@ -179,15 +184,20 @@ SendCopyBegin(bool binary) } static void -ReceiveCopyBegin(bool binary) +ReceiveCopyBegin(bool binary, int natts) { if (PG_PROTOCOL_MAJOR(FrontendProtocol) >= 3) { /* new way */ StringInfoData buf; + int16 format = (binary ? 1 : 0); + int i; pq_beginmessage(&buf, 'G'); - pq_sendbyte(&buf, binary ? 1 : 0); + pq_sendbyte(&buf, format); /* overall format */ + pq_sendint(&buf, natts, 2); + for (i = 0; i < natts; i++) + pq_sendint(&buf, format, 2); /* per-column formats */ pq_endmessage(&buf); copy_dest = COPY_NEW_FE; copy_msgbuf = makeStringInfo(); @@ -682,7 +692,7 @@ DoCopy(const CopyStmt *stmt) if (pipe) { if (IsUnderPostmaster) - ReceiveCopyBegin(binary); + ReceiveCopyBegin(binary, length(attnumlist)); else copy_file = stdin; } @@ -724,7 +734,7 @@ DoCopy(const CopyStmt *stmt) if (pipe) { if (IsUnderPostmaster) - SendCopyBegin(binary); + SendCopyBegin(binary, length(attnumlist)); else copy_file = stdout; } |