diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index 97f58dc3f616ebd020653b47c3d61b794b32b9f4..a0d4a5ca1a4f41b5c15396f20eb1fbceb2a5da78 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -3,7 +3,7 @@
  *
  * Copyright 2000 by PostgreSQL Global Development Group
  *
- * $Header: /cvsroot/pgsql/src/bin/psql/command.c,v 1.70 2002/03/19 02:32:21 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/command.c,v 1.71 2002/03/27 19:16:13 petere Exp $
  */
 #include "postgres_fe.h"
 #include "command.h"
@@ -52,7 +52,8 @@
 static backslashResult exec_command(const char *cmd,
 			 const char *options_string,
 			 const char **continue_parse,
-			 PQExpBuffer query_buf);
+			 PQExpBuffer query_buf,
+			 volatile int *paren_level);
 
 /* different ways for scan_option to handle parameter words */
 enum option_type
@@ -94,7 +95,8 @@ static bool do_shell(const char *command);
 backslashResult
 HandleSlashCmds(const char *line,
 				PQExpBuffer query_buf,
-				const char **end_of_cmd)
+				const char **end_of_cmd,
+				volatile int *paren_level)
 {
 	backslashResult status = CMD_SKIP_LINE;
 	char	   *my_line;
@@ -132,7 +134,7 @@ HandleSlashCmds(const char *line,
 		my_line[blank_loc] = '\0';
 	}
 
-	status = exec_command(my_line, options_string, &continue_parse, query_buf);
+	status = exec_command(my_line, options_string, &continue_parse, query_buf, paren_level);
 
 	if (status == CMD_UNKNOWN)
 	{
@@ -147,7 +149,7 @@ HandleSlashCmds(const char *line,
 		new_cmd[1] = '\0';
 
 		/* use line for options, because my_line was clobbered above */
-		status = exec_command(new_cmd, line + 1, &continue_parse, query_buf);
+		status = exec_command(new_cmd, line + 1, &continue_parse, query_buf, paren_level);
 
 		/*
 		 * continue_parse must be relative to my_line for calculation
@@ -192,7 +194,8 @@ static backslashResult
 exec_command(const char *cmd,
 			 const char *options_string,
 			 const char **continue_parse,
-			 PQExpBuffer query_buf)
+			 PQExpBuffer query_buf,
+			 volatile int *paren_level)
 {
 	bool		success = true; /* indicate here if the command ran ok or
 								 * failed */
@@ -636,6 +639,8 @@ exec_command(const char *cmd,
 	else if (strcmp(cmd, "r") == 0 || strcmp(cmd, "reset") == 0)
 	{
 		resetPQExpBuffer(query_buf);
+		if (paren_level)
+			*paren_level = 0;
 		if (!quiet)
 			puts(gettext("Query buffer reset (cleared)."));
 	}
diff --git a/src/bin/psql/command.h b/src/bin/psql/command.h
index b026cf4f8a50f5539d9ddf3eff8674b670d72105..f74be3a851094d885bffc0bcc4354f4a2d7cbb3c 100644
--- a/src/bin/psql/command.h
+++ b/src/bin/psql/command.h
@@ -3,7 +3,7 @@
  *
  * Copyright 2000 by PostgreSQL Global Development Group
  *
- * $Header: /cvsroot/pgsql/src/bin/psql/command.h,v 1.13 2001/11/05 17:46:30 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/command.h,v 1.14 2002/03/27 19:16:13 petere Exp $
  */
 #ifndef COMMAND_H
 #define COMMAND_H
@@ -28,7 +28,8 @@ typedef enum _backslashResult
 
 backslashResult HandleSlashCmds(const char *line,
 				PQExpBuffer query_buf,
-				const char **end_of_cmd);
+				const char **end_of_cmd,
+				volatile int *paren_level);
 
 int
 			process_file(char *filename);
diff --git a/src/bin/psql/mainloop.c b/src/bin/psql/mainloop.c
index 954b5752741a0b9579fb3e128159711c44ce7707..06ca83a7fe19e58f7e0d1c0c5280f0ae15ad47bc 100644
--- a/src/bin/psql/mainloop.c
+++ b/src/bin/psql/mainloop.c
@@ -3,7 +3,7 @@
  *
  * Copyright 2000 by PostgreSQL Global Development Group
  *
- * $Header: /cvsroot/pgsql/src/bin/psql/mainloop.c,v 1.46 2002/02/18 05:57:41 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/mainloop.c,v 1.47 2002/03/27 19:16:13 petere Exp $
  */
 #include "postgres_fe.h"
 #include "mainloop.h"
@@ -465,7 +465,8 @@ MainLoop(FILE *source)
 				/* handle backslash command */
 				slashCmdStatus = HandleSlashCmds(&line[i],
 						   query_buf->len > 0 ? query_buf : previous_buf,
-												 &end_of_cmd);
+												 &end_of_cmd,
+												 &paren_level);
 
 				success = slashCmdStatus != CMD_ERROR;
 
diff --git a/src/bin/psql/startup.c b/src/bin/psql/startup.c
index 9e4185de3be51fe93c4450d7239ed53333a49db2..3a7b7a0f93661a1a12f07a3d3f24e57c5dc54e5e 100644
--- a/src/bin/psql/startup.c
+++ b/src/bin/psql/startup.c
@@ -3,7 +3,7 @@
  *
  * Copyright 2000 by PostgreSQL Global Development Group
  *
- * $Header: /cvsroot/pgsql/src/bin/psql/startup.c,v 1.54 2001/11/05 17:46:31 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/startup.c,v 1.55 2002/03/27 19:16:13 petere Exp $
  */
 #include "postgres_fe.h"
 
@@ -256,7 +256,7 @@ main(int argc, char *argv[])
 
 		if ((value = GetVariable(pset.vars, "ECHO")) && strcmp(value, "all") == 0)
 			puts(options.action_string);
-		successResult = HandleSlashCmds(options.action_string, NULL, NULL) != CMD_ERROR
+		successResult = HandleSlashCmds(options.action_string, NULL, NULL, NULL) != CMD_ERROR
 			? EXIT_SUCCESS : EXIT_FAILURE;
 	}