aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas G. Lockhart <lockhart@fourpalms.org>2000-08-06 17:50:48 +0000
committerThomas G. Lockhart <lockhart@fourpalms.org>2000-08-06 17:50:48 +0000
commitdf40234639905eb891a0ef92ed13efe31d6aa316 (patch)
treecfb5e0b21801e9a4c1cedd11061d46b82c41dc4d
parentc3e2a951b496f8030442f157b201cbddab5b5662 (diff)
downloadpostgresql-df40234639905eb891a0ef92ed13efe31d6aa316.tar.gz
postgresql-df40234639905eb891a0ef92ed13efe31d6aa316.zip
Support SQL99 embedded double-quote syntax for quoted identifiers.
Allow this in the parser and in pg_dump, but it is probably not enough for a complete solution. Better to have the feature started then never here.
-rw-r--r--src/backend/parser/scan.l6
-rw-r--r--src/bin/pg_dump/common.c13
2 files changed, 16 insertions, 3 deletions
diff --git a/src/backend/parser/scan.l b/src/backend/parser/scan.l
index a909b51008b..eb71d08cbbd 100644
--- a/src/backend/parser/scan.l
+++ b/src/backend/parser/scan.l
@@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/parser/scan.l,v 1.73 2000/07/14 15:43:32 thomas Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/scan.l,v 1.74 2000/08/06 17:50:38 thomas Exp $
*
*-------------------------------------------------------------------------
*/
@@ -136,6 +136,7 @@ xqcat {quote}{whitespace_with_newline}{quote}
dquote \"
xdstart {dquote}
xdstop {dquote}
+xddouble {dquote}{dquote}
xdinside [^"]+
/* C-style comments
@@ -351,6 +352,9 @@ other .
yylval.str = pstrdup(literalbuf);
return IDENT;
}
+<xd>{xddouble} {
+ addlit(yytext, yyleng-1);
+ }
<xd>{xdinside} {
addlit(yytext, yyleng);
}
diff --git a/src/bin/pg_dump/common.c b/src/bin/pg_dump/common.c
index 4e3244f5a5a..d7cb9e488a5 100644
--- a/src/bin/pg_dump/common.c
+++ b/src/bin/pg_dump/common.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/bin/pg_dump/common.c,v 1.44 2000/07/04 14:25:27 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/bin/pg_dump/common.c,v 1.45 2000/08/06 17:50:48 thomas Exp $
*
* Modifications - 6/12/96 - dave@bensoft.com - version 1.13.dhb.2
*
@@ -517,8 +517,10 @@ fmtId(const char *rawid, bool force_quotes)
if (!force_quotes)
{
+ /* do a quick check on the first character... */
if (!islower((int) *rawid))
force_quotes = true;
+ /* otherwise check the entire string */
else
for (cp = rawid; *cp; cp++)
{
@@ -541,8 +543,15 @@ fmtId(const char *rawid, bool force_quotes)
appendPQExpBufferChar(id_return, '\"');
for (cp = rawid; *cp; cp++)
{
+ /* Did we find a double-quote in the string?
+ * Then make this a double double-quote per SQL99.
+ * Before, we put in a backslash/double-quote pair.
+ * - thomas 2000-08-05 */
if (*cp == '\"')
- appendPQExpBufferChar(id_return, '\\');
+ {
+ appendPQExpBufferChar(id_return, '\"');
+ appendPQExpBufferChar(id_return, '\"');
+ }
appendPQExpBufferChar(id_return, *cp);
}
appendPQExpBufferChar(id_return, '\"');