我正在尝试使用pyparsing(lib)来解析和获取SQL语句中使用的所有表/视图。我正在尝试使用这个pyprasing lib提供的select_parser.py代码。
我需要帮助理解我必须对select_parser.py代码进行哪些更改才能实现我在下面提到的输出。
我想解析下面的查询并获取字符串中使用的所有表
Select
Col 1,
Col 2
Col3,
(select top 1 name from tableX) as Col4,
col5
from
table1 a
left join table2 b on a.id = b.id
right join table3 c on a.id = c.id
left join
(select id from table4) as d
on c.id = d.id
TableX的,表1,表2,表3,表4
答案 0 :(得分:0)
问题是比较表达式中使用的'identifier'的定义不包含点限定名。
通过更改
中的expr术语来解决此问题expr_term = (
CAST + LPAR + expr + AS + type_name + RPAR |
EXISTS + LPAR + select_stmt + RPAR |
function_name + LPAR + Optional(delimitedList(expr)) + RPAR |
literal_value |
bind_parameter |
identifier
)
到
expr_term = (
CAST + LPAR + expr + AS + type_name + RPAR |
EXISTS + LPAR + select_stmt + RPAR |
function_name + LPAR + Optional(delimitedList(expr)) + RPAR |
literal_value |
bind_parameter |
delimitedList(identifier, delim='.', combine=True)
)