Commit cad3e709 authored by Bruce Momjian's avatar Bruce Momjian

Fix for backslash quote.

parent 38d2ca54
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * 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) ...@@ -1185,7 +1185,7 @@ do_help(PsqlSettings *pset, const char *topic)
printf("%-25s\n", QL_HELP[i].cmd); printf("%-25s\n", QL_HELP[i].cmd);
left_center_right = 'L'; left_center_right = 'L';
break; break;
}; }
i++; i++;
} }
if (left_center_right != 'L') if (left_center_right != 'L')
...@@ -1649,6 +1649,7 @@ MainLoop(PsqlSettings *pset, FILE *source) ...@@ -1649,6 +1649,7 @@ MainLoop(PsqlSettings *pset, FILE *source)
/* We've reached the end of our command input. */ /* We've reached the end of our command input. */
bool success; bool success;
bool in_quote; bool in_quote;
bool was_bslash; /* backslash */
int paren_level; int paren_level;
char *query_start; char *query_start;
...@@ -1737,7 +1738,7 @@ MainLoop(PsqlSettings *pset, FILE *source) ...@@ -1737,7 +1738,7 @@ MainLoop(PsqlSettings *pset, FILE *source)
{ {
query_start = line; query_start = line;
xcomment = line; xcomment = line;
}; }
if (line == NULL) if (line == NULL)
{ /* No more input. Time to quit */ { /* No more input. Time to quit */
...@@ -1774,9 +1775,11 @@ MainLoop(PsqlSettings *pset, FILE *source) ...@@ -1774,9 +1775,11 @@ MainLoop(PsqlSettings *pset, FILE *source)
{ {
int i; int i;
was_bslash = false;
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
{ {
if (line[i] == '\\') if (line[i] == '\\' && !in_quote)
{ {
char hold_char = line[i]; char hold_char = line[i];
...@@ -1791,7 +1794,7 @@ MainLoop(PsqlSettings *pset, FILE *source) ...@@ -1791,7 +1794,7 @@ MainLoop(PsqlSettings *pset, FILE *source)
else else
{ {
strcpy(query, query_start); strcpy(query, query_start);
}; }
} }
line[i] = hold_char; line[i] = hold_char;
query_start = line + i; query_start = line + i;
...@@ -1806,32 +1809,32 @@ MainLoop(PsqlSettings *pset, FILE *source) ...@@ -1806,32 +1809,32 @@ MainLoop(PsqlSettings *pset, FILE *source)
querySent = false; querySent = false;
} }
if (was_bslash)
was_bslash = false;
else if (i > 0 && line[i-1] == '\\')
was_bslash = true;
/* inside a quote? */ /* inside a quote? */
if (in_quote && (line[i] != '\'')) if (in_quote && (line[i] != '\'' || was_bslash))
{ {
continue; /* do nothing */;
/* inside an extended comment? */
} }
else if (xcomment != NULL) else if (xcomment != NULL) /*inside an extended comment?*/
{ {
if (line[i] == '*' && line[i + 1] == '/') if (line[i] == '*' && line[i + 1] == '/')
{ {
xcomment = NULL; xcomment = NULL;
i++; i++;
};
continue;
/* possible backslash command? */
} }
}
/* possible backslash command? */
else if (line[i] == '/' && line[i + 1] == '*') else if (line[i] == '/' && line[i + 1] == '*')
{ {
xcomment = line + i; xcomment = line + i;
i++; i++;
continue;
/* single-line comment? truncate line */
} }
/* single-line comment? truncate line */
else if ((line[i] == '-' && line[i + 1] == '-') || else if ((line[i] == '-' && line[i + 1] == '-') ||
(line[i] == '/' && line[i + 1] == '/')) (line[i] == '/' && line[i + 1] == '/'))
{ {
...@@ -1840,14 +1843,12 @@ MainLoop(PsqlSettings *pset, FILE *source) ...@@ -1840,14 +1843,12 @@ MainLoop(PsqlSettings *pset, FILE *source)
fprintf(stdout, "%s\n", line + i); fprintf(stdout, "%s\n", line + i);
line[i] = '\0'; /* remove comment */ line[i] = '\0'; /* remove comment */
break; break;
} }
else if (line[i] == '\'') else if (line[i] == '\'')
{ {
in_quote ^= 1; in_quote ^= 1;
/* semi-colon? then send query now */
} }
/* semi-colon? then send query now */
else if (!paren_level && line[i] == ';') else if (!paren_level && line[i] == ';')
{ {
char hold_char = line[i + 1]; char hold_char = line[i + 1];
...@@ -1878,10 +1879,10 @@ MainLoop(PsqlSettings *pset, FILE *source) ...@@ -1878,10 +1879,10 @@ MainLoop(PsqlSettings *pset, FILE *source)
else if (paren_level && line[i] == ')') else if (paren_level && line[i] == ')')
{ {
paren_level--; paren_level--;
};
} }
} }
}
puts(line);
/* nothing on line after trimming? then ignore */ /* nothing on line after trimming? then ignore */
if (line[0] == '\0') if (line[0] == '\0')
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment