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

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

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

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

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

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

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

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

46
ответ дан 19 марта '09 в 3:35
источник
  • JSqlParser
  • Presto parser написан с использованием ANTLR4 и имеет свои собственные неизменные классы AST, которые построены из анализатора. У AST есть посетитель и красивый принтер.
29
ответ дан 24 сент. '09 в 23:52
источник

Parser

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

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

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

10
ответ дан 19 марта '09 в 3:42
источник

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

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

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

3
ответ дан 18 апр. '11 в 11:50
источник

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

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

2
ответ дан 19 марта '09 в 3:38
источник