インデント

SQL の命名規約とフォーマットの続き・・・になるのかな。

SQL には終了タグはないけど SELECT 文以下はまとまりになっているから、インデントしたほうが自然に感じる。基本的には SQLプログラミング作法 に従ってるけどそこは好みかな。
...

<SELECT>
    <select-list>
        *
    </select-list>
    <FROM>
        emp
    </FROM>
    <WHERE>
        id = 1
    </WHERE>
</SELECT>
SELECT
        *
    FROM
        emp
    WHERE
        id = 1
SQL のコーディングスタイル(インデント) - 集中力なら売り切れたよ

この発想はなかった!
ただ、個人的には SELECT 文の SELECT 句という認識なので、

<select-statement>
    <select>*</select>
    <from>emp</from>
    <where>id = 1</where>
</select-statement>

なんだよね。これだと、WITH を使った場合でも

<select-statement>
    <with name="emp">
        <select>1 AS id</select>
    </with>
    <select>*</select>
    <from>emp</from>
    <where>id = 1</where>
</select-statement>
WITH emp AS (
  SELECT 1 AS id
)
SELECT
    *
FROM
    emp
WHERE
    id = 1

自然にインデントが決まる。
ただ、今は WITH を

<select-statement>
    <with>
        <with-body name="emp">
            <select>1 AS id</select>
        </with-body>
    </with>
    <select>*</select>
    <from>emp</from>
    <where>id = 1</where>
</select-statement>

こんな感じに捉えてるから、

WITH
  emp AS (
    SELECT 1 AS id
  )
SELECT
    *
FROM
    emp
WHERE
    id = 1

こうだけどね。こうすることで、共通表式を複数持ってる SQL でも対応できる。


あと、SELECT を持つ INSERT とかは、

<insert-statement into="emp">
    <select-statement/>
</insert-statement>

な感じだから、

INSERT INTO emp
  SELECT ...

みたいに、INSERT にぶら下がる。