这是pyparsing, Each, results name的延续。我在 pyparsing 方面取得了巨大的成功,但是在按子句解析 SQL order by 时我被卡住了。问题是任何字段都可以设置为升序或降序。
因此,SQL 查询可能如下所示:
SELECT a FROM x WHERE a = b ...
ORDER BY c, d
ORDER BY c asc, d
ORDER BY c asc, d desc
ORDER BY c, d asc
我一直在摸索,我想出的最好的是:
order_dir = oneOf('asc desc', caseless=True)
...
Optional( CaselessKeyword('order by') + columnNameList('order') + Optional(order_dir)('order_dir'))
...
对于类似的东西ORDER BY c asc, d desc
,这匹配c
我订购的第一件事,并且asc
是我的订单目录,但没有到达d
.
['c asc', 'd desc']
只要我仍然可以进入那里,我很乐意将输出视为类似的东西columnNameList
。
有没有办法用pyparsing处理这个问题?我的问题不清楚吗?