|
2005/06/13 日記: SQLコーディング規約 (字下げ規約) 策定プロジェクト[いがぴょんの日記v2,diary,igapyon] SQLコーディング規約 (字下げ規約) について、これを策定する作業に着手しました。 |
| ニュース: Ubuntu 9.04 (Jaunty Jackalope) 正式版リリース 04/24 Debian ベースの Linux ディストリビューションのひとつである Ubuntu の最新版がリリースです。 |
| SQLコーディング規約 (字下げ規約) 策定プロジェクト |
いがぴょん勝手仕様によるSQLコーディング規約 (というか単に字下げルールですが) を策定着手しました。これは 私が受け入れ単体試験・結合試験などに従事している過程で、SQL文の字下げによるオフサイドトラップにかかって悲しい思いをする経験が多くあって、これを何とか SQL整形ツールで防ぎたい、というのが主な着手理由です。
重要なことは、ここで決まった SQLコーディング規約 (というか字下げ規約) に基づいた SQLパーサやSQL整形ツール、果ては Eclipseプラグインといった
Java言語による実装が開発される(らしい)ということです。(いがぴょんが開発するわけではありませんし、いがぴょんに
そのスキルはありません)
とりあえず慣習的なSQLコーディング規約について最低限は尊重して踏襲しつつも、Eclipse/Java風のルールも強く意識しながら まずは素案を作成開始しました。
原則
SELECT その1
※ポイント: SELECTキーワードは先頭に位置づけ。FROM, WHEREなどは 4字下げ。表名、列名などは 8字下げ。カンマについてはSQLの伝統を重んじ(Javaとは異なり)、先につけるようにする。ORについて Java言語の || と同様のものであると認識し、同様の字下げとする。
W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W S E L E C T c o l 1 , c o l 2 , c o l 3 , c o l 4 , c o l 5 , c o l 6 , c o l 7 , c o l 8 , M A X ( c o l 1 ) A S m a x c o l 1 F R O M t a b l e 1 t 1 , t a b l e 2 t 2 W H E R E t 1 . c o l 1 = t 2 . c o l 2 O R c o l 1 > 3 O R c o l 2 < 5 O R D E R B Y c o l 1 D E S C
- ORDER BY 以外に GROUP BY にも対応が必要。
- DISTINCT キーワードへの対応が必要。
- 単一の項目を含む場合の カッコ() については、別扱いとして 改行を含まない。
- INキーワードへの対応も必要。それ以外にも INで値を列挙する形や、INの後続にSELECT文を書く形があることに注意。
INSERT その1
※ポイント: INSERTキーワードは先頭に位置づけ。INTO, VALUESなどは 4字下げ。丸カッコ'(' ')' については、Java言語の '{', '}' の字下げルールを採用
W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W I N S E R T I N T O t a b l e 1 V A L U E S ( 1 0 0 0 , ' A B C ' , 2 5 6 )
INSERT その2
※ポイント: INSERTキーワードは先頭に位置づけ。INTO, VALUESなどは 4字下げ。丸カッコ'(' ')' については、Java言語の '{', '}' の字下げルールを採用。
W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W I N S E R T I N T O " t a b l e n a m e 1 " ( c o l 1 , c o l 2 , c o l 3 ) V A L U E S ( 1 0 0 0 , ' A B C ' , 2 5 6 )
- 表名・列名は ダブルクオート(")で囲むことが可能。ダブルクオート内は 空白などが入り得ます。ダブルクオートやシングルクオートの箇所については、整形は行わない。
UPDATE その1
※ポイント: UPDATEキーワードは先頭に位置づけ。SETなどは 4字下げ。
W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W U P D A T E t a b l e 1 S E T c o l 2 = ' A B C ' , c o l 3 = 1 2 3 W H E R E c o l 1 = 5
DELETE その1
※ポイント: DELETEキーワードは先頭に位置づけ。FROM, WHEREなどは 4字下げ。
W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W D E L E T E - - s i n g l e l i n e c o m m e n t F R O M / * m u l t i l i n e c o m m e n t c o m m e n t p a r t i s i g n o r e d * / t a b l e 1 W H E R E c o l 1 = 5
- -- から始まる文字列は一行コメントなので、行末までそのままとし、コメント部分は整形しない。
- /* */ で囲まれた場所は複数行コメント。開始文字列から終了文字列までは整形しない。
UNION その1
※ポイント: UNIONとSELECTキーワードは先頭に位置づけ。
W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W S E L E C T c o l 1 , c o l 2 , c o l 3 , c o l 4 , c o l 5 , c o l 6 , c o l 7 , c o l 8 F R O M t a b l e 1 W H E R E c o l 1 > 3 O R c o l 2 < 5 O R D E R B Y c o l 1 U N I O N S E L E C T c o l 1 1 , c o l 1 2 , c o l 1 3 , c o l 1 4 , c o l 1 5 , c o l 1 6 , c o l 1 7 , c o l 1 8 F R O M t a b l e 2 W H E R E c o l 1 1 > 3 O R D E R B Y c o l 1 1
サブクエリ その1
※ポイント: サブクエリについて、( ) カッコの動きをうまく適用して汎化したルールを適用すること。
W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W S E L E C T c o l 1 , c o l 2 , c o l 3 , c o l 4 , c o l 5 , c o l 6 , c o l 7 , c o l 8 F R O M t a b l e 1 W H E R E E X I S T S ( S E L E C T c o l 1 F R O M t a b l e 2 W H E R E c o l 1 = 3 )
2005.06.14 ymotoさんのフィードバックを反映
2006.05.10追記 ここで策定されたコーディング規約に従ったSQL整形ライブラリを実現するblancoSqlFormatterや、SQL整形EclipseプラグインのBlancoSqlEditorPlugin などが blanco Framework から提供されています。
関連するリソース
関連する日記