Поиск встраиваемого SQL beautifier или переформатирования [закрыто]
Я ищу Java с открытым исходным кодом beautifier или reformatter для SQL, который я могу использовать для очистки DDL-операторов, которые я генерирую с openArchitectureWare.
ничего в ответ на "Онлайн-Код Beautifier И Formatter " мне полезно, и я не смог получить простой форматер SQL работать на меня.
8 ответов
обновление 2:
org.hibernate.jdbc.util.BasicFormatterImpl
переехал в выпуске 4.0. Теперь он находится по адресу:org.hibernate.engine.jdbc.internal.BasicFormatterImpl
.
обновление 1:
технология идет вперед. Как отметил Алексей,org.hibernate.pretty.Formatter
больше не существует с версии 3.3.2.Га. Замена org.hibernate.jdbc.util.BasicFormatterImpl
:
String formattedSQL = new BasicFormatterImpl().format(sql);
ОРИГИНАЛЬНЫЙ ОТВЕТ:
если вы используете Hibernate, у них есть один встроенный:org.hibernate.pretty.Formatter
String formattedSQL = new Formatter(sql).format();
часть затмения Платформа Инструментов Данных - это SQL Development Tools Project.
страница, описывающая, как использовать синтаксический анализатор запросов SQL имеет чрезвычайно краткое использование SQLQuerySourceFormat который предоставляет следующие параметры:
- preserveSourceFormat = опция сохранения формирующего источника ввода при создании исходного текста SQL
- statementTerminator = символ разделения нескольких операторов SQL
- hostVariablePrefix = символ, который preceedes базового языка переменной
- parameterMarker = символ, идентифицирующий параметр языка хоста
- delimitedIdentifierQuote * = символ, который заключает разделенные идентификаторы, запись которых в случае будет сохранена
- omitSchema = текущая схема (опущена в источнике SQL, неявно в неквалифицированную таблицу ссылки)
- qualifyIdentifiers = флаг, описывающий, как будут квалифицироваться идентификаторы в источнике SQL
- preserveComments = возможность сохранения комментариев в проанализированном источнике SQL или / и сгенерированном источнике SQL
- generateCommentsForStatementOnly = возможность генерировать комментарии для источника SQL только в контексте полного оператора или, если установлено значение false, для отдельных объектов SQL-запроса вне контекста оператора как ну!--14-->
С Hibernate В3.3.2.Г. А., org.зимовать.хорошенький.Formatter больше не существует. Вы можете использовать его замену:org.зимовать.интерфейс jdbc.утиль.BasicFormatterImpl
Formatter f = new BasicFormatterImpl();
String formatted_sql_code = f.format(ugly_sql_code);
вы подумали:
они предоставляют как версию API, так и версию командной строки (а также онлайн-версию).
нет знаний о затратах, хотя.
вы можете просто использовать грамматика SQL и построить AST с antlr. Затем вы можете вывести дерево в любом формате, который вам нравится.
возможно jsqlparser будет работать для вас.
не так легко найти, как вы могли бы подумать, так как есть несколько несуществующих проектов. На самом деле я не смог найти его, поэтому в конечном итоге сделал свое дело (на основе парсера h2 - вы можете связаться со мной, если все остальное не удастся). Как следствие, я не знаю, есть ли у него украшатель, но писать его сверху должно быть достаточно прямо.
Он основан на грамматике и JavaCC, поэтому, вероятно, лучший вариант, чем изобретение этого колеса с antlr в любом случае. Вы можете обнаружить, если вам нужно поддерживать различные диалекты sql в сложных утверждениях, что любой подход, основанный на грамматике, потерпит неудачу.
Так что это определенно то, что вы ищете:библиотека форматирования SQL которые поддерживают Oracle, SQL Server, DB2, MySQL, Teradata и PostgreSQL.