Это продолжение pyparsing, каждое, имя результата . Я имел большой успех с pyparsing, но я застрял при анализе порядка SQL по предложениям. Проблема в том, что любое из полей может быть установлено в порядке возрастания или убывания.
Итак, запрос 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
.
Есть ли способ справиться с этим с помощью разбора? Был ли мой вопрос неясным?