括弧の中のANDとORの自動除去機能はDoma 1.4.1 で対応予定

Doma 1.4.0だと、SQLの中の式コメントの評価の結果、WHERE句とHAVING句のうしろにANDやORが続く場合は自動で除いているのですが、開き括弧のうしろにANDやORが続く場合は対象外でした(考慮し忘れていました)。1.4.1 で対応します。

すぐに試してみたい方はSNAPSHOTをどうぞ。
http://maven.seasar.org/maven2-snapshot/org/seasar/doma/doma/1.4.1-SNAPSHOT/doma-1.4.1-20100410.025503-1.jar

SNAPSHOT使ってもらえれば、次のようなSQLの組み立て条件が複雑なケースに対応できるようになります(もちろん、このままSQLのツールで実行可能です)。

select * from employee
where
/*%if @isNotEmpty(name) */
  name like /* @contain(name) */'%test%' escape '$'
/*%end */
/*%if min != null || max != null*/
  or (
  /*%if min != null */
    age >= /* min */10
  /*%end */
  /*%if max != null */
    and
    age <= /* max */70
  /*%end */
  )
/*%end */

たとえば、name != null && min == null && max != nullならば、最終的に次のSQLになります。(括弧の中のandが除去されます)

select * from employee
where
  name like ? escape '$'
  or (
    
    age <= ?
  )

name == null && min == null && max != nullならば、最終的に次のSQLになります。(括弧の中のandとwhereの後ろのorが除去されます)

select * from employee
where
   (
    
    age <= 40
  )

全部nullだと、こうなります。

select * from employee