Avoid premature de-doubling of quote marks in ECPG strings.
Tom Lane <tgl@sss.pgh.pa.us>
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
Files
| Path | Change | +/− |
|---|---|---|
| doc/src/sgml/ecpg.sgml | modified | +14 −3 |
| src/interfaces/ecpg/preproc/pgc.l | modified | +3 −6 |
| src/interfaces/ecpg/test/expected/preproc-strings.c | modified | +1 −1 |
| src/interfaces/ecpg/test/expected/preproc-strings.stderr | modified | +4 −4 |
| src/interfaces/ecpg/test/expected/preproc-strings.stdout | modified | +1 −1 |
| src/interfaces/ecpg/test/preproc/strings.pgc | modified | +4 −4 |
| src/interfaces/ecpg/test/sql/dyntest.pgc | modified | +1 −1 |
Documentation touched
Discussion
- ECPG gets embedded quotes wrong 3 messages · 2020-10-20 → 2020-10-22