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言語の || と同様のものであると認識し、同様の字下げとする。

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 から提供されています。

関連するリソース

関連する日記


この日記について