aboutsummaryrefslogtreecommitdiff
path: root/src/interfaces/ecpg/test/expected/preproc-strings.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2020-10-22 17:34:32 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2020-10-22 18:29:46 -0400
commit3dfb1942d9b8748b93094a430289e2f7f3b3ae0d (patch)
treefc5741979ce8e129518f2da8d0bfdd8948444fdf /src/interfaces/ecpg/test/expected/preproc-strings.c
parent8bb0c9770e80fa79f15b27af8f3c3f2833225aa3 (diff)
downloadpostgresql-3dfb1942d9b8748b93094a430289e2f7f3b3ae0d.tar.gz
postgresql-3dfb1942d9b8748b93094a430289e2f7f3b3ae0d.zip
Avoid premature de-doubling of quote marks in ECPG strings.
If you write the literal 'abc''def' in an EXEC SQL command, that will come out the other end as 'abc'def', triggering a syntax error in the backend. Likewise, "abc""def" is reduced to "abc"def" which is wrong syntax for a quoted identifier. The cause is that the lexer thinks it should emit just one quote mark, whereas what it really should do is keep the string as-is. Add some docs and test cases, too. Although this seems clearly a bug, I fear users wouldn't appreciate changing it in minor releases. Some may well be working around it by applying an extra doubling of affected quotes, as for example sql/dyntest.pgc has been doing. Per investigation of a report from 1250kv, although this isn't exactly what he/she was on about. Discussion: https://postgr.es/m/673825.1603223178@sss.pgh.pa.us
Diffstat (limited to 'src/interfaces/ecpg/test/expected/preproc-strings.c')
-rw-r--r--src/interfaces/ecpg/test/expected/preproc-strings.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/interfaces/ecpg/test/expected/preproc-strings.c b/src/interfaces/ecpg/test/expected/preproc-strings.c
index e695007b133..1e50cd36c38 100644
--- a/src/interfaces/ecpg/test/expected/preproc-strings.c
+++ b/src/interfaces/ecpg/test/expected/preproc-strings.c
@@ -45,7 +45,7 @@ int main(void)
#line 13 "strings.pgc"
- { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "select 'abcdef' , N'abcdef' as foo , E'abc\\bdef' as \"foo\" , U&'d\\0061t\\0061' as U&\"foo\" , U&'d!+000061t!+000061' UESCAPE '!' , $foo$abc$def$foo$", ECPGt_EOIT,
+ { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "select 'abc''d\\ef' , N'abc''d\\ef' as foo , E'abc''d\\\\ef' as \"foo\"\"bar\" , U&'d\\0061t\\0061' as U&\"foo\"\"bar\" , U&'d!+000061t!+000061' UESCAPE '!' , $foo$abc$def$foo$", ECPGt_EOIT,
ECPGt_char,&(s1),(long)0,(long)1,(1)*sizeof(char),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L,
ECPGt_char,&(s2),(long)0,(long)1,(1)*sizeof(char),