Skip to content

Commit 6e476cf

Browse files
committed
Fix incorrect parsing of string literals with line breaks (fixes andialbrecht#118).
1 parent 5bc1498 commit 6e476cf

File tree

3 files changed

+15
-2
lines changed

3 files changed

+15
-2
lines changed

CHANGES

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
Development
2+
-----------
3+
4+
Bug Fixes
5+
* Fix incorrect parsing of string literals containing line breaks (issue118).
6+
7+
18
Release 0.1.10 (Nov 02, 2013)
29
-----------------------------
310

sqlparse/lexer.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ class Lexer(object):
191191
(r'[-]?[0-9]*\.[0-9]+', tokens.Number.Float),
192192
(r'[-]?[0-9]+', tokens.Number.Integer),
193193
# TODO: Backslash escapes?
194-
(r"(''|'.*?[^\\]')", tokens.String.Single),
194+
(r"'(''|\\'|[^'])*'", tokens.String.Single),
195195
# not a real string literal in ANSI SQL:
196196
(r'(""|".*?[^\\]")', tokens.String.Symbol),
197197
(r'(\[.*[^\]]\])', tokens.Name),
@@ -209,7 +209,7 @@ class Lexer(object):
209209
(r'/\*', tokens.Comment.Multiline, 'multiline-comments'),
210210
(r'\*/', tokens.Comment.Multiline, '#pop'),
211211
(r'[^/\*]+', tokens.Comment.Multiline),
212-
(r'[/*]', tokens.Comment.Multiline)
212+
(r'[/*]', tokens.Comment.Multiline),
213213
]}
214214

215215
def __init__(self):

tests/test_parse.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,3 +169,9 @@ def test_double_quotes_are_identifiers():
169169
p = sqlparse.parse('"foo"')[0].tokens
170170
assert len(p) == 1
171171
assert isinstance(p[0], sqlparse.sql.Identifier)
172+
173+
174+
def test_single_quotes_with_linebreaks(): # issue118
175+
p = sqlparse.parse("'f\nf'")[0].tokens
176+
assert len(p) == 1
177+
assert p[0].ttype is T.String.Single

0 commit comments

Comments
 (0)