top / index / prev / next / target / source

2005-06-13 diary: SQLコーディング規約 (字下げ規約) 策定プロジェクト

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

old-v2

SQLコーディング規約 (字下げ規約) 策定プロジェクト

SQLコーディング規約 (字下げ規約) について、これを策定する作業に着手しました。

SQLコーディング規約 (字下げ規約) 策定プロジェクト

いがぴょん勝手仕様によるSQLコーディング規約 (というか単に字下げルールですが) を策定着手しました。これは 私が受け入れ単体試験・結合試験などに従事している過程で、SQL文の字下げによるオフサイドトラップにかかって悲しい思いをする経験が多くあって、これを何とか SQL整形ツールで防ぎたい、というのが主な着手理由です。

重要なことは、ここで決まった SQLコーディング規約 (というか字下げ規約) に基づいた SQLパーサやSQL整形ツール、果ては Eclipseプラグインといった Java言語による実装が開発される(らしい)ということです。(いがぴょんが開発するわけではありませんし、いがぴょんにそのスキルはありません)とりあえず慣習的なSQLコーディング規約について最低限は尊重して踏襲しつつも、Eclipse/Java風のルールも強く意識しながら まずは素案を作成開始しました。

原則

SELECT その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

, 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 ※ポイント: SELECTキーワードは先頭に位置づけ。FROM, WHEREなどは 4字下げ。表名、列名などは 8字下げ。カンマについてはSQLの伝統を重んじ(Javaとは異なり)、先につけるようにする。ORについて Java言語の || と同様のものであると認識し、同様の字下げとする。 * ORDER BY 以外に GROUP BY にも対応が必要。

INSERT その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 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キーワードは先頭に位置づけ。INTO, VALUESなどは 4字下げ。丸カッコ'(' ')' については、Java言語の '{', '}' の字下げルールを採用 INSERT その2 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

)

※ポイント: INSERTキーワードは先頭に位置づけ。INTO, VALUESなどは 4字下げ。丸カッコ'(' ')' については、Java言語の '{', '}' の字下げルールを採用。 * 表名・列名は ダブルクオート(")で囲むことが可能。ダブルクオート内は 空白などが入り得ます。ダブルクオートやシングルクオートの箇所については、整形は行わない。

UPDATE その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 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

※ポイント: UPDATEキーワードは先頭に位置づけ。SETなどは 4字下げ。 DELETE その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 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

※ポイント: DELETEキーワードは先頭に位置づけ。FROM, WHEREなどは 4字下げ。 * -- から始まる文字列は一行コメントなので、行末までそのままとし、コメント部分は整形しない。

UNION その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

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

※ポイント: UNIONとSELECTキーワードは先頭に位置づけ。 サブクエリ その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 から提供されています。

関連するリソース

関連する日記


この日記について