]> granicus.if.org Git - postgresql/commitdiff
psql thought that backslash is an escape character inside double quotes.
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 12 Oct 2002 23:09:34 +0000 (23:09 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 12 Oct 2002 23:09:34 +0000 (23:09 +0000)
It isn't.

src/bin/psql/mainloop.c

index 6d9367f761174f1d2271ab58fa65f37f26dd91ac..1f84d507963cbefc841c681c84e6186baeadd953 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright 2000 by PostgreSQL Global Development Group
  *
- * $Header: /cvsroot/pgsql/src/bin/psql/mainloop.c,v 1.50 2002/09/04 20:31:36 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/mainloop.c,v 1.51 2002/10/12 23:09:34 tgl Exp $
  */
 #include "postgres_fe.h"
 #include "mainloop.h"
@@ -300,9 +300,13 @@ MainLoop(FILE *source)
                        /* in quote? */
                        if (in_quote)
                        {
-                               /* end of quote */
-                               if (line[i] == in_quote && bslash_count % 2 == 0)
-                                       in_quote = '\0';
+                               /*
+                                * end of quote if matching non-backslashed character.
+                                * backslashes don't count for double quotes, though.
+                                */
+                               if (line[i] == in_quote &&
+                                       (bslash_count % 2 == 0 || in_quote == '"'))
+                                       in_quote = 0;
                        }
 
                        /* in extended comment? */
@@ -330,12 +334,10 @@ MainLoop(FILE *source)
                                ADVANCE_1;
                        }
 
-                       /* start of quote */
-                       else if (!was_bslash &&
-                                        (line[i] == '\'' || line[i] == '"'))
+                       /* start of quote? */
+                       else if (line[i] == '\'' || line[i] == '"')
                                in_quote = line[i];
 
-
                        /* single-line comment? truncate line */
                        else if (line[i] == '-' && line[i + thislen] == '-')
                        {
@@ -446,6 +448,7 @@ MainLoop(FILE *source)
                                /* remove the backslash */
                                memmove(line + i - prevlen, line + i, len - i + 1);
                                len--;
+                               i--;
                        }
 
                        /* backslash command */