Skip to content

Commit

Permalink
Fixed lexer to accept negative numbers (fixes issue56).
Browse files Browse the repository at this point in the history
  • Loading branch information
kevinjqiu committed Jan 10, 2012
1 parent a66921a commit c794c97
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 5 deletions.
10 changes: 5 additions & 5 deletions sqlparse/lexer.py
Original file line number Diff line number Diff line change
Expand Up @@ -180,11 +180,9 @@ class Lexer(object):
(r'[$:?%][a-zA-Z0-9_]+[^$:?%]?', tokens.Name.Placeholder),
(r'@[a-zA-Z_][a-zA-Z0-9_]+', tokens.Name),
(r'[a-zA-Z_][a-zA-Z0-9_]*(?=[.(])', tokens.Name), # see issue39
(r'[<>=~!]+', tokens.Operator.Comparison),
(r'[+/@#%^&|`?^-]+', tokens.Operator),
(r'0x[0-9a-fA-F]+', tokens.Number.Hexadecimal),
(r'[0-9]*\.[0-9]+', tokens.Number.Float),
(r'[0-9]+', tokens.Number.Integer),
(r'[-]?0x[0-9a-fA-F]+', tokens.Number.Hexadecimal),
(r'[-]?[0-9]*\.[0-9]+', tokens.Number.Float),
(r'[-]?[0-9]+', tokens.Number.Integer),
# TODO: Backslash escapes?
(r"(''|'.*?[^\\]')", tokens.String.Single),
# not a real string literal in ANSI SQL:
Expand All @@ -197,6 +195,8 @@ class Lexer(object):
(r'(?<=\.)[a-zA-Z_][a-zA-Z0-9_]*', tokens.Name),
(r'[a-zA-Z_][a-zA-Z0-9_]*', is_keyword),
(r'[;:()\[\],\.]', tokens.Punctuation),
(r'[<>=~!]+', tokens.Operator.Comparison),
(r'[+/@#%^&|`?^-]+', tokens.Operator),
],
'multiline-comments': [
(r'/\*', tokens.Comment.Multiline, 'multiline-comments'),
Expand Down
6 changes: 6 additions & 0 deletions tests/test_tokenize.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,12 @@ def test_inline_keywords(self): # issue 7
self.assertEqual(tokens[2][0], Name)
self.assertEqual(tokens[2][1], 'join_col')

def test_negative_numbers(self):
sql = "values(-1)"
tokens = list(lexer.tokenize(sql))
self.assertEqual(len(tokens), 4)
self.assertEqual(tokens[2][0], Number.Integer)
self.assertEqual(tokens[2][1], '-1')

class TestToken(unittest.TestCase):

Expand Down

0 comments on commit c794c97

Please sign in to comment.