Lexing частичный SQL в C#

Я должен был бы проанализировать частичные SQL-запросы (это для инструмента аудита Внедрения SQL). Например,

'1' AND 1=1--

Должен разломать на маркеры как

[0] => [SQL_STRING, '1']
[1] => [SQL_AND]
[2] => [SQL_INT, 1]
[3] => [SQL_AND]
[4] => [SQL_INT, 1]
[5] => [SQL_COMMENT]
[6] => [SQL_QUERY_END]

Их любой, по крайней мере, лексические анализаторы для SQL, что я основываю мой прочь или любые хорошие инструменты как бизон для C# (хотя я не записал бы свою собственную грамматику, поскольку я должен поддерживать больше всего если не вся грамматика MySQL 5),

11
задан Christopher Tarquini 30 May 2010 в 17:58
поделиться

1 ответ

Кажется, есть несколько хороших парсеров.

В этой статье SO есть пример с использованием MS's Entity Framework:
Parsing SQL code in C#

Кажется, кто-то еще сделал свой собственный и выложил его на Code Project:
http://www.codeproject.com/KB/dotnet/SQL_parser.aspx

Лично я бы выбрал решение Entity Framework, поскольку оно было создано и поддерживается MS, но также, вероятно, тесно связано с SQL Server. Поскольку вы рассматриваете MySQL, вы, возможно, захотите выбрать пользовательское решение на Code Project, так как я уверен, что вы сможете вписать больше пользовательских решений, как того требует грамматика.

Я скоро буду использовать это (для Oracle, а не для MySQL), поэтому, пожалуйста, сообщите сообществу, как работает это решение!

UPDATE:
Я только что вернулся к этой теме и прочитал комментарии... после дальнейшего размышления я бы действительно рекомендовал ANTLR, поскольку он поддерживает несколько грамматик. Повторюсь, я не использовал его, поэтому будет хорошо услышать, как он работает, а решать вам.
https://stackoverflow.com/questions/76083/parsing-sql-in-net/76151

2
ответ дан 3 December 2019 в 12:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: