Ищите встраиваемый SQL-beautifier или reformatter

Я ищу Java-beautifier или переформататор для SQL, который я могу использовать для очистки операторов DDL, которые я генерирую с http://www.openarchitectureware.org/.

Ничто в ответе " Онлайн-кодирование и улучшение кода" мне не пригодится, и я не смог заставить Simple SQL Formatter работать на меня.

8 ответов

Решение

ОБНОВЛЕНИЕ 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();

В Hibernate v3.3.2.GA org.hibernate.pretty.Formatter больше не существует. Вы можете использовать его замену: org.hibernate.jdbc.util.BasicFormatterImpl

Formatter f = new BasicFormatterImpl();
String formatted_sql_code = f.format(ugly_sql_code);

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

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

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

Рассматривали ли вы:

http://www.sqlinform.com/

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

Никаких знаний о расходах, хотя.

Вы можете просто использовать грамматику SQL и построить AST с помощью antlr. Затем вы можете вывести дерево в любом формате, который вам нравится.

Будет ли это работать - SQL Formatter.

Возможно, jsqlparser будет работать для вас.

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

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

Так что это, безусловно, то, что вы ищете: библиотека форматирования SQL, которая поддерживает Oracle, SQL Server, DB2, MySQL, Teradata и PostgreSQL.

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