2010年6月3日木曜日

SQL整形

思い立った(他の開発が疲れたとき(^x^))とき、SQL整形の機能を強化しています。

これまた奥の深い世界で、SQLを書く人により流儀やお作法があります。

C# や Java のようにコーディング規約に従って記述することは稀で、少なくとも僕の経験の範囲では、一度も見かけたことがないという・・
※パフォーマンスに考慮して、ウンタラ・・はもちろんありますが。。

例えば、SELECT文の項目の区切りであるカンマ(,)、皆さんはどこに付けますか?

<Aさん>
    SELECT
        COL1, -- カンマを後に付ける派
        COL2
    FROM
        TABLE1

<Bさん>
    SELECT
         COL1
        ,COL2   -- カンマを前に付ける派
    FROM
        TABLE1

ちなみに僕はAさんと同じで、後ろに付けるタイプです。
この他にも、AND の位置や、JOIN、UNION と流儀を上げだしたら、きりがありません。

そしてすべての流儀に合わせて整形エンジンを組むのはかなり困難です(T^T)

メインの流儀はオプションで設定できるようにしていくつもりですが、そもそもSQLは、自然言語に近く整形が困難な言語ですので、どこまで作り込める(やる気になる)か。。

もう少し精度が上がったら、SQLの整形エンジン自体を、オープンソースか.NET DLLで再利用可能な形で公開しますので、使って頂いて色々叩いてもらいたいなぁと思っています。

さて、話は変わって最後に本日苦労したところ。

<通常のINSERT>
    INSERT INTO
        TABLE1
    (
        COL1,
        COL2
    )
    VALUES
    (
        'AAA',
        'BBB'
    )

<SELECT INSERT>
    INSERT INTO
        TABLE1
    SELECT
        COL1,
        COL2
    FROM
        TABLE2

何故、INSERTで違う記述を可能にしたんだ、ANSIめ(ToT)

0 件のコメント:

コメントを投稿