Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 07140ee

Browse files
committed
Allow cancel from client of backend query. Change some int variables
to bool's.
1 parent ef56741 commit 07140ee

File tree

10 files changed

+82
-45
lines changed

10 files changed

+82
-45
lines changed

src/backend/bootstrap/bootstrap.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Copyright (c) 1994, Regents of the University of California
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.40 1998/04/26 04:06:04 momjian Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.41 1998/05/19 18:05:44 momjian Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -312,8 +312,8 @@ BootstrapMain(int argc, char *argv[])
312312
*/
313313

314314
/* Set defaults, to be overriden by explicit options below */
315-
Quiet = 0;
316-
Noversion = 0;
315+
Quiet = false;
316+
Noversion = false;
317317
dbName = NULL;
318318
DataDir = getenv("PGDATA"); /* Null if no PGDATA variable */
319319

@@ -325,19 +325,19 @@ BootstrapMain(int argc, char *argv[])
325325
DataDir = optarg;
326326
break;
327327
case 'd':
328-
DebugMode = 1; /* print out debugging info while parsing */
328+
DebugMode = true; /* print out debugging info while parsing */
329329
break;
330330
case 'C':
331-
Noversion = 1;
331+
Noversion = true;
332332
break;
333333
case 'F':
334-
fsyncOff = 1;
334+
fsyncOff = true;
335335
break;
336336
case 'O':
337337
override = true;
338338
break;
339339
case 'Q':
340-
Quiet = 1;
340+
Quiet = true;
341341
break;
342342
case 'P': /* specify port */
343343
portFd = atoi(optarg);

src/backend/executor/execProcnode.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
*
1212
*
1313
* IDENTIFICATION
14-
* $Header: /cvsroot/pgsql/src/backend/executor/execProcnode.c,v 1.9 1998/02/26 04:31:11 momjian Exp $
14+
* $Header: /cvsroot/pgsql/src/backend/executor/execProcnode.c,v 1.10 1998/05/19 18:05:45 momjian Exp $
1515
*
1616
*-------------------------------------------------------------------------
1717
*/
@@ -74,6 +74,8 @@
7474
*/
7575
#include "postgres.h"
7676

77+
#include "miscadmin.h"
78+
#include "tcop/tcopprot.h"
7779
#include "executor/executor.h"
7880
#include "executor/nodeResult.h"
7981
#include "executor/nodeAppend.h"
@@ -233,6 +235,10 @@ ExecProcNode(Plan *node, Plan *parent)
233235
* deal with NULL nodes..
234236
* ----------------
235237
*/
238+
239+
if (QueryCancel)
240+
CancelQuery();
241+
236242
if (node == NULL)
237243
return NULL;
238244

src/backend/libpq/pqcomm.c

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/libpq/pqcomm.c,v 1.40 1998/03/02 05:41:53 scrappy Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/libpq/pqcomm.c,v 1.41 1998/05/19 18:05:46 momjian Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -409,18 +409,15 @@ pq_sendoob(char *msg, int len)
409409
{
410410
int fd = fileno(Pfout);
411411

412-
return (send(fd, msg, len, MSG_OOB));
412+
return send(fd, msg, len, MSG_OOB);
413413
}
414414

415415
int
416-
pq_recvoob(char *msgPtr, int *lenPtr)
416+
pq_recvoob(char *msgPtr, int len)
417417
{
418418
int fd = fileno(Pfout);
419-
int len = 0;
420419

421-
len = recv(fd, msgPtr + len, *lenPtr, MSG_OOB);
422-
*lenPtr = len;
423-
return (len);
420+
return recv(fd, msgPtr, len, MSG_OOB);
424421
}
425422

426423
/* --------------------------------
@@ -523,7 +520,7 @@ pq_async_notify()
523520
/* int len = sizeof(msg); */
524521
int len = 20;
525522

526-
if (pq_recvoob(msg, &len) >= 0)
523+
if (pq_recvoob(msg, len) >= 0)
527524
{
528525
/* debugging */
529526
printf("received notification: %s\n", msg);

src/backend/tcop/dest.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/tcop/dest.c,v 1.19 1998/05/14 17:18:13 momjian Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/tcop/dest.c,v 1.20 1998/05/19 18:05:47 momjian Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -288,7 +288,8 @@ BeginCommand(char *pname,
288288
* oops.. */
289289
pq_putint((int) attrs[i]->atttypid, sizeof(attrs[i]->atttypid));
290290
pq_putint(attrs[i]->attlen, sizeof(attrs[i]->attlen));
291-
pq_putint(attrs[i]->atttypmod, sizeof(attrs[i]->atttypmod));
291+
if (PG_PROTOCOL_MAJOR(FrontendProtocol) >= 2)
292+
pq_putint(attrs[i]->atttypmod, sizeof(attrs[i]->atttypmod));
292293
}
293294
}
294295
break;

src/backend/tcop/postgres.c

Lines changed: 45 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.68 1998/05/06 23:50:19 momjian Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.69 1998/05/19 18:05:48 momjian Exp $
1111
*
1212
* NOTES
1313
* this is the "main" module of the postgres backend and
@@ -119,7 +119,7 @@ jmp_buf Warn_restart;
119119
sigjmp_buf Warn_restart;
120120

121121
#endif /* defined(nextstep) */
122-
int InError;
122+
bool InError;
123123

124124
extern int NBuffers;
125125

@@ -618,6 +618,9 @@ pg_exec_query_dest(char *query_string, /* string to execute */
618618
/* plan the queries */
619619
plan_list = pg_parse_and_plan(query_string, typev, nargs, &querytree_list, dest);
620620

621+
if (QueryCancel)
622+
CancelQuery();
623+
621624
/* pg_parse_and_plan could have failed */
622625
if (querytree_list == NULL)
623626
return;
@@ -776,6 +779,26 @@ FloatExceptionHandler(SIGNAL_ARGS)
776779
}
777780

778781

782+
/* signal handler for query cancel */
783+
static void
784+
QueryCancelHandler(SIGNAL_ARGS)
785+
{
786+
QueryCancel = true;
787+
}
788+
789+
void
790+
CancelQuery(void)
791+
{
792+
char dummy;
793+
794+
/* throw it away */
795+
while (pq_recvoob(&dummy, 1) > 0)
796+
;
797+
/* QueryCancel reset in longjump after elog() call */
798+
elog(ERROR, "Query was cancelled.");
799+
}
800+
801+
779802
static void
780803
usage(char *progname)
781804
{
@@ -819,11 +842,11 @@ usage(char *progname)
819842
int
820843
PostgresMain(int argc, char *argv[])
821844
{
822-
int flagC;
823-
int flagQ;
824-
int flagE;
825-
int flagEu;
826-
int flag;
845+
bool flagC = false,
846+
flagQ = false,
847+
flagE = false,
848+
flagEu = false;
849+
int flag;
827850

828851
char *DBName = NULL;
829852
int errs = 0;
@@ -865,7 +888,7 @@ PostgresMain(int argc, char *argv[])
865888
/*
866889
* Set default values.
867890
*/
868-
flagC = flagQ = flagE = flagEu = ShowStats = 0;
891+
ShowStats = 0;
869892
ShowParserStats = ShowPlannerStats = ShowExecutorStats = 0;
870893
#ifdef LOCK_MGR_DEBUG
871894
lockDebug = 0;
@@ -928,14 +951,14 @@ PostgresMain(int argc, char *argv[])
928951
* don't print version string (don't know why this is 'C' --mao)
929952
* ----------------
930953
*/
931-
flagC = 1;
954+
flagC = true;
932955
break;
933956

934957
case 'D': /* PGDATA directory */
935958
DataDir = optarg;
936959

937960
case 'd': /* debug level */
938-
flagQ = 0;
961+
flagQ = false;
939962
DebugLvl = (short) atoi(optarg);
940963
if (DebugLvl > 1)
941964
DebugPrintQuery = true;
@@ -952,15 +975,15 @@ PostgresMain(int argc, char *argv[])
952975
* E - echo the query the user entered
953976
* ----------------
954977
*/
955-
flagE = 1;
978+
flagE = true;
956979
break;
957980

958981
case 'e':
959982
/* --------------------------
960983
* Use european date formats.
961984
* --------------------------
962985
*/
963-
flagEu = 1;
986+
flagEu = true;
964987
break;
965988

966989
case 'F':
@@ -1064,7 +1087,7 @@ PostgresMain(int argc, char *argv[])
10641087
* Q - set Quiet mode (reduce debugging output)
10651088
* ----------------
10661089
*/
1067-
flagQ = 1;
1090+
flagQ = true;
10681091
break;
10691092

10701093
case 'S':
@@ -1252,6 +1275,7 @@ PostgresMain(int argc, char *argv[])
12521275
}
12531276
pq_init(Portfd);
12541277
whereToSendOutput = Remote;
1278+
pq_regoob(QueryCancelHandler); /* we do it here so the backend it connected */
12551279
}
12561280
else
12571281
whereToSendOutput = Debug;
@@ -1282,7 +1306,7 @@ PostgresMain(int argc, char *argv[])
12821306

12831307
if (sigsetjmp(Warn_restart, 1) != 0)
12841308
{
1285-
InError = 1;
1309+
InError = true;
12861310

12871311
time(&tim);
12881312

@@ -1292,8 +1316,10 @@ PostgresMain(int argc, char *argv[])
12921316
MemSet(parser_input, 0, MAX_PARSE_BUFFER);
12931317

12941318
AbortCurrentTransaction();
1319+
12951320
}
1296-
InError = 0;
1321+
1322+
InError = false;
12971323

12981324
/* ----------------
12991325
* POSTGRES main processing loop begins here
@@ -1302,7 +1328,7 @@ PostgresMain(int argc, char *argv[])
13021328
if (IsUnderPostmaster == false)
13031329
{
13041330
puts("\nPOSTGRES backend interactive interface");
1305-
puts("$Revision: 1.68 $ $Date: 1998/05/06 23:50:19 $");
1331+
puts("$Revision: 1.69 $ $Date: 1998/05/19 18:05:48 $");
13061332
}
13071333

13081334
/* ----------------
@@ -1329,6 +1355,9 @@ PostgresMain(int argc, char *argv[])
13291355
MemSet(parser_input, 0, MAX_PARSE_BUFFER);
13301356

13311357
firstchar = ReadCommand(parser_input);
1358+
1359+
QueryCancel = false;
1360+
13321361
/* process the command */
13331362
switch (firstchar)
13341363
{

src/backend/utils/error/elog.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/utils/error/elog.c,v 1.27 1998/02/26 04:37:34 momjian Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/utils/error/elog.c,v 1.28 1998/05/19 18:05:50 momjian Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -175,7 +175,7 @@ elog(int lev, const char *fmt,...)
175175

176176
if (lev == ERROR)
177177
{
178-
extern int InError;
178+
extern bool InError;
179179

180180
ProcReleaseSpins(NULL); /* get rid of spinlocks we hold */
181181
if (!InError)

src/backend/utils/init/globals.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/utils/init/globals.c,v 1.21 1998/02/26 04:37:56 momjian Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/utils/init/globals.c,v 1.22 1998/05/19 18:05:51 momjian Exp $
1111
*
1212
* NOTES
1313
* Globals used all over the place should be declared here and not
@@ -37,8 +37,10 @@
3737

3838
ProtocolVersion FrontendProtocol = PG_PROTOCOL_LATEST;
3939
int Portfd = -1;
40-
int Noversion = 0;
41-
int Quiet = 1;
40+
41+
bool Noversion = false;
42+
bool Quiet = false;
43+
bool QueryCancel = false;
4244

4345
int MyProcPid;
4446

src/include/libpq/libpq.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*
77
* Copyright (c) 1994, Regents of the University of California
88
*
9-
* $Id: libpq.h,v 1.13 1998/03/02 05:42:06 scrappy Exp $
9+
* $Id: libpq.h,v 1.14 1998/05/19 18:05:55 momjian Exp $
1010
*
1111
*-------------------------------------------------------------------------
1212
*/
@@ -269,7 +269,7 @@ extern void pq_putstr(char *s);
269269
extern void pq_putnchar(char *s, int n);
270270
extern void pq_putint(int i, int b);
271271
extern int pq_sendoob(char *msg, int len);
272-
extern int pq_recvoob(char *msgPtr, int *lenPtr);
272+
extern int pq_recvoob(char *msgPtr, int len);
273273
extern int pq_getinaddr(struct sockaddr_in * sin, char *host, int port);
274274
extern int pq_getinserv(struct sockaddr_in * sin, char *host, char *serv);
275275
extern int

src/include/miscadmin.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
*
1212
* Copyright (c) 1994, Regents of the University of California
1313
*
14-
* $Id: miscadmin.h,v 1.22 1998/04/05 21:04:50 momjian Exp $
14+
* $Id: miscadmin.h,v 1.23 1998/05/19 18:05:52 momjian Exp $
1515
*
1616
* NOTES
1717
* some of the information in this file will be moved to
@@ -35,8 +35,9 @@ extern int PostmasterMain(int argc, char *argv[]);
3535
* from utils/init/globals.c
3636
*/
3737
extern int Portfd;
38-
extern int Noversion;
39-
extern int Quiet;
38+
extern bool Noversion;
39+
extern bool Quiet;
40+
extern bool QueryCancel;
4041
extern char *DataDir;
4142

4243
extern int MyProcPid;

0 commit comments

Comments
 (0)