Библиотека парсеров SQL для Java

Существует ли библиотека Java с открытым исходным кодом для анализа SQL-запросов?

Если возможно, он должен быть настраиваемым или достаточно гибким, чтобы также иметь возможность анализировать (или, по крайней мере, игнорировать) синтаксис конкретного поставщика (например, определения табличного пространства Oracle или предложение MySQL LIMIT).

Если нет, строгое соблюдение стандарта SQL также прекрасное.

Обновление: Мне нужно это для двух вещей:

  • предоставление SQL-интерфейса для базы данных, отличной от SQL (отображение внутренних вызовов API)
  • переписывание SQL до того, как оно поступит в фактическую базу данных (например, Oracle)

Ответ 1

ANTLR3 имеет доступную грамматику ANSI SQL. Вы можете использовать это для создания собственного анализатора.

ANTLR4 имеет грамматику SQL.

Ответ 2

  • JSqlParser
  • Парсер Presto написан с использованием ANTLR4 и имеет свои собственные неизменяемые классы AST, которые построены из парсера. У AST есть посетитель и симпатичный принтер.

Ответ 3

Parser

Если вам нужен парсер, должен быть синтаксический анализатор в базе кода Apache Derby.

Работа с SQL-сервером, специфичным для поставщика

Вы можете посмотреть на . native() метод на объекте соединения jdbc, который вы можете передать ему нейтральные запросы поставщика, которые получат постпроцессировать в специфические запросы поставщиков.

Ответ 4

Общий SQL Parser для Java не является открытым исходным кодом, но это именно то, что вы заботитесь.

Ответ 5

Попробуйте Zql

Ответ 6

Hibernate использует ANTLR для синтаксического анализа sql и hql.

JSqlParser также является хорошим вариантом. Хотя у него есть некоторые ошибки (или некоторые функции не реализованы) при разборе oracle pl/sql. см. его форум для деталей.

поэтому, если вы разбираете oracle pl/sql, рекомендуется ANTLR.

Ответ 7

Что вы хотите сделать с анализируемым SQL? Я могу порекомендовать несколько реализаций Java Lex/Yacc (BYACC/J, Java Cup), с которым вы можете использовать существующую грамматику SQL.

Если вы хотите на самом деле что-то сделать с полученной в результате анализируемой грамматикой, я могу предложить посмотреть Derby, базу данных SQL с открытым исходным кодом написанных на Java.