aboutsummaryrefslogtreecommitdiff
path: root/src/interfaces
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2005-07-02 17:01:59 +0000
committerBruce Momjian <bruce@momjian.us>2005-07-02 17:01:59 +0000
commit74b49a81294b2943179078272bc3413b33d16e6f (patch)
tree1f610742e7fffbce204c4a95df8163d98bcaba6f /src/interfaces
parent654efe6aaa65d4bb53a3c888df1143558a1034ad (diff)
downloadpostgresql-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.c17
-rw-r--r--src/interfaces/ecpg/preproc/preproc.y17
-rw-r--r--src/interfaces/libpq/fe-exec.c24
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;
}