Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Поиск helper-классов для работы с SQL синтаксисом


Автор: Maksym 22.5.2008, 15:10
Ищу какую-нибудь вспомогательную библиотеку, котарая умела бы:
  • распарсивать SQL  в объект
  • объект должен иметь удобные методы редактирования (списка таблиц, полей, сложных условий, порядка сортировки и т.д. и т.п.)
  • генерировать SQL из этого объекта

Идея состоит в том, что есть оптимизированный одним db-гуру SQL. База данных -- Oracle, но никаких сильно специфичных вещей не используется. Все примерно в рамках стандарта.
С этим SQL надо довольно активно работать (не только подставлять значения в условия, но и делать разные довольно сложные манипуляции). Нахардкодить под все варианты строк запросов не представляется возможным (да и разумным). 
Хотелось бы работать с объектами, а ответственность за валидность результирующего SQL возложить на какой-нибудь готовый пакет.

Не сталкивался ли кто-нибудь с такими инструментами? у кого какие идеи?

ЗЫ. Ни о каких ОRM тут речи не идет. Во-первых потому, что все уже разработано без них. Во-вторых, в базе данных хранятся сложные структуры: деревья, сети и т.п. В-третьх, большинство запросов сделано через сложные join, и заточены под производительность.

Автор: fixxer 22.5.2008, 15:39
Погугли на предмет sql4j и zql. Может подойдет.

Автор: Maksym 22.5.2008, 16:00
fixxer
Спасибо, интересно и близко к тому что нужно. Чтобы ты посоветовал? http://www.experlog.com/gibello/zql/, вроде как, выглядит предпочтительнее поскольку использует сторонний (https://javacc.dev.java.net/) парсинг...

All
Еще варианты..?
Может у кого-нибудь есть опыт с названными тулами?

Автор: Maksym 22.5.2008, 16:33
После поверхностного рассмотрения вскрылись таки факты:
  • Zql поставляется без исходников. Автор предлагает написать ему и обсудить лицензию и т.п. Можно это сделать, хотя то что моя разработка целиком комерческая очков мне в этих переговорах не добавляет
  • Последний раз Zql обновлялся 7 Aug. 02 -- хотелось бы верить от того, что стабилен и тех немногих кому понадобился -- целиком удовлетворил.. а не от того, что проблемный и никто им не пользовался..
  • SQL4J идет с исходниками.. но дата последнего обновления December 2001, тоже далеко не вчера..

Автор: v2v 22.5.2008, 17:22
http://sqljep.sourceforge.net/

Добавлено через 47 секунд
Цитата

SQLJEP is a Java API for parsing and evaluating SQL-like expressions. It supports some SQL predicase (is null, like, in, between) and almost all Oracle's and MaxDB's functions.

Автор: Maksym 22.5.2008, 17:49
v2v
Интересная вещь и полезная, но она только для условных выражений внутри sql. Всё sql выражение целиком она не обрабатывает.
Цитата

SQLJEP is a Java API for parsing and evaluating SQL-like expressions (SQL statements are not supported).

Автор: v2v 22.5.2008, 18:17
open source. может имеет смысл дописать его? 

Автор: Maksym 22.5.2008, 18:22
v2v
Много дописывать прийдется smile

Автор: Platon 22.5.2008, 18:52
А что поделать? Надо не только потреблять, но и помогать ^_^

Автор: Maksym 23.5.2008, 15:29
Еще идеи, кроме как самому писать, есть у кого нибудь?

Автор: Andrey1 23.5.2008, 15:37
Цитата(Maksym @  22.5.2008,  15:10 Найти цитируемый пост)
...распарсивать SQL  в объект


Да, тоже давно ищу такую либу. Концептуально этот подход очень даже правильный.... smile

Цитата(Maksym @  23.5.2008,  15:29 Найти цитируемый пост)
Еще идеи, кроме как самому писать, есть у кого нибудь? 

Так что если решишься "на дописать самому" - готов пообсуждать с перспективой включиться в разработку smile. 

Правда для меня чуть больше важнее работа с JPQL (JPA), чем с чистым SQL.

Автор: Maksym 23.5.2008, 16:22
Почитал обсуждения на буржуйских форумах -- все сводится к тому, чтобы брать JavaCC и самому описывать SQL синтаксис. Никак не могу найти, чтобы кто-нибудь это уже сделал..

Автор: ivg 23.5.2008, 17:52
https://javacc.dev.java.net/files/documents/17/38413/PlSql.jj?

Автор: Andrey1 23.5.2008, 17:53
Цитата(Maksym @  23.5.2008,  16:22 Найти цитируемый пост)
Почитал обсуждения на буржуйских форумах -- все сводится к тому, чтобы брать JavaCC и самому описывать SQL синтаксис. Никак не могу найти, чтобы кто-нибудь это уже сделал.. 

Да, это стандартный путь. Но для SQL - я думаю уже есть готовые грамматики smile. Они должны быть в тех недоделанных проектах...
Думаю, для JPQL тоже должны быть готовые грамматики для JavaCC в JPA реализациях с исходниками...

То, за что я точно готов взяться - это за интеграцию какого-нибудь слабо типизированного скриптового Java-based языка, (на примете JavaBeans и JavaScript) с NetBeans и JPA: чтобы всю обработку данных из базы можно было  бы вести на этом языке в терминах Entity объектов и JPQL. Чтобы про SQL можно было забыть smile...

Автор: Maksym 23.5.2008, 18:05
Цитата(ivg @  23.5.2008,  16:52 Найти цитируемый пост)
это наверно видели? 

Ага, и это уже кое-что smile
Для меня неожиданность, что не оказалось готового "коробочного" решения, так чтоб прочесть manual, посмотреть api, и начать пользоваться.. эхх мечты мечты

Цитата(Andrey1 @  23.5.2008,  16:53 Найти цитируемый пост)
Чтобы про SQL можно было забыть smile...

В моем случае про sql забывать нельзя  smile  Все очень sql-завязано и sql-зависимо smile

Автор: ivg 23.5.2008, 18:27
Цитата(Maksym @  23.5.2008,  21:05 Найти цитируемый пост)
не оказалось готового "коробочного" решения, так чтоб прочесть manual, посмотреть api, и начать пользоваться..

А нужно ли такое полнофункциональное решение? Большинство запросов известно на этапе компиляции, ну или по крайней мере структура запроса и постоянная часть имеются. Может гораздо проще структурировать запросы по типам, для каждого типа написать шаблон, а 
Цитата(Maksym @  22.5.2008,  18:10 Найти цитируемый пост)
список таблиц, полей, сложные условия, порядок сортировки
 подставлять в рантайме?
Может поэтому и нет такого готового решения.

Автор: Maksym 23.5.2008, 18:37
Цитата(ivg @  23.5.2008,  17:27 Найти цитируемый пост)
Большинство запросов известно на этапе компиляции, ну или по крайней мере структура запроса и постоянная часть имеются.

Но формировать эту структуру из строк -- небезопасно. Намного удобнее иметь объект-оболочку, который возьмет на себя всю рутинную работу.

Цитата(ivg @  23.5.2008,  17:27 Найти цитируемый пост)
Может поэтому и нет такого готового решения.

Для проектов с досточно "прямой" архитектурой таблиц и данных используют ORM
Для проектов типа моего текущего -- прикручивают очередное доморощеное решение и не делятся smile не остается ни времени ни сил.. smile 

Автор: Stampede 23.5.2008, 20:06
Цитата(Maksym @  23.5.2008,  06:29 Найти цитируемый пост)
Еще идеи, кроме как самому писать, есть у кого нибудь? 


Вот такая идея щас пришла в голову. Очень даже возможно, что есть готовые стандарты для записи SQL запросов в виде XML. Ну и тогда с этой штукой можно будет работать программно, через DOM. Не то чтоб сильно фонтан, но все же лучше, чем конкатенацией smile А если еще враперов наделать, так может и вообще неплохая библиотечка получиться, и притом малой кровью.

ЗЫ. Только если такая вещь и существует, найти ее будет непросто, По запросу sql+xml вылазит в основном инфа о работе с XML данными в базе.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)