summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sqlparse/lexer.py10
-rw-r--r--tests/test_tokenize.py6
2 files changed, 11 insertions, 5 deletions
diff --git a/sqlparse/lexer.py b/sqlparse/lexer.py
index 456c7f4..64ede4c 100644
--- a/sqlparse/lexer.py
+++ b/sqlparse/lexer.py
@@ -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:
@@ -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'),
diff --git a/tests/test_tokenize.py b/tests/test_tokenize.py
index a1dd4a8..3f51a46 100644
--- a/tests/test_tokenize.py
+++ b/tests/test_tokenize.py
@@ -62,6 +62,12 @@ class TestTokenize(unittest.TestCase):
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):