На каком языке есть хорошая библиотека разбора SQL? - PullRequest
4 голосов
/ 03 ноября 2011

Я ищу хороший парсер SQL.Тот, который будет работать с подвыборками, невыбранными запросами, CTE, оконными функциями и другими допустимыми элементами SQL.

Результатом будет некое абстрактное синтаксическое дерево, над которым я мог бы позже поработать.

Язык в основном не имеет значения, так как я готов выучить новый язык только для того, чтобы использовать библиотеку, если она существует.

Я знаю, что технически возможно извлечь парсер из некоторой базы данных с открытым исходным кодом, но это далекоиз простого (по крайней мере, для парсера PostgreSQL, который мне нужен).

Ответы [ 3 ]

2 голосов
/ 03 ноября 2011

В Python есть неподтверждающий синтаксический анализатор SQL: python-sqlparse .Жетоны выставляются как объекты.Я сомневаюсь, поддерживают ли они «другие допустимые операторы SQL», оконные функции и тому подобное, хотя они контролируются грамматиками, специфичными для разных поставщиков, и ни один из поставщиков технически не полностью соответствует стандартам SQL.

Хм (зная, что вы готовы изучать новый язык), зачем вам нужно работать с синтаксическим деревом?Если вам нужно какое-то волшебство при работе с базой данных, возможно, вам не нужно изобретать колесо: Python получил фантастический инструментарий базы данных - SQL ALchemy .

1 голос
/ 04 ноября 2011

Можно гуглить "sql parser".Вот что перечислено: Общий анализатор SQL Вот некоторые выделенные функции, перечисленные на официальном сайте:

  • Проверка синтаксиса автономного SQL
  • Настраиваемый форматировщик SQL
  • Углубленный анализ сценария SQL
  • Полный доступ к дереву разбора запросов SQL
  • Пользовательский механизм SQL для различных баз данных
  • Поддержка основных языков программирования

Это коммерческая библиотека SQL.

0 голосов
/ 04 ноября 2011

Наш инструментарий реинжиниринга программного обеспечения DMS имеет полные синтаксические анализаторы PL / SQL и ANSI SQL 2011 (для AST) и симпатичные принтеры (AST возвращаются к действительному тексту). Ни один из них не является PostGres SQL, но DMS имеет механизм диалекта, который позволяет относительно легко построить диалект из базовой грамматики, пересмотрев только некоторые из правил грамматики и сохранив остальные. Делать это из грамматики SQL 2011 кажется практичным способом решения проблемы.

DMS также предлагает средства для доступа / обхода / изменения AST как процедурно, так и с точки зрения шаблонов и преобразований поверхностного синтаксиса. Думайте об этом как о «жизни, которая не разбирается».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...