From cad3e709feef10cd69439a49c163f1f59f7bf81f Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Tue, 23 Sep 1997 19:47:59 +0000
Subject: [PATCH] Fix for backslash quote.

---
 src/bin/psql/psql.c | 43 ++++++++++++++++++++++---------------------
 1 file changed, 22 insertions(+), 21 deletions(-)

diff --git a/src/bin/psql/psql.c b/src/bin/psql/psql.c
index d1370772801..fa103fae985 100644
--- a/src/bin/psql/psql.c
+++ b/src/bin/psql/psql.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/bin/psql/Attic/psql.c,v 1.97 1997/09/19 03:42:39 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/bin/psql/Attic/psql.c,v 1.98 1997/09/23 19:47:59 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1185,7 +1185,7 @@ do_help(PsqlSettings *pset, const char *topic)
 					printf("%-25s\n", QL_HELP[i].cmd);
 					left_center_right = 'L';
 					break;
-			};
+			}
 			i++;
 		}
 		if (left_center_right != 'L')
@@ -1649,6 +1649,7 @@ MainLoop(PsqlSettings *pset, FILE *source)
 	/* We've reached the end of our command input. */
 	bool		success;
 	bool		in_quote;
+	bool		was_bslash;	/* backslash */
 	int			paren_level;
 	char	   *query_start;
 
@@ -1737,7 +1738,7 @@ MainLoop(PsqlSettings *pset, FILE *source)
 		{
 			query_start = line;
 			xcomment = line;
-		};
+		}
 
 		if (line == NULL)
 		{						/* No more input.  Time to quit */
@@ -1774,9 +1775,11 @@ MainLoop(PsqlSettings *pset, FILE *source)
 			{
 				int			i;
 
+				was_bslash = false;
+
 				for (i = 0; i < len; i++)
 				{
-					if (line[i] == '\\')
+					if (line[i] == '\\' && !in_quote)
 					{
 						char		hold_char = line[i];
 
@@ -1791,7 +1794,7 @@ MainLoop(PsqlSettings *pset, FILE *source)
 							else
 							{
 								strcpy(query, query_start);
-							};
+							}
 						}
 						line[i] = hold_char;
 						query_start = line + i;
@@ -1806,32 +1809,32 @@ MainLoop(PsqlSettings *pset, FILE *source)
 						querySent = false;
 					}
 
+					if (was_bslash)
+						was_bslash = false;
+					else if (i > 0 && line[i-1] == '\\')
+						was_bslash = true;
+
 					/* inside a quote? */
-					if (in_quote && (line[i] != '\''))
+					if (in_quote && (line[i] != '\'' || was_bslash))
 					{
-						continue;
-
-						/* inside an extended comment? */
+						/* do nothing */;
 					}
-					else if (xcomment != NULL)
+					else if (xcomment != NULL)	/*inside an extended comment?*/
 					{
 						if (line[i] == '*' && line[i + 1] == '/')
 						{
 							xcomment = NULL;
 							i++;
-						};
-						continue;
-
-						/* possible backslash command? */
+						}
 					}
+						/* possible backslash command? */
 					else if (line[i] == '/' && line[i + 1] == '*')
 					{
 						xcomment = line + i;
 						i++;
-						continue;
 
-						/* single-line comment? truncate line */
 					}
+						/* single-line comment? truncate line */
 					else if ((line[i] == '-' && line[i + 1] == '-') ||
 							 (line[i] == '/' && line[i + 1] == '/'))
 					{
@@ -1840,14 +1843,12 @@ MainLoop(PsqlSettings *pset, FILE *source)
 							fprintf(stdout, "%s\n", line + i);
 						line[i] = '\0'; /* remove comment */
 						break;
-
 					}
 					else if (line[i] == '\'')
 					{
 						in_quote ^= 1;
-
-						/* semi-colon? then send query now */
 					}
+						/* semi-colon? then send query now */
 					else if (!paren_level && line[i] == ';')
 					{
 						char		hold_char = line[i + 1];
@@ -1878,10 +1879,10 @@ MainLoop(PsqlSettings *pset, FILE *source)
 					else if (paren_level && line[i] == ')')
 					{
 						paren_level--;
-					};
+					}
 				}
 			}
-
+puts(line);
 			/* nothing on line after trimming? then ignore */
 			if (line[0] == '\0')
 			{
-- 
GitLab