2015-11-07 3 views
1

Есть ли ANTLR грамматика только для предложения where запроса ANSI SQL?Есть ли ANTLR-грамматика только для предложения where запроса ANSI SQL?

Я пытаюсь разобрать условия в разделе where и изменить столбец в этом состоянии на что-то относящееся к индексам, которые у меня есть, так что моя производительность может быть улучшена.

Я хочу автоматизировать эту функцию, поэтому нужно разобрать динамический sql и динамически изменить предложение where.

+0

http://www.antlr3.org/grammar/1062280680642/MS_SQL_SELECT.html – lad2025

+1

Существуют примеры грамматик для MySQL и SQLite [здесь] (https://github.com/antlr/grammars-v4). Вам понадобится вся грамматика, поскольку предложения WHERE могут содержать подзапросы. (и выбрать конкретную версию ANTLR, v3 и v4 значительно отличаются) –

ответ

0

Наверное, нет.

Я предполагаю, что вы нашли грамматику ANTLR для всего ANSI SQL. Выбирать подмножество, которое является только предложением where, на самом деле не должно быть тяжелым.

У вас будет сложнее время модифицировать AST и восстанавливать исходный текст, который, как я полагаю, вы хотите. ANTLR-синтаксические анализаторы не оказывают конкретной помощи в модификации AST, кроме библиотеки для взлома узлов, когда вы их посещаете. Регенерация источника полностью зависит от вас; он может быть реализован путем сплющивания строк, когда вы идете по дереву или лучше, используя шаблоны String. Но то, что произошло сейчас, заключается в том, что ваш интерес к изменению заявления превратился в большую (?) Инженерную работу, прежде чем вы сможете это сделать. См. Мое эссе «Жизнь после парсинга» (из биографии или по поисковому запросу).

Я думаю, что вы хотите, это program transformation system. Это инструменты, которые дают грамматику, могут анализировать исходный код для АСТ и выполнять преобразования в АСТ для достижения желаемого эффекта. Обычно предоставляются PrettyPrinters для регенерации исходного текста.