DomaのSQLファイルでelseifやelseのブロックコメントをサポート

これまで elseif や else をラインコメントでサポートしていました。

select 
  *
from
  table1
where
/*%if column1 != null */
  column1 = /* foo */'aaa'
--elseif column2 != null-- column2 = /* hoge */'aaa'
--else   column2 is null
/*%end */

この書き方には次のような問題点がありました。

  1. 読みにくい
  2. column2が完全にコメントアウトされているのでSQLツールで実行してもcolumn2の存在チェックがされない

ブロックコメントをサポートしたのでこう書けます。

select 
  *
from
  table1
where
/*%if column1 != null */
  column1 = /* foo */'aaa'
/*%elseif column2 != null */
  and
  column2 = /* hoge */'aaa'
/*%else */
  and
  column2 is null
/*%end */

これで問題点が解決します。

  1. 読みやすい
  2. SQLツールでcolumn2の存在チェックができる

全体としては、プログラムからは発行されることのないSQLになる(if,elseif,elseの全条件が有効なので)と思いますが、利点のほうが大きいと思います。


上のSQLは条件によって次のように変換されます。

column1 != null ならば
select 
  *
from
  table1
where
  column1 = ?
column1 == null && column2 != null ならば
select 
  *
from
  table1
where
  column2 = ?
column1 == null && column2 == nullならば
select 
  *
from
  table1
where
  column2 is null

Domaには、andの自動除去機能があるので、whereの後ろにandが続く場合は不要とみなされ自動で除かれます。


これは、結構便利な機能だと思います。先入観からelseifやelseをブロックコメントにする発想はもってなかったです。リクエストしてくれたsoさんありがとうございます。
次のバージョンは1.4.0です。たぶん、今週末にリリースします。