Skip to content

Commit 15b0cb9

Browse files
committed
Allow identifiers to start with an underscore (fixes andialbrecht#175).
1 parent 811b69a commit 15b0cb9

File tree

3 files changed

+11
-2
lines changed

3 files changed

+11
-2
lines changed

CHANGES

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ Bug Fixes
77
* Add missing SQL types (issue154, issue155, issue156, by jukebox).
88
* Fix parsing of multi-line comments (issue172, by JacekPliszka).
99
* Fix parsing of escaped backslashes (issue174, by caseyching).
10+
* Fix parsing of identifiers starting with underscore (issue175).
1011

1112
Enhancements
1213
* Improve formatting of HAVING statements.

sqlparse/lexer.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ class Lexer(object):
202202
(r'CREATE(\s+OR\s+REPLACE)?\b', tokens.Keyword.DDL),
203203
(r'DOUBLE\s+PRECISION\b', tokens.Name.Builtin),
204204
(r'(?<=\.)[^\W\d_]\w*', tokens.Name),
205-
(r'[^\W\d_]\w*', is_keyword),
205+
(r'[^\W\d]\w*', is_keyword),
206206
(r'[;:()\[\],\.]', tokens.Punctuation),
207207
(r'[<>=~!]+', tokens.Operator.Comparison),
208208
(r'[+/@#%^&|`?^-]+', tokens.Operator),
@@ -292,7 +292,6 @@ def get_tokens_unprocessed(self, stream, stack=('root',)):
292292
for rexmatch, action, new_state in statetokens:
293293
m = rexmatch(text, pos)
294294
if m:
295-
# print rex.pattern
296295
value = m.group()
297296
if value in known_names:
298297
yield pos, known_names[value], value

tests/test_parse.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,15 @@ def test_quoted_identifier():
145145
assert t[2].get_real_name() == 'y'
146146

147147

148+
@pytest.mark.parametrize('name', [
149+
'foo',
150+
'_foo',
151+
])
152+
def test_valid_identifier_names(name): # issue175
153+
t = sqlparse.parse(name)[0].tokens
154+
assert isinstance(t[0], sqlparse.sql.Identifier)
155+
156+
148157
def test_psql_quotation_marks(): # issue83
149158
# regression: make sure plain $$ work
150159
t = sqlparse.split("""

0 commit comments

Comments
 (0)