aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/bootstrap/bootstrap.c14
-rw-r--r--src/backend/executor/execProcnode.c8
-rw-r--r--src/backend/libpq/pqcomm.c13
-rw-r--r--src/backend/tcop/dest.c5
-rw-r--r--src/backend/tcop/postgres.c61
-rw-r--r--src/backend/utils/error/elog.c4
-rw-r--r--src/backend/utils/init/globals.c8
-rw-r--r--src/include/libpq/libpq.h4
-rw-r--r--src/include/miscadmin.h7
-rw-r--r--src/include/tcop/tcopprot.h3
10 files changed, 82 insertions, 45 deletions
diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c
index 80966c3d9c4..f41187c0504 100644
--- a/src/backend/bootstrap/bootstrap.c
+++ b/src/backend/bootstrap/bootstrap.c
@@ -7,7 +7,7 @@
* Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.40 1998/04/26 04:06:04 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.41 1998/05/19 18:05:44 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -312,8 +312,8 @@ BootstrapMain(int argc, char *argv[])
*/
/* Set defaults, to be overriden by explicit options below */
- Quiet = 0;
- Noversion = 0;
+ Quiet = false;
+ Noversion = false;
dbName = NULL;
DataDir = getenv("PGDATA"); /* Null if no PGDATA variable */
@@ -325,19 +325,19 @@ BootstrapMain(int argc, char *argv[])
DataDir = optarg;
break;
case 'd':
- DebugMode = 1; /* print out debugging info while parsing */
+ DebugMode = true; /* print out debugging info while parsing */
break;
case 'C':
- Noversion = 1;
+ Noversion = true;
break;
case 'F':
- fsyncOff = 1;
+ fsyncOff = true;
break;
case 'O':
override = true;
break;
case 'Q':
- Quiet = 1;
+ Quiet = true;
break;
case 'P': /* specify port */
portFd = atoi(optarg);
diff --git a/src/backend/executor/execProcnode.c b/src/backend/executor/execProcnode.c
index f5842ecad32..16309ff6336 100644
--- a/src/backend/executor/execProcnode.c
+++ b/src/backend/executor/execProcnode.c
@@ -11,7 +11,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/executor/execProcnode.c,v 1.9 1998/02/26 04:31:11 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/executor/execProcnode.c,v 1.10 1998/05/19 18:05:45 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -74,6 +74,8 @@
*/
#include "postgres.h"
+#include "miscadmin.h"
+#include "tcop/tcopprot.h"
#include "executor/executor.h"
#include "executor/nodeResult.h"
#include "executor/nodeAppend.h"
@@ -233,6 +235,10 @@ ExecProcNode(Plan *node, Plan *parent)
* deal with NULL nodes..
* ----------------
*/
+
+ if (QueryCancel)
+ CancelQuery();
+
if (node == NULL)
return NULL;
diff --git a/src/backend/libpq/pqcomm.c b/src/backend/libpq/pqcomm.c
index 41280c8bbc4..aa07c12279c 100644
--- a/src/backend/libpq/pqcomm.c
+++ b/src/backend/libpq/pqcomm.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/libpq/pqcomm.c,v 1.40 1998/03/02 05:41:53 scrappy Exp $
+ * $Header: /cvsroot/pgsql/src/backend/libpq/pqcomm.c,v 1.41 1998/05/19 18:05:46 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -409,18 +409,15 @@ pq_sendoob(char *msg, int len)
{
int fd = fileno(Pfout);
- return (send(fd, msg, len, MSG_OOB));
+ return send(fd, msg, len, MSG_OOB);
}
int
-pq_recvoob(char *msgPtr, int *lenPtr)
+pq_recvoob(char *msgPtr, int len)
{
int fd = fileno(Pfout);
- int len = 0;
- len = recv(fd, msgPtr + len, *lenPtr, MSG_OOB);
- *lenPtr = len;
- return (len);
+ return recv(fd, msgPtr, len, MSG_OOB);
}
/* --------------------------------
@@ -523,7 +520,7 @@ pq_async_notify()
/* int len = sizeof(msg); */
int len = 20;
- if (pq_recvoob(msg, &len) >= 0)
+ if (pq_recvoob(msg, len) >= 0)
{
/* debugging */
printf("received notification: %s\n", msg);
diff --git a/src/backend/tcop/dest.c b/src/backend/tcop/dest.c
index 4340cac5bc1..3f21bc481a2 100644
--- a/src/backend/tcop/dest.c
+++ b/src/backend/tcop/dest.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/tcop/dest.c,v 1.19 1998/05/14 17:18:13 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/tcop/dest.c,v 1.20 1998/05/19 18:05:47 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -288,7 +288,8 @@ BeginCommand(char *pname,
* oops.. */
pq_putint((int) attrs[i]->atttypid, sizeof(attrs[i]->atttypid));
pq_putint(attrs[i]->attlen, sizeof(attrs[i]->attlen));
- pq_putint(attrs[i]->atttypmod, sizeof(attrs[i]->atttypmod));
+ if (PG_PROTOCOL_MAJOR(FrontendProtocol) >= 2)
+ pq_putint(attrs[i]->atttypmod, sizeof(attrs[i]->atttypmod));
}
}
break;
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
index 87e1bf9fe56..991025e7444 100644
--- a/src/backend/tcop/postgres.c
+++ b/src/backend/tcop/postgres.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.68 1998/05/06 23:50:19 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.69 1998/05/19 18:05:48 momjian Exp $
*
* NOTES
* this is the "main" module of the postgres backend and
@@ -119,7 +119,7 @@ jmp_buf Warn_restart;
sigjmp_buf Warn_restart;
#endif /* defined(nextstep) */
-int InError;
+bool InError;
extern int NBuffers;
@@ -618,6 +618,9 @@ pg_exec_query_dest(char *query_string, /* string to execute */
/* plan the queries */
plan_list = pg_parse_and_plan(query_string, typev, nargs, &querytree_list, dest);
+ if (QueryCancel)
+ CancelQuery();
+
/* pg_parse_and_plan could have failed */
if (querytree_list == NULL)
return;
@@ -776,6 +779,26 @@ FloatExceptionHandler(SIGNAL_ARGS)
}
+/* signal handler for query cancel */
+static void
+QueryCancelHandler(SIGNAL_ARGS)
+{
+ QueryCancel = true;
+}
+
+void
+CancelQuery(void)
+{
+ char dummy;
+
+ /* throw it away */
+ while (pq_recvoob(&dummy, 1) > 0)
+ ;
+ /* QueryCancel reset in longjump after elog() call */
+ elog(ERROR, "Query was cancelled.");
+}
+
+
static void
usage(char *progname)
{
@@ -819,11 +842,11 @@ usage(char *progname)
int
PostgresMain(int argc, char *argv[])
{
- int flagC;
- int flagQ;
- int flagE;
- int flagEu;
- int flag;
+ bool flagC = false,
+ flagQ = false,
+ flagE = false,
+ flagEu = false;
+ int flag;
char *DBName = NULL;
int errs = 0;
@@ -865,7 +888,7 @@ PostgresMain(int argc, char *argv[])
/*
* Set default values.
*/
- flagC = flagQ = flagE = flagEu = ShowStats = 0;
+ ShowStats = 0;
ShowParserStats = ShowPlannerStats = ShowExecutorStats = 0;
#ifdef LOCK_MGR_DEBUG
lockDebug = 0;
@@ -928,14 +951,14 @@ PostgresMain(int argc, char *argv[])
* don't print version string (don't know why this is 'C' --mao)
* ----------------
*/
- flagC = 1;
+ flagC = true;
break;
case 'D': /* PGDATA directory */
DataDir = optarg;
case 'd': /* debug level */
- flagQ = 0;
+ flagQ = false;
DebugLvl = (short) atoi(optarg);
if (DebugLvl > 1)
DebugPrintQuery = true;
@@ -952,7 +975,7 @@ PostgresMain(int argc, char *argv[])
* E - echo the query the user entered
* ----------------
*/
- flagE = 1;
+ flagE = true;
break;
case 'e':
@@ -960,7 +983,7 @@ PostgresMain(int argc, char *argv[])
* Use european date formats.
* --------------------------
*/
- flagEu = 1;
+ flagEu = true;
break;
case 'F':
@@ -1064,7 +1087,7 @@ PostgresMain(int argc, char *argv[])
* Q - set Quiet mode (reduce debugging output)
* ----------------
*/
- flagQ = 1;
+ flagQ = true;
break;
case 'S':
@@ -1252,6 +1275,7 @@ PostgresMain(int argc, char *argv[])
}
pq_init(Portfd);
whereToSendOutput = Remote;
+ pq_regoob(QueryCancelHandler); /* we do it here so the backend it connected */
}
else
whereToSendOutput = Debug;
@@ -1282,7 +1306,7 @@ PostgresMain(int argc, char *argv[])
if (sigsetjmp(Warn_restart, 1) != 0)
{
- InError = 1;
+ InError = true;
time(&tim);
@@ -1292,8 +1316,10 @@ PostgresMain(int argc, char *argv[])
MemSet(parser_input, 0, MAX_PARSE_BUFFER);
AbortCurrentTransaction();
+
}
- InError = 0;
+
+ InError = false;
/* ----------------
* POSTGRES main processing loop begins here
@@ -1302,7 +1328,7 @@ PostgresMain(int argc, char *argv[])
if (IsUnderPostmaster == false)
{
puts("\nPOSTGRES backend interactive interface");
- puts("$Revision: 1.68 $ $Date: 1998/05/06 23:50:19 $");
+ puts("$Revision: 1.69 $ $Date: 1998/05/19 18:05:48 $");
}
/* ----------------
@@ -1329,6 +1355,9 @@ PostgresMain(int argc, char *argv[])
MemSet(parser_input, 0, MAX_PARSE_BUFFER);
firstchar = ReadCommand(parser_input);
+
+ QueryCancel = false;
+
/* process the command */
switch (firstchar)
{
diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c
index 63fd69b10af..fdbae14e99b 100644
--- a/src/backend/utils/error/elog.c
+++ b/src/backend/utils/error/elog.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/error/elog.c,v 1.27 1998/02/26 04:37:34 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/error/elog.c,v 1.28 1998/05/19 18:05:50 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -175,7 +175,7 @@ elog(int lev, const char *fmt,...)
if (lev == ERROR)
{
- extern int InError;
+ extern bool InError;
ProcReleaseSpins(NULL); /* get rid of spinlocks we hold */
if (!InError)
diff --git a/src/backend/utils/init/globals.c b/src/backend/utils/init/globals.c
index 55ec93cc75d..f58a75ec857 100644
--- a/src/backend/utils/init/globals.c
+++ b/src/backend/utils/init/globals.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/init/globals.c,v 1.21 1998/02/26 04:37:56 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/init/globals.c,v 1.22 1998/05/19 18:05:51 momjian Exp $
*
* NOTES
* Globals used all over the place should be declared here and not
@@ -37,8 +37,10 @@
ProtocolVersion FrontendProtocol = PG_PROTOCOL_LATEST;
int Portfd = -1;
-int Noversion = 0;
-int Quiet = 1;
+
+bool Noversion = false;
+bool Quiet = false;
+bool QueryCancel = false;
int MyProcPid;
diff --git a/src/include/libpq/libpq.h b/src/include/libpq/libpq.h
index 0893b646fb1..6768626f988 100644
--- a/src/include/libpq/libpq.h
+++ b/src/include/libpq/libpq.h
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: libpq.h,v 1.13 1998/03/02 05:42:06 scrappy Exp $
+ * $Id: libpq.h,v 1.14 1998/05/19 18:05:55 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -269,7 +269,7 @@ extern void pq_putstr(char *s);
extern void pq_putnchar(char *s, int n);
extern void pq_putint(int i, int b);
extern int pq_sendoob(char *msg, int len);
-extern int pq_recvoob(char *msgPtr, int *lenPtr);
+extern int pq_recvoob(char *msgPtr, int len);
extern int pq_getinaddr(struct sockaddr_in * sin, char *host, int port);
extern int pq_getinserv(struct sockaddr_in * sin, char *host, char *serv);
extern int
diff --git a/src/include/miscadmin.h b/src/include/miscadmin.h
index f2b26d3bd1b..f5da6e628ab 100644
--- a/src/include/miscadmin.h
+++ b/src/include/miscadmin.h
@@ -11,7 +11,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: miscadmin.h,v 1.22 1998/04/05 21:04:50 momjian Exp $
+ * $Id: miscadmin.h,v 1.23 1998/05/19 18:05:52 momjian Exp $
*
* NOTES
* some of the information in this file will be moved to
@@ -35,8 +35,9 @@ extern int PostmasterMain(int argc, char *argv[]);
* from utils/init/globals.c
*/
extern int Portfd;
-extern int Noversion;
-extern int Quiet;
+extern bool Noversion;
+extern bool Quiet;
+extern bool QueryCancel;
extern char *DataDir;
extern int MyProcPid;
diff --git a/src/include/tcop/tcopprot.h b/src/include/tcop/tcopprot.h
index 0e2706f05da..dbd9fdba740 100644
--- a/src/include/tcop/tcopprot.h
+++ b/src/include/tcop/tcopprot.h
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: tcopprot.h,v 1.11 1998/02/26 04:43:41 momjian Exp $
+ * $Id: tcopprot.h,v 1.12 1998/05/19 18:05:58 momjian Exp $
*
* OLD COMMENTS
* This file was created so that other c files could get the two
@@ -34,6 +34,7 @@ pg_exec_query_dest(char *query_string, char **argv, Oid *typev,
extern void handle_warn(SIGNAL_ARGS);
extern void die(SIGNAL_ARGS);
+extern void CancelQuery(void);
extern int PostgresMain(int argc, char *argv[]);
extern void ResetUsage(void);
extern void ShowUsage(void);