diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2021-02-18 10:02:51 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-18 10:02:51 +0100 |
commit | ed0a4e731184393da1222980209e705f27bd6562 (patch) | |
tree | 7dd376ccb5978d5ed04a7a7bbaaa6f1357ad7d0b /lib/pure | |
parent | 301d78425649026636e6f840f6d2aeb2ea6cbc05 (diff) | |
download | Nim-ed0a4e731184393da1222980209e705f27bd6562.tar.gz |
fixes #16585 (#17074)
Diffstat (limited to 'lib/pure')
-rw-r--r-- | lib/pure/parsesql.nim | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/lib/pure/parsesql.nim b/lib/pure/parsesql.nim index 23d43dfe0..7d9694412 100644 --- a/lib/pure/parsesql.nim +++ b/lib/pure/parsesql.nim @@ -1179,9 +1179,12 @@ type proc add(s: var SqlWriter, thing: char) = s.buffer.add(thing) -proc add(s: var SqlWriter, thing: string) = +proc prepareAdd(s: var SqlWriter) {.inline.} = if s.buffer.len > 0 and s.buffer[^1] notin {' ', '\L', '(', '.'}: s.buffer.add(" ") + +proc add(s: var SqlWriter, thing: string) = + s.prepareAdd s.buffer.add(thing) proc addKeyw(s: var SqlWriter, thing: string) = @@ -1223,6 +1226,17 @@ proc addMulti(s: var SqlWriter, n: SqlNode, sep = ',', prefix, suffix: char) = proc quoted(s: string): string = "\"" & replace(s, "\"", "\"\"") & "\"" +func escape(result: var string; s: string) = + result.add('\'') + for c in items(s): + case c + of '\0'..'\31': + result.add("\\x") + result.add(toHex(ord(c), 2)) + of '\'': result.add("''") + else: result.add(c) + result.add('\'') + proc ra(n: SqlNode, s: var SqlWriter) = if n == nil: return case n.kind @@ -1235,7 +1249,8 @@ proc ra(n: SqlNode, s: var SqlWriter) = of nkQuotedIdent: s.add(quoted(n.strVal)) of nkStringLit: - s.add(escape(n.strVal, "'", "'")) + s.prepareAdd + s.buffer.escape(n.strVal) of nkBitStringLit: s.add("b'" & n.strVal & "'") of nkHexStringLit: |