top / index / prev / next / target / source

2005-05-24 diary: Javaで書かれたフリーなSQL自動整形ツールが欲しい…

いがぴょん画像(小) 日記形式でつづる いがぴょんコラム ウェブページです。

old-v2

Javaで書かれたフリーなSQL自動整形ツールが欲しい…

Javaで書かれたフリーなSQL自動整形ツールが欲しいです。痛感しました。

Javaで書かれたフリーなSQL自動整形ツールが欲しいです

Javaで書かれたフリーなSQL自動整形ツールが欲しいです。痛感しました。特に、ある程度以上の規模で、サブクエリや () が駆使されはじめると、字下げするだけでも かなり難易度高いです。

試作できないか思索してみます。(目的と手段が混乱しないように注意は必要ですね…)もちろんSQLコーディングルールは 伊賀の勝手仕様によるものになることでしょう (苦笑)

ということで手始めにSQLのBNFを探してみました。すばらしい資料をいくつも見かけることができました。

2005.05.26追記 a-sanのご協力をいただけることになったので、まずは いがぴょん勝手SQLコーディングルールを作成することから始めます。いっそのこと SQLの世界の伝統的コーディングルールをいったん忘れ去って、例えば Javaのブロックの概念に似たコーディングルールを作成してしまう、というのも無謀だけれど興味深い試みかも知れません。などと妄想中…。

2005.05.31追記 marsさんの日記に いろいろなSQL整形ツールの記載がありました (反応していただき、ありがとうございます)

2006.05.10追記 事後による補足。これらの取り組みの結果、SQL整形ライブラリを実現するblancoSqlFormatterや、SQL整形EclipseプラグインのBlancoSqlEditorPluginなどが blanco Framework から提供されています。

関連する日記

Microsoft SQL Server 2000の検索時の結果セット(カーソル)の挙動に悩まされ…

今日 Java/JDBCにおいて、検索による更新のための行ロックの試験をしていて恐ろしい事実に気がつきました。(気がつかされました) 更新のための検索を TYPE_FORWARD_ONLY を指定時に、なんと 結果セットは ResultSet.TYPE_SCROLL_SENSITIVE を指定した際と同様の他のトランザクションの更新結果が反映される状態で開かれるということです。

これは結構私にはショッキングでした。しばらく 頭を抱えました…。更新カーソルではない場合にも同様であるようにも考えられます。常識的な他のトランザクションの更新結果を反映しない、ある一時点でのスナップショットとしての結果セットを維持した検索を行いたい場合にも、同様な問題が発生するように考えられます。つまり、常に ResultSet.TYPE_SCROLL_INSENSITIVE を指定する必要があるのではないのか、ということです。ああ、難易度が高いです。もうちょっと広範囲な試験を改めて実施する必要性がありそうです。つまり 一般的には JDBCのカーソルは高速動作を目的として順方向カーソルを選択する場合が多いと考えられるからです。しかし SQL ServerのJDBCドライバは 順方向カーソルだと 他のトランザクションの更新結果を反映してしまうタイプの結果セットを戻す…。これは、なにがなんでも ResultSet.TYPE_SCROLL_INSENSITIVE を指定して 常識的な動作をさせておいたほうが業務的には安全っぽいように感じられます。しかしそうだとすると、今度は性能劣化に影響がないかどうかの検証が必要になってきてしまいます。うーん。うーん。

2005.05.26追記 PostgreSQL 8.0.1では上記の現象は発生しませんでした。一方で、ResultSet.TYPE_SCROLL_SENSITIVEを指定しても、INSERTによる行追加は他のトランザクションには影響を与えませんでした。、、、ここらへんのJDBCの実装は、さすがにリレーショナルデータベース毎に異なるようですね。勉強になりました。

blancoDb Enterprise Edition リリース準備中…

blancoDb Enterprise Edition は、ソースコードとしては もうこれでほとんど確定です。木曜日にOracle 9i 上での単体試験を済ませたらリリースします。

問題はドキュメントのたぐいが徹底的に足りないことです。ちょっとずつは書いているのですけれども…。blancoDb を複数の実業務に適用して そして だんだんわかってきたのですが、blancoDbはかなり低機能におさえているのですけれども、評価して検討するのは ぱりぱりのJavaアーキテクトさんくらいにしか実施できないのだ ということが はっきりわかってきました。少なくとも blancoDbが自動生成したコードは必ず目を通さないとblancoDbの意味が分からないことでしょう。(そう、そこのドキュメントが不足しています) だからこそ、そこに私がコンサルティングを行う余地があるのかも知れません。

そんなことで、しょうがないので先にモジュール (そしてなけなしのドキュメント) を提供します。どうしても興味がある人はソースコードを読んで察してください (無茶を言っています)。あとからゆっくりとドキュメントは書いていきます。書いていきたいのですが、今後の私の目先の予定として blancoStrutsへのカスタマイズ作業が ずんどこ入ってきそうな見通しなのですけれども… (これは十分なドキュメント提供は 当分先の話ですね…)

東芝 dynabook SS 1610 11L/2

支給されたものを、ありがたく使っております。ソフトウェア開発に ばりばりと活用させていただいております。不満といえば、下記くらいです。


この日記について