Как разобрать /tokenize инструкцию SQL в Node.js
Я ищу способ разбора /tokenize инструкции SQL в приложении Node.js, чтобы:
- Обозначить все ключевые слова SQL "основы", определенные в стандарт ISO/IEC 9075 или здесь.
- Подтвердить синтаксис SQL.
- Узнайте, что будет делать запрос (например, читать или писать?).
Есть ли у вас какое-либо решение или советует подглядывать?
Связано: Любая библиотека Javascript/JQuery Чтобы проверить статус SQL?
Я провел исследование, и я узнал, как это сделать:
Использование существующих библиотек Node.js
Я сделал поиск Google, и я не нашел подходящую и популярную библиотеку. Я нашел те:
- simple-sql-parser (22 звезды на github, 16 ежедневная загрузка на npm)
- Поддерживает только SELECT, INSERT, UPDATE и DELETE
- Существует ветвь v2 на дороге
- sql-parser (90 звезд на github, 6 ежедневных загрузок на npm)
- Поддерживает только базовые операторы SELECT
- На основе jison
- sqljs (17 звезд на github, 5 ежедневных загрузок на npm)
- v0.0.0-3, в разработке... Нет документации вообще:)
К сожалению, ни одна из этих библиотек не может быть полной и надежной.
Выполнение этого самостоятельно на основе библиотеки токенизатора с низким уровнем Node.js
Я могу сделать это сам с низкоуровневой библиотекой токенов, например:
Выполнение этого на основе существующего JavaScript-кода
CodeMirror - довольно крутая библиотека Javascript (сторона браузера), которая может распознавать ключевые слова SQL, строки и т.д. Проверьте ou демо.
Я могу создать токенизатор библиотеки Node.js на основе CodeMirror.
Режим SQL здесь, на github, я могу адаптировать его для получения токенов в приложении node.
PS: CodeMirror имеет 5,046 звезд на github и в хорошем состоянии.
Ответы
Ответ 1
Удачи.
Вы не указали, какой SQL, но большая часть языков SQL производства огромна (проверьте PL/SQL, игнорируя часть Ada), сложная и не то же самое, поэтому вам также придется беспокоиться о вариантах диалектов. Вы сталкиваетесь с созданием полного интерфейса SQL, чтобы делать то, что вы хотите; неполнота других парсеров, которые вы нашли, - это намек на уровень усилий, который требуется для этого.
После того, как вы получите парсерную часть справа, вам нужно будет сделать таблицу символов и тип анализа (значение каждого символа), прежде чем вы сможете узнать, что читает или записывает SQL-запрос (рассмотрите определение столбцов, прочитанных SELECT * from.....).
Я понимаю, что есть коммерческие синтаксические анализаторы SQL. Вы можете использовать один из них.
Ответ 2
Если вы хотите разработать собственный синтаксический анализатор SQL, я рекомендую парсер PEG. Я использовал парсер PEG для языка компиляции к js/компиляции, что привело к значительному ясному и легкому коду. Проверьте: https://github.com/luciotato/LiteScript
Вы можете начать с парсера LiteScript, если: a) этот синтаксический анализатор является важной частью вашего приложения, b) в конечном итоге вам понадобится синтаксический анализ с использованием native-exe.
Но если это не является важной частью приложения, которое вы разрабатываете, лучшим вариантом может быть вклад в существующий специфический SQL-парсер.
Ответ 3
Вы можете посмотреть парсер SQLite/WebSQL JavaScript и грамматику Jison файл, который можно использовать для инструмента проверки.
Теперь он поддерживает полный синтаксис SQLite/WebSQL и может быть изменен для другого синтаксиса SQL.
Ответ 4
Я понял, что есть две различные проблемы: проверка токенизации и синтаксиса (что связано с токенизацией).
Я сделал себя SQL-токенизатором для Node.js на основе режима SQL отличного CodeMirror (5 046 звезд на github, в хорошем состоянии). Режим CodeMirror SQL отвечает за "общий" SQL и некоторые особенности SQL, такие как MSSQL, MySQL, PL/SQL, Cassandra, Hive и MariaDB.
Когда мой проект будет достаточно зрелым, я (вероятно) опубликую его на GitHub и дам вам знать.
О синтаксисе синтаксиса SQL, я не нашел инструмент JavaScript (или проект с открытым исходным кодом для адаптации в JS) еще...