Skip to content

Commit c930736

Browse files
authored
Merge pull request #7 from qidi1/fix-time-interval-format-error
fix format time interval error
2 parents 619835e + b0a84c4 commit c930736

File tree

10 files changed

+58
-267
lines changed

10 files changed

+58
-267
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ Query(query_body=QuerySpecification(select=Select(distinct=False, select_items=[
3434
### Format SQL
3535
```python
3636
>>> from sqlgpt_parser.format.formatter import format_sql
37-
>>> from sqlgpt_parser.mysql_parser import parser
37+
>>> from sqlgpt_parser.parser.mysql_parser import parser
3838
>>> result=parser.parse("select * from t")
3939
>>> format_sql(result)
4040
'SELECT\n *\nFROM\n t'

docs/docs-ch/Parser Module Development Guide.md

Lines changed: 0 additions & 257 deletions
This file was deleted.

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "flit_core.buildapi"
44

55
[project]
66
name = "sqlgpt-parser"
7-
version = "0.0.1a3"
7+
version = "0.0.1a4"
88
authors = [
99
{ name="luliwjc", email="[email protected]" },
1010
{ name="Ifffff", email="[email protected]" },

sqlgpt_parser/format/formatter.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ def visit_at_time_zone(self, node, context):
3636
self.process(node.time_zone, context),
3737
)
3838

39+
def visit_time_interval(self, node, context):
40+
return f"INTERVAL {self.process(node.value, context)} {node.unit.upper()}"
41+
3942
def visit_current_time(self, node, unmangle_names):
4043
return "%s%s" % (node.type, "(%s)" % node.precision if node.precision else "")
4144

@@ -106,7 +109,7 @@ def visit_dereference_expression(self, node, unmangle_names):
106109

107110
def visit_function_call(self, node, unmangle_names):
108111
ret = ""
109-
arguments = self._join_expressions(node.args, unmangle_names)
112+
arguments = self._join_expressions(node.arguments, unmangle_names)
110113
if "count" == node.name.lower() and len(arguments) != 0 and arguments[0] == '*':
111114
arguments = "*"
112115
if node.distinct:

sqlgpt_parser/parser/mysql_parser/parser.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
TrimFunc,
6060
WhenClause,
6161
JsonTableColumn,
62+
TimeInterval,
6263
)
6364
from sqlgpt_parser.parser.tree.grouping import SimpleGroupBy
6465
from sqlgpt_parser.parser.tree.join_criteria import JoinOn, JoinUsing, NaturalJoin
@@ -72,6 +73,7 @@
7273
TimeLiteral,
7374
DefaultLiteral,
7475
ErrorLiteral,
76+
TimestampLiteral,
7577
)
7678
from sqlgpt_parser.parser.tree.node import Node
7779
from sqlgpt_parser.parser.tree.qualified_name import QualifiedName
@@ -689,7 +691,12 @@ def p_date_lit(p):
689691
r"""date_lit : DATE string_lit
690692
| TIME string_lit
691693
| TIMESTAMP string_lit"""
692-
p[0] = DateLiteral(p.lineno(1), p.lexpos(1), value=p[2], unit=p[1])
694+
if p.slice[1].type.upper() == "DATE":
695+
p[0] = DateLiteral(p.lineno(1), p.lexpos(1), value=p[2])
696+
elif p.slice[1].type.upper() == "TIME":
697+
p[0] = TimeLiteral(p.lineno(1), p.lexpos(1), value=p[2])
698+
elif p.slice[1].type.upper() == "TIMESTAMP":
699+
p[0] = TimestampLiteral(p.lineno(1), p.lexpos(1), value=p[2])
693700

694701

695702
def p_order(p):
@@ -3437,7 +3444,7 @@ def p_time_interval(p):
34373444
r"""time_interval : INTERVAL expression time_unit
34383445
| QM"""
34393446
if len(p) == 4:
3440-
p[0] = TimeLiteral(p.lineno(1), p.lexpos(1), value=p[2], unit=p[3])
3447+
p[0] = TimeInterval(p.lineno(1), p.lexpos(1), value=p[2], unit=p[3])
34413448
else:
34423449
p[0] = p[1]
34433450

sqlgpt_parser/parser/oceanbase_parser/parser.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
TrimFunc,
6060
WhenClause,
6161
JsonTableColumn,
62+
TimeInterval,
6263
)
6364
from sqlgpt_parser.parser.tree.grouping import SimpleGroupBy
6465
from sqlgpt_parser.parser.tree.join_criteria import JoinOn, JoinUsing, NaturalJoin
@@ -72,6 +73,7 @@
7273
TimeLiteral,
7374
DefaultLiteral,
7475
ErrorLiteral,
76+
TimestampLiteral,
7577
)
7678
from sqlgpt_parser.parser.tree.node import Node
7779
from sqlgpt_parser.parser.tree.qualified_name import QualifiedName
@@ -686,7 +688,12 @@ def p_date_lit(p):
686688
r"""date_lit : DATE string_lit
687689
| TIME string_lit
688690
| TIMESTAMP string_lit"""
689-
p[0] = DateLiteral(p.lineno(1), p.lexpos(1), value=p[2], unit=p[1])
691+
if p.slice[1].type.upper() == "DATE":
692+
p[0] = DateLiteral(p.lineno(1), p.lexpos(1), value=p[2])
693+
elif p.slice[1].type.upper() == "TIME":
694+
p[0] = TimeLiteral(p.lineno(1), p.lexpos(1), value=p[2])
695+
elif p.slice[1].type.upper() == "TIMESTAMP":
696+
p[0] = TimestampLiteral(p.lineno(1), p.lexpos(1), value=p[2])
690697

691698

692699
def p_order(p):
@@ -3859,7 +3866,7 @@ def p_time_interval(p):
38593866
r"""time_interval : INTERVAL expression time_unit
38603867
| QM"""
38613868
if len(p) == 4:
3862-
p[0] = TimeLiteral(p.lineno(1), p.lexpos(1), value=p[2], unit=p[3])
3869+
p[0] = TimeInterval(p.lineno(1), p.lexpos(1), value=p[2], unit=p[3])
38633870
else:
38643871
p[0] = p[1]
38653872

0 commit comments

Comments
 (0)