From c8009959c9320e9cf1e73324bc0f7dee966131d3 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 21 Feb 2000 19:40:42 +0000 Subject: [PATCH] Fixed psql's Control-C handling when COPY in progress --- src/bin/psql/common.c | 15 ++++++++++++--- src/bin/psql/copy.c | 15 ++++++++++++--- src/bin/psql/copy.h | 4 +++- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/bin/psql/common.c b/src/bin/psql/common.c index cb352793a2..e149d7ec53 100644 --- a/src/bin/psql/common.c +++ b/src/bin/psql/common.c @@ -3,7 +3,7 @@ * * Copyright 2000 by PostgreSQL Global Development Group * - * $Header: /cvsroot/pgsql/src/bin/psql/common.c,v 1.16 2000/02/20 14:28:20 petere Exp $ + * $Header: /cvsroot/pgsql/src/bin/psql/common.c,v 1.17 2000/02/21 19:40:41 petere Exp $ */ #include "postgres.h" #include "common.h" @@ -246,6 +246,11 @@ volatile bool cancel_pressed; void handle_sigint(SIGNAL_ARGS) { + cancel_pressed = true; + + if (copy_state) + return; + if (cancelConn == NULL) #ifndef WIN32 siglongjmp(main_loop_jmp, 1); @@ -253,8 +258,6 @@ handle_sigint(SIGNAL_ARGS) return; #endif - cancel_pressed = true; - /* Try to send cancel request */ if (PQrequestCancel(cancelConn)) write_stderr("\nCancel request sent\n"); @@ -297,6 +300,9 @@ PSQLexec(const char *query) cancelConn = pset.db; res = PQexec(pset.db, query); + if (PQresultStatus(res) == PGRES_COPY_IN || + PQresultStatus(res) == PGRES_COPY_OUT) + copy_state = true; cancelConn = NULL; if (PQstatus(pset.db) == CONNECTION_BAD) @@ -388,6 +394,9 @@ SendQuery(const char *query) cancelConn = pset.db; results = PQexec(pset.db, query); + if (PQresultStatus(results) == PGRES_COPY_IN || + PQresultStatus(results) == PGRES_COPY_OUT) + copy_state = true; cancelConn = NULL; if (results == NULL) diff --git a/src/bin/psql/copy.c b/src/bin/psql/copy.c index b0bba40889..7caf82edfd 100644 --- a/src/bin/psql/copy.c +++ b/src/bin/psql/copy.c @@ -3,13 +3,14 @@ * * Copyright 2000 by PostgreSQL Global Development Group * - * $Header: /cvsroot/pgsql/src/bin/psql/copy.c,v 1.10 2000/02/16 13:15:26 momjian Exp $ + * $Header: /cvsroot/pgsql/src/bin/psql/copy.c,v 1.11 2000/02/21 19:40:41 petere Exp $ */ #include "postgres.h" #include "copy.h" #include #include +#include #ifndef WIN32 #include /* for isatty */ #else @@ -17,6 +18,7 @@ #endif #include "libpq-fe.h" +#include "pqsignal.h" #include "settings.h" #include "common.h" @@ -26,6 +28,8 @@ #define strcasecmp(x,y) stricmp(x,y) #endif +bool copy_state; + /* * parse_slash_copy * -- parses \copy command line @@ -358,7 +362,9 @@ handleCopyOut(PGconn *conn, FILE *copystream) } } fflush(copystream); - return !PQendcopy(conn); + ret = !PQendcopy(conn); + copy_state = false; + return ret; } @@ -386,6 +392,7 @@ handleCopyIn(PGconn *conn, FILE *copystream, const char *prompt) char *s; int bufleft; int c = 0; + int ret; if (prompt) /* disable prompt if not interactive */ { @@ -435,5 +442,7 @@ handleCopyIn(PGconn *conn, FILE *copystream, const char *prompt) } PQputline(conn, "\n"); } - return !PQendcopy(conn); + ret = !PQendcopy(conn); + copy_state = false; + return ret; } diff --git a/src/bin/psql/copy.h b/src/bin/psql/copy.h index cf36d324c0..e25dfa9b6b 100644 --- a/src/bin/psql/copy.h +++ b/src/bin/psql/copy.h @@ -3,13 +3,15 @@ * * Copyright 2000 by PostgreSQL Global Development Group * - * $Header: /cvsroot/pgsql/src/bin/psql/copy.h,v 1.7 2000/02/16 13:15:26 momjian Exp $ + * $Header: /cvsroot/pgsql/src/bin/psql/copy.h,v 1.8 2000/02/21 19:40:42 petere Exp $ */ #ifndef COPY_H #define COPY_H #include "libpq-fe.h" +extern bool copy_state; + /* handler for \copy */ bool do_copy(const char *args); -- GitLab