Bug fixes for alias&join. Add test in presentation.

This commit is contained in:
2022-09-20 02:21:49 +08:00
parent 2614d010da
commit ff63be720c
24 changed files with 1135 additions and 146 deletions
+4 -1
View File
@@ -44,6 +44,7 @@ LEFT = keyword("left")
LIKE = keyword("like")
LIMIT = keyword("limit").suppress()
MINUS = keyword("minus")
NATURAL = keyword("natural")
OFFSET = keyword("offset").suppress()
ON = keyword("on").suppress()
ORDER = keyword("order").suppress()
@@ -145,7 +146,7 @@ VIEW = keyword("view")
joins = (
(
Optional(CROSS | OUTER | INNER | ((FULL | LEFT | RIGHT) + Optional(INNER | OUTER)))
Optional(CROSS | OUTER | INNER | NATURAL | ((FULL | LEFT | RIGHT) + Optional(INNER | OUTER)))
+ JOIN
+ Optional(LATERAL)
)
@@ -214,6 +215,7 @@ RESERVED = MatchFirst([
LIKE,
LIMIT,
MINUS,
NATURAL,
NOCASE,
NOT,
NULL,
@@ -253,6 +255,7 @@ EQ = Char("=").suppress()
join_keywords = {
"join",
"natural join",
"full join",
"cross join",
"inner join",
+10 -6
View File
@@ -323,9 +323,12 @@ def parser(literal_string, ident, sqlserver=False):
table_source = Forward()
assumption = Group((ASC|DESC) ("sort") + var_name("value"))
assumptions = Optional(ASSUMING.suppress() + Group(delimited_list(assumption)))
join = (
Group(joins)("op")
+ table_source("join")
+ (table_source )("join")
+ Optional((ON + expr("on")) | (USING + expr("using")))
| (
Group(WINDOW)("op")
@@ -403,7 +406,12 @@ def parser(literal_string, ident, sqlserver=False):
| selection
+ Optional(INTO + table_source("into"))
+ Optional(
(FROM + delimited_list(table_source) + ZeroOrMore(join))("from")
(
FROM
+ (delimited_list(table_source)
+ ZeroOrMore(join))("table_source")
+ Optional(assumptions) ("assumptions")
)("from")
+ Optional(WHERE + expr("where"))
+ Optional(GROUP_BY + delimited_list(Group(named_column))("groupby"))
+ Optional(HAVING + expr("having"))
@@ -443,12 +451,8 @@ def parser(literal_string, ident, sqlserver=False):
+ RB,
)
assumption = Group((ASC|DESC) ("sort") + var_name("value"))
assumptions = (ASSUMING + Group(delimited_list(assumption))("assumptions"))
table_source << Group(
((LB + query + RB) | stack | call_function | var_name)("value")
+ Optional(assumptions)
+ Optional(flag("with ordinality"))
+ Optional(tablesample)
+ alias