diff options
| author | atronah <atronah.ds@gmail.com> | 2017-04-29 14:49:38 +0300 |
|---|---|---|
| committer | atronah <atronah.ds@gmail.com> | 2017-04-30 19:07:14 +0300 |
| commit | 4dd31c48c5ef42ea731e0c6a86b99cb3c89f0a6a (patch) | |
| tree | 08546a16827a0e32fc8e05868f969843304e43c1 | |
| parent | 662280e5e6fa1953c8a4b93f98f301a40b86ba0f (diff) | |
| download | sqlparse-4dd31c48c5ef42ea731e0c6a86b99cb3c89f0a6a.tar.gz | |
adds '1.' option support for float numbers regex
| -rw-r--r-- | sqlparse/keywords.py | 5 | ||||
| -rw-r--r-- | tests/test_keywords.py | 14 |
2 files changed, 17 insertions, 2 deletions
diff --git a/sqlparse/keywords.py b/sqlparse/keywords.py index f742598..fbc77d5 100644 --- a/sqlparse/keywords.py +++ b/sqlparse/keywords.py @@ -53,13 +53,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+', tokens.Number.Integer), (r"'(''|\\\\|\\'|[^'])*'", tokens.String.Single), 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 |
