Ищите встраиваемый 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-запросов вне контекста оператора.
Рассматривали ли вы:
Они предоставляют как версию API, так и версию для командной строки (а также онлайн-версию).
Никаких знаний о расходах, хотя.
Вы можете просто использовать грамматику SQL и построить AST с помощью antlr. Затем вы можете вывести дерево в любом формате, который вам нравится.
Возможно, jsqlparser будет работать для вас.
Не так легко найти, как вы думаете, так как существует немало несуществующих проектов. На самом деле мне не удалось его найти, поэтому я занялся своим делом (на основе парсера h2 - вы можете связаться со мной, если ничего не получится). Как следствие, я не знаю, есть ли у него украшение, но написание сверху должно быть достаточно простым.
Он основан на грамматике и JavaCC, так что, вероятно, это лучший вариант, чем изобретать это колесо с помощью antlr в любом случае. Вы можете обнаружить, если вам нужно поддерживать различные диалекты SQL в сложных выражениях, что любой подход, основанный на грамматике, потерпит неудачу.
Так что это, безусловно, то, что вы ищете: библиотека форматирования SQL, которая поддерживает Oracle, SQL Server, DB2, MySQL, Teradata и PostgreSQL.