Skip to content

Commit 3611afa

Browse files
authored
fix(parser): adapts to double value (#27)
* fix(parser): adapts to double value * fix(parser): adapts to double value * fix(parser): adapts to double value
1 parent 8811add commit 3611afa

File tree

3 files changed

+20
-3
lines changed

3 files changed

+20
-3
lines changed

parser/oceanbase_parser/lexer.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
reserved = sorted(set(presto_tokens).difference(presto_nonreserved))
1818

19-
tokens = ['INTEGER', 'DECIMAL', 'NUMBER',
19+
tokens = ['INTEGER', 'NUMBER', 'DOUBLE',
2020
'IDENTIFIER', 'DIGIT_IDENTIFIER',
2121
'QUOTED_IDENTIFIER', 'BACKQUOTED_IDENTIFIER',
2222
'STRING', 'PERIOD',
@@ -56,6 +56,15 @@
5656
t_ignore = ' \t'
5757

5858

59+
def t_DOUBLE(t):
60+
r"""(\d+(?:\.\d*)?(?:[eE][+-]?\d+)?|\d*(?:\.\d+)(?:[eE][+-]?\d+)?)"""
61+
if 'e' in t.value or 'E' in t.value or '.' in t.value:
62+
t.type = 'DOUBLE'
63+
else:
64+
t.type = "INTEGER"
65+
return t
66+
67+
5968
def t_INTEGER(t):
6069
r'\d+'
6170
t.type = "INTEGER"

parser/oceanbase_parser/parser.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1059,9 +1059,9 @@ def p_quoted_identifier(p):
10591059

10601060

10611061
def p_number(p):
1062-
r"""number : DECIMAL
1062+
r"""number : DOUBLE
10631063
| INTEGER"""
1064-
if p.slice[1].type == "DECIMAL":
1064+
if p.slice[1].type == "DOUBLE":
10651065
p[0] = DoubleLiteral(p.lineno(1), p.lexpos(1), p[1])
10661066
else:
10671067
p[0] = LongLiteral(p.lineno(1), p.lexpos(1), p[1])

test/parser/test_parser_dml.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,14 @@ def test_current_date(self):
441441
result = oceanbase_parser.parse(sql)
442442
assert isinstance(result, Statement)
443443

444+
def test_double_type(self):
445+
sql = """
446+
SELECT Winner FROM table_11621915_1 WHERE Purse > 964017.2297960471 AND Date_ds = "may 28"
447+
"""
448+
sql = Utils.remove_sql_text_affects_parser(sql)
449+
result = oceanbase_parser.parse(sql)
450+
assert isinstance(result, Statement)
451+
444452

445453
if __name__ == '__main__':
446454
unittest.main()

0 commit comments

Comments
 (0)