diff options
author | Thomas G. Lockhart <lockhart@fourpalms.org> | 2000-08-06 17:50:48 +0000 |
---|---|---|
committer | Thomas G. Lockhart <lockhart@fourpalms.org> | 2000-08-06 17:50:48 +0000 |
commit | df40234639905eb891a0ef92ed13efe31d6aa316 (patch) | |
tree | cfb5e0b21801e9a4c1cedd11061d46b82c41dc4d | |
parent | c3e2a951b496f8030442f157b201cbddab5b5662 (diff) | |
download | postgresql-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.l | 6 | ||||
-rw-r--r-- | src/bin/pg_dump/common.c | 13 |
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, '\"'); |