summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndi Albrecht <albrecht.andi@gmail.com>2017-09-21 10:23:07 +0200
committerGitHub <noreply@github.com>2017-09-21 10:23:07 +0200
commit1578f7da759f308a0538625cb37260fed34c9efe (patch)
tree356e7c7e9c044c2d35335e0813e1d5428babe876
parent0dd67c791e0a9fdc29cffdc9d84f811fe124726a (diff)
parent54551c472bdcb92679872b6bcd8348e5542fd2ee (diff)
downloadsqlparse-1578f7da759f308a0538625cb37260fed34c9efe.tar.gz
Merge pull request #330 from atronah/master
adds '1.' option support for float numbers regex
-rw-r--r--sqlparse/keywords.py7
-rw-r--r--tests/test_keywords.py14
2 files changed, 17 insertions, 4 deletions
diff --git a/sqlparse/keywords.py b/sqlparse/keywords.py
index 649b5cc..a1242ab 100644
--- a/sqlparse/keywords.py
+++ b/sqlparse/keywords.py
@@ -54,15 +54,14 @@ SQL_REGEX = {
# Spaces around period `schema . name` are valid identifier
# TODO: Spaces before period not implemented
(r'[A-ZÀ-Ü]\w*(?=\s*\.)', tokens.Name), # 'Name' .
+ # FIXME(atronah): never match,
+ # because `re.match` doesn't work with lookbehind regexp feature
(r'(?<=\.)[A-ZÀ-Ü]\w*', tokens.Name), # .'Name'
(r'[A-ZÀ-Ü]\w*(?=\()', tokens.Name), # side effect: change kw to func
-
- # TODO: `1.` and `.1` are valid numbers
(r'-?0x[\dA-F]+', tokens.Number.Hexadecimal),
(r'-?\d*(\.\d+)?E-?\d+', tokens.Number.Float),
- (r'-?\d*\.\d+', tokens.Number.Float),
+ (r'-?(\d+(\.\d*)|\.\d+)', tokens.Number.Float),
(r'-?\d+(?![_A-ZÀ-Ü])', tokens.Number.Integer),
-
(r"'(''|\\\\|\\'|[^'])*'", tokens.String.Single),
# not a real string literal in ANSI SQL:
(r'(""|".*?[^\\]")', tokens.String.Symbol),
diff --git a/tests/test_keywords.py b/tests/test_keywords.py
new file mode 100644
index 0000000..c197f36
--- /dev/null
+++ b/tests/test_keywords.py
@@ -0,0 +1,14 @@
+# -*- coding: utf-8 -*-
+import pytest
+
+from sqlparse import tokens
+from sqlparse.keywords import SQL_REGEX
+
+
+class TestSQLREGEX:
+ @pytest.mark.parametrize('number', ['1.0', '-1.0',
+ '1.', '-1.',
+ '.1', '-.1'])
+ def test_float_numbers(self, number):
+ ttype = next(tt for action, tt in SQL_REGEX if action(number))
+ assert tokens.Number.Float == ttype