Ищете встраиваемое средство улучшения или переформатирования SQL

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

Ничто в ответе на «Украситель и форматирование онлайн-кода» не бесполезно для меня, и я не смог заставить Программа простого форматирования SQL работать на меня.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
30
0
24 090
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

Вы можете просто использовать Грамматика SQL и построить AST с Antlr. Затем вы можете вывести дерево в любом формате.

Спасибо. Это будет мой последний план. К счастью, я слишком занят новой работой, чтобы взглянуть на это сейчас, и, надеюсь, я получу ответ, прежде чем мне придется засучить рукава.

Brian Matthews 11.02.2009 21:53

Часть затмения Платформа инструментов данных - это Проект средств разработки SQL.

На странице, описывающей, как использовать Парсер SQL-запросов, очень кратко используется SQLQuerySourceFormat, который предоставляет следующие параметры:

  • preserveSourceFormat = опция для сохранения форматирования входного источника при генерации исходного текста SQL
  • statementTerminator = символ, разделяющий несколько операторов SQL
  • hostVariablePrefix = символ, предшествующий переменной основного языка
  • parameterMarker = символ, который идентифицирует параметр основного языка
  • delimitedIdentifierQuote * = символ, который включает идентификаторы с разделителями, запись которых в случае будет сохранена
  • omitSchema = текущая схема (опущена в источнике SQL, неявно для неквалифицированных ссылок на таблицы)
  • qualifyIdentifiers = флаг, описывающий, как идентификаторы в источнике SQL будут квалифицированы
  • preserveComments = опция для сохранения комментариев в проанализированном источнике SQL или / и сгенерированном источнике SQL
  • generateCommentsForStatementOnly = опция для генерации комментариев для источника SQL только в контексте полного оператора, или, если установлено значение false, также для отдельных объектов SQL-запроса вне контекста оператора

Это решение определенно сработает для меня, но я предпочитаю простоту решения Hibernate. Жаль, что я мог дать вам только +1

Brian Matthews 18.02.2009 21:18
Ответ принят как подходящий

ОБНОВЛЕНИЕ 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, который: а) вставляет новую строку после каждой запятой; б) Делайте отступ в три пробела после каждой вставленной новой строки;

Stephen Denne 18.02.2009 02:44

Казалось бы, это именно то, что я ищу. Hibernate уже является основным компонентом моего решения, поэтому он не вводит новую зависимость.

Brian Matthews 18.02.2009 21:17

К вашему сведению, BasicFormatterImpl не обрабатывает комментарии '-', а DDLFormatter еще более примитивен, см. dil.univ-mrs.fr/~massat/docs/hibernate-3.1/api/org/hibernate‌ /…

Karl 06.12.2013 23:26

SQLinForm на www.sqlinform.com также обрабатывает комментарии и имеет множество параметров форматирования.

Guido 24.08.2014 22:24

Я создал более красивый автономный инструмент SQL, который использует BasicFormatterImpl и DDLFormatterImpl. github.com/lbtc-xxx/sql-beautifulier

Kohei Nozaki 24.01.2016 11:29

Ознакомьтесь с программой форматирования SQL Йохей Ямана. Это Java, открытый исходный код, нулевые зависимости и уже в центре maven! github.com/vertical-blank/sql-formatter

ChoppyTheLumberjack 25.09.2019 14:44

Возможно jsqlparser у вас подойдет.

Не так просто найти, как вы думаете, поскольку существует довольно много несуществующих проектов. На самом деле мне не удалось его найти, поэтому я занялся своим делом (на основе парсера h2 - вы можете связаться со мной, если все остальное не поможет). Как следствие, я не знаю, есть ли у него украшение, но написать его сверху должно быть достаточно просто.

Он основан на грамматике и JavaCC, так что, вероятно, это лучший вариант, чем изобретать это колесо с помощью antlr в любом случае. Если вам нужно поддерживать различные диалекты sql в сложных выражениях, вы можете обнаружить, что любой подход, основанный на грамматике, вас подведет.

Вы учли:

http://www.sqlinform.com

Они предоставляют как версию API, так и версию командной строки (а также онлайн-версию).

Хотя нет информации о затратах.

Будет ли это работать - Средство форматирования SQL.

Мне нужно иметь возможность делать это в автономном режиме, как после этапа генерации кода в моем процессе сборки. Так что SQL Formatter для меня не вариант.

Brian Matthews 18.02.2009 21:07

В 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.

Другие вопросы по теме