Я ищу средство улучшения или переформатирования Java с открытым исходным кодом для SQL, которое я могу использовать для очистки операторов DDL, которые я генерирую с помощью openArchitectureWare.
Ничто в ответе на «Украситель и форматирование онлайн-кода» не бесполезно для меня, и я не смог заставить Программа простого форматирования SQL работать на меня.




Вы можете просто использовать Грамматика SQL и построить AST с Antlr. Затем вы можете вывести дерево в любом формате.
Часть затмения Платформа инструментов данных - это Проект средств разработки SQL.
На странице, описывающей, как использовать Парсер SQL-запросов, очень кратко используется SQLQuerySourceFormat, который предоставляет следующие параметры:
Это решение определенно сработает для меня, но я предпочитаю простоту решения Hibernate. Жаль, что я мог дать вам только +1
ОБНОВЛЕНИЕ 2:
org.hibernate.jdbc.util.BasicFormatterImpl был перемещен в выпуск 4.0. Сейчас он находится по адресу: org.hibernate.engine.jdbc.internal.BasicFormatterImpl.
ОБНОВЛЕНИЕ 1:
Технологии идут вперед. Как отмечает Алекс, org.hibernate.pretty.Formatter больше не существует, начиная с версии 3.3.2.GA.. Замена - org.hibernate.jdbc.util.BasicFormatterImpl:
String formattedSQL = new BasicFormatterImpl().format(sql);
ОРИГИНАЛЬНЫЙ ОТВЕТ:
Если вы используете Hibernate, у них есть один встроенный: org.hibernate.pretty.Formatter.
String formattedSQL = new Formatter(sql).format();
Или DDLFormatter, который: а) вставляет новую строку после каждой запятой; б) Делайте отступ в три пробела после каждой вставленной новой строки;
Казалось бы, это именно то, что я ищу. Hibernate уже является основным компонентом моего решения, поэтому он не вводит новую зависимость.
К вашему сведению, BasicFormatterImpl не обрабатывает комментарии '-', а DDLFormatter еще более примитивен, см. dil.univ-mrs.fr/~massat/docs/hibernate-3.1/api/org/hibernate /…
SQLinForm на www.sqlinform.com также обрабатывает комментарии и имеет множество параметров форматирования.
Я создал более красивый автономный инструмент SQL, который использует BasicFormatterImpl и DDLFormatterImpl. github.com/lbtc-xxx/sql-beautifulier
Ознакомьтесь с программой форматирования SQL Йохей Ямана. Это Java, открытый исходный код, нулевые зависимости и уже в центре maven! github.com/vertical-blank/sql-formatter
Возможно jsqlparser у вас подойдет.
Не так просто найти, как вы думаете, поскольку существует довольно много несуществующих проектов. На самом деле мне не удалось его найти, поэтому я занялся своим делом (на основе парсера h2 - вы можете связаться со мной, если все остальное не поможет). Как следствие, я не знаю, есть ли у него украшение, но написать его сверху должно быть достаточно просто.
Он основан на грамматике и JavaCC, так что, вероятно, это лучший вариант, чем изобретать это колесо с помощью antlr в любом случае. Если вам нужно поддерживать различные диалекты sql в сложных выражениях, вы можете обнаружить, что любой подход, основанный на грамматике, вас подведет.
Вы учли:
Они предоставляют как версию API, так и версию командной строки (а также онлайн-версию).
Хотя нет информации о затратах.
Будет ли это работать - Средство форматирования SQL.
Мне нужно иметь возможность делать это в автономном режиме, как после этапа генерации кода в моем процессе сборки. Так что SQL Formatter для меня не вариант.
В Hibernate v3.3.2.GA org.hibernate.pretty.Formatter больше не существует. Вы можете использовать его замену: org.hibernate.jdbc.util.BasicFormatterImpl
Используйте org.hibernate.engine.jdbc.internal.BasicFormatterImpl для Hibernate 4.0+.
Formatter f = new BasicFormatterImpl();
String formatted_sql_code = f.format(ugly_sql_code);
Так что это определенно то, что вы ищете: Библиотека форматирования SQL, поддерживающий Oracle, SQL Server, DB2, MySQL, Teradata и PostgreSQL.
Спасибо. Это будет мой последний план. К счастью, я слишком занят новой работой, чтобы взглянуть на это сейчас, и, надеюсь, я получу ответ, прежде чем мне придется засучить рукава.