web-dev-qa-db-ja.com

埋め込み可能なSQLビューティファイアまたはリフォーマッタを探しています

openArchitectureWare で生成しているDDLステートメントをクリーンアップするために使用できるSQL用のJavaオープンソースのビューティファイアまたはリフォーマッターを探しています。

" Online Code Beautifier And Formatter "の答えには何も役に立たず、 Simple SQL Formatter を機能させることができませんでした。

28
Brian Matthews

更新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を使用している場合は、次の1つが組み込まれています:org.hibernate.pretty.Formatter

String formattedSQL = new Formatter(sql).format();
46

Eclipseの一部 Data Tools PlatformSQL Development Tools Project です。

SQLクエリパーサー の使用方法を説明するページでは、 SQLQuerySourceFormat を非常に簡単に使用して、次のオプションを提供しています。

  • prepareSourceFormat = SQLソーステキストが生成されるときに入力ソースフォーマットを保持するオプション
  • statementTerminator =複数のSQLステートメントを区切る文字
  • hostVariablePrefix =ホスト言語変数の前にある文字
  • parameterMarker =ホスト言語パラメーターを識別する文字
  • delimitedIdentifierQuote * =大文字と小文字が区別される、区切られた識別子を囲む文字
  • excludeSchema =現在のスキーマ(SQLソースでは省略、非修飾テーブル参照に暗黙的)
  • qualifyIdentifiers = SQLソースの識別子がどのように修飾されるかを説明するフラグ
  • prepareComments =解析されたSQLソースまたは/および生成されたSQLソースにコメントを保存するオプション
  • generateCommentsForStatementOnly =ステートメント全体のコンテキストでのみSQLソースのコメントを生成するオプション、またはfalseに設定されている場合は、ステートメントのコンテキスト外の単一のSQLクエリオブジェクトに対してもコメントを生成するオプション
5
Stephen Denne

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);
5
Stephan

あなたは考えましたか:

http://www.sqlinform.com

これらは、APIバージョンとコマンドラインバージョン(およびオンラインバージョン)の両方を提供します。

しかし、コストについての知識はありません。

2
Guy

SQL文法 を使用してAST with antlr を構築するだけです。その後、ツリーを任意の形式で出力できます。

1
tcurdt

おそらく jsqlparser があなたのために働くでしょう。

世の中にはかなりの数の廃止されたプロジェクトがあるので、あなたが思うほど簡単に見つけることはできません。実際、私はそれを見つけることができなかったので、私自身のことをすることになりました(h2パーサーに基づいて-他のすべてが失敗した場合は私に連絡することができます)。結果として、私はそれが美化剤を持っているかどうかわかりませんが、それを上に書くことは十分に簡単なはずです。

文法とJavaCCに基づいているので、いずれにしてもこのホイールをantlrで再発明するよりもおそらく良いオプションです。複雑なステートメントでSQLのさまざまな方言をサポートする必要がある場合、文法に基づくアプローチでは失敗することがあります。

1
mike g

これは機能しますか- SQL Formatter。

1
Ferdeen

したがって、これは間違いなくあなたが探しているものです: SQLフォーマッタライブラリ Oracle、SQL Server、DB2、MySQL、Teradata、およびPostgreSQLをサポートします。

0
James Wang