Есть ли библиотека Java с открытым исходным кодом для анализа операторов SQL?
Если возможно, он должен быть настраиваемым или достаточно гибким, чтобы также иметь возможность анализировать (или, по крайней мере, игнорировать) синтаксис, зависящий от поставщика (например, определения табличных пространств Oracle или предложение LIMIT в MySQL).
Если нет, то строгое соблюдение стандарта SQL тоже нормально.
Обновление: мне это нужно для двух вещей:
- предоставление интерфейса SQL для базы данных, отличной от SQL (сопоставление с внутренними вызовами API)
- перезапись SQL до того, как он попадет в фактическую базу данных (например, Oracle)
Ответы:
ANTLR3 имеет доступную грамматику ANSI SQL. Вы можете использовать это для создания собственного парсера.
В ANTLR4 есть грамматика SQL .
источник
источник
Парсер
Если вам нужен парсер, в базе кода Apache Derby должен быть парсер .
Работа с SQL, зависящим от поставщика
Возможно, вы захотите взглянуть на метод .native () в объекте jdbc Connection, который вы можете передать ему нейтральные к поставщику запросы, которые будут постобработаны в запросы конкретных поставщиков.
источник
Общий синтаксический анализатор SQL для Java не является открытым исходным кодом, но это именно то, что вам нужно.
источник
Попробуйте Zql
источник
Hibernate использует ANTLR для синтаксического анализа sql и hql.
JSqlParser также является хорошим вариантом, хотя в нем есть некоторые ошибки (или некоторые функции, не реализованные) при синтаксическом анализе Oracle pl / sql. подробности см. на форуме.
поэтому, если вы разбираете oracle pl / sql, рекомендуется использовать ANTLR.
источник
Что вы хотите делать с проанализированным SQL? Я могу порекомендовать несколько Java-реализаций Lex / Yacc ( BYACC / J , Java Cup ), с которыми вы можете использовать существующую грамматику SQL.
Если вы действительно хотите что-то сделать с полученной проанализированной грамматикой, я мог бы предложить взглянуть на Derby , базу данных SQL с открытым исходным кодом, написанную на Java.
источник