summaryrefslogtreecommitdiff
path: root/src/backend/commands
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/commands')
-rw-r--r--src/backend/commands/async.c12
-rw-r--r--src/backend/commands/copy.c34
-rw-r--r--src/backend/commands/explain.c19
3 files changed, 40 insertions, 25 deletions
diff --git a/src/backend/commands/async.c b/src/backend/commands/async.c
index 453019871e3..3d5cf92f7d1 100644
--- a/src/backend/commands/async.c
+++ b/src/backend/commands/async.c
@@ -6,7 +6,7 @@
* Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/async.c,v 1.44 1999/02/13 23:15:00 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/async.c,v 1.45 1999/04/25 03:19:08 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -94,6 +94,7 @@
#include "fmgr.h"
#include "lib/dllist.h"
#include "libpq/libpq.h"
+#include "libpq/pqformat.h"
#include "miscadmin.h"
#include "storage/bufmgr.h"
#include "storage/lmgr.h"
@@ -798,9 +799,12 @@ NotifyMyFrontEnd(char *relname, int32 listenerPID)
{
if (whereToSendOutput == Remote)
{
- pq_putnchar("A", 1);
- pq_putint(listenerPID, sizeof(int32));
- pq_putstr(relname);
+ StringInfoData buf;
+ pq_beginmessage(&buf);
+ pq_sendbyte(&buf, 'A');
+ pq_sendint(&buf, listenerPID, sizeof(int32));
+ pq_sendstring(&buf, relname, strlen(relname));
+ pq_endmessage(&buf);
/* NOTE: we do not do pq_flush() here. For a self-notify, it will
* happen at the end of the transaction, and for incoming notifies
* ProcessIncomingNotify will do it after finding all the notifies.
diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 8b75f5b3cd9..4efa13635aa 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -6,7 +6,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.73 1999/02/13 23:15:04 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.74 1999/04/25 03:19:09 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -89,12 +89,14 @@ inline void CopyDonePeek(FILE *fp, int c, int pickup);
*
* CopySendString does the same for null-terminated strings
* CopySendChar does the same for single characters
+ *
+ * NB: no data conversion is applied by these functions
*/
inline void CopySendData(void *databuf, int datasize, FILE *fp) {
if (!fp)
- pq_putnchar(databuf, datasize);
+ pq_putbytes((char*) databuf, datasize);
else
- fwrite(databuf, datasize, 1, fp);
+ fwrite(databuf, datasize, 1, fp);
}
inline void CopySendString(char *str, FILE *fp) {
@@ -112,17 +114,24 @@ inline void CopySendChar(char c, FILE *fp) {
*
* CopyGetChar does the same for single characters
* CopyGetEof checks if it's EOF on the input
+ *
+ * NB: no data conversion is applied by these functions
*/
inline void CopyGetData(void *databuf, int datasize, FILE *fp) {
if (!fp)
- pq_getnchar(databuf, 0, datasize);
+ pq_getbytes((char*) databuf, datasize);
else
fread(databuf, datasize, 1, fp);
}
inline int CopyGetChar(FILE *fp) {
if (!fp)
- return pq_getchar();
+ {
+ unsigned char ch;
+ if (pq_getbytes((char*) &ch, 1))
+ return EOF;
+ return ch;
+ }
else
return getc(fp);
}
@@ -143,7 +152,7 @@ inline int CopyGetEof(FILE *fp) {
*/
inline int CopyPeekChar(FILE *fp) {
if (!fp)
- return pq_peekchar();
+ return pq_peekbyte();
else
return getc(fp);
}
@@ -153,7 +162,7 @@ inline void CopyDonePeek(FILE *fp, int c, int pickup) {
if (pickup) {
/* We want to pick it up - just receive again into dummy buffer */
char c;
- pq_getnchar(&c, 0, 1);
+ pq_getbytes(&c, 1);
}
/* If we didn't want to pick it up, just leave it where it sits */
}
@@ -216,7 +225,10 @@ DoCopy(char *relname, bool binary, bool oids, bool from, bool pipe,
* descriptor leak. bjm 1998/08/29
*/
if (file_opened)
+ {
FreeFile(fp);
+ file_opened = false;
+ }
rel = heap_openr(relname);
if (rel == NULL)
@@ -271,6 +283,7 @@ DoCopy(char *relname, bool binary, bool oids, bool from, bool pipe,
if (IsUnderPostmaster)
{
SendCopyBegin();
+ pq_startcopyout();
fp = NULL;
}
else
@@ -301,9 +314,12 @@ DoCopy(char *relname, bool binary, bool oids, bool from, bool pipe,
FreeFile(fp);
file_opened = false;
}
- else if (!from && !binary)
+ else if (!from)
{
- CopySendData("\\.\n",3,fp);
+ if (!binary)
+ CopySendData("\\.\n",3,fp);
+ if (IsUnderPostmaster)
+ pq_endcopyout(false);
}
}
}
diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c
index 6745b4f1f38..a26579270c9 100644
--- a/src/backend/commands/explain.c
+++ b/src/backend/commands/explain.c
@@ -4,7 +4,7 @@
*
* Copyright (c) 1994-5, Regents of the University of California
*
- * $Id: explain.c,v 1.34 1999/04/23 21:23:48 momjian Exp $
+ * $Id: explain.c,v 1.35 1999/04/25 03:19:09 tgl Exp $
*
*/
#include <stdio.h>
@@ -350,18 +350,13 @@ explain_outNode(StringInfo str, Plan *plan, int indent, ExplainState *es)
static char *
Explain_PlanToString(Plan *plan, ExplainState *es)
{
- StringInfo str;
- char *s;
+ StringInfoData str;
- if (plan == NULL)
- return "";
- Assert(plan != NULL);
- str = makeStringInfo();
- explain_outNode(str, plan, 0, es);
- s = str->data;
- pfree(str);
-
- return s;
+ /* see stringinfo.h for an explanation of this maneuver */
+ initStringInfo(&str);
+ if (plan != NULL)
+ explain_outNode(&str, plan, 0, es);
+ return str.data;
}
/*