diff options
author | Bruce Momjian <bruce@momjian.us> | 2005-07-02 17:01:59 +0000 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 2005-07-02 17:01:59 +0000 |
commit | 74b49a81294b2943179078272bc3413b33d16e6f (patch) | |
tree | 1f610742e7fffbce204c4a95df8163d98bcaba6f /src/interfaces | |
parent | 654efe6aaa65d4bb53a3c888df1143558a1034ad (diff) | |
download | postgresql-74b49a81294b2943179078272bc3413b33d16e6f.tar.gz postgresql-74b49a81294b2943179078272bc3413b33d16e6f.zip |
Add E'' to internally created SQL strings that contain backslashes.
Improve code clarity by using macros for E'' processing.
Diffstat (limited to 'src/interfaces')
-rw-r--r-- | src/interfaces/ecpg/ecpglib/execute.c | 17 | ||||
-rw-r--r-- | src/interfaces/ecpg/preproc/preproc.y | 17 | ||||
-rw-r--r-- | src/interfaces/libpq/fe-exec.c | 24 |
3 files changed, 21 insertions, 37 deletions
diff --git a/src/interfaces/ecpg/ecpglib/execute.c b/src/interfaces/ecpg/ecpglib/execute.c index c585a81b580..e1e8a43f4f3 100644 --- a/src/interfaces/ecpg/ecpglib/execute.c +++ b/src/interfaces/ecpg/ecpglib/execute.c @@ -1,4 +1,4 @@ -/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.40 2005/06/02 12:35:11 meskes Exp $ */ +/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.41 2005/07/02 17:01:53 momjian Exp $ */ /* * The aim is to get a simpler inteface to the database routines. @@ -45,21 +45,14 @@ quote_postgres(char *arg, int lineno) if (!res) return (res); + if (strchr(arg, '\\') != NULL) + res[ri++] = ESCAPE_STRING_SYNTAX; res[ri++] = '\''; for (i = 0; arg[i]; i++, ri++) { - switch (arg[i]) - { - case '\'': - res[ri++] = '\''; - break; - case '\\': - res[ri++] = '\\'; - break; - default: - ; - } + if (SQL_STR_DOUBLE(arg[i])) + res[ri++] = arg[i]; res[ri] = arg[i]; } diff --git a/src/interfaces/ecpg/preproc/preproc.y b/src/interfaces/ecpg/preproc/preproc.y index 0dba4251a00..e0cadf87842 100644 --- a/src/interfaces/ecpg/preproc/preproc.y +++ b/src/interfaces/ecpg/preproc/preproc.y @@ -1,4 +1,4 @@ -/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.307 2005/02/10 08:06:35 meskes Exp $ */ +/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.308 2005/07/02 17:01:53 momjian Exp $ */ /* Copyright comment */ %{ @@ -4216,11 +4216,16 @@ Bconst: BCONST { $$ = make_name();}; Xconst: XCONST { $$ = make_name();}; Sconst: SCONST { - $$ = (char *)mm_alloc(strlen($1) + 3); - $$[0]='\''; - strcpy($$+1, $1); - $$[strlen($1)+2]='\0'; - $$[strlen($1)+1]='\''; + char *ret; + + $$ = ret = (char *)mm_alloc(strlen($1) + 4); + if (strchr($1, '\\') != NULL) + *ret++ = ESCAPE_STRING_SYNTAX; + *ret++ = '\''; + strcpy(ret, $1); + ret += strlen($1); + *ret++ = '\''; + *ret++ = '\0'; free($1); } ; diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c index 64ef9cd4282..64b4638b699 100644 --- a/src/interfaces/libpq/fe-exec.c +++ b/src/interfaces/libpq/fe-exec.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/interfaces/libpq/fe-exec.c,v 1.169 2005/06/12 00:00:21 neilc Exp $ + * $PostgreSQL: pgsql/src/interfaces/libpq/fe-exec.c,v 1.170 2005/07/02 17:01:54 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -2368,23 +2368,9 @@ PQescapeString(char *to, const char *from, size_t length) while (remaining > 0 && *source != '\0') { - switch (*source) - { - case '\\': - *target++ = '\\'; - *target++ = '\\'; - break; - - case '\'': - *target++ = '\''; - *target++ = '\''; - break; - - default: - *target++ = *source; - break; - } - source++; + if (SQL_STR_DOUBLE(*source)) + *target++ = *source; + *target++ = *source++; remaining--; } @@ -2449,7 +2435,7 @@ PQescapeBytea(const unsigned char *bintext, size_t binlen, size_t *bytealen) } else if (*vp == '\'') { - rp[0] = '\\'; + rp[0] = '\''; rp[1] = '\''; rp += 2; } |