前方、中間、後方一致検索(LIKE検索)時のデフォルトのエスケープ文字

Doma 1.0.0-RC1にて、\から$に変更しました。

どのRDBMSであっても、次のように$を指定するescape句と合わせて@prefix、@contain、@suffix等を使ってください。

select * from employee where name like /* @prefix(prefix) */'X%' escape '$'

これまでだと、MySQLPostgreSQLだとescape句が必要なかったんですが、たとえばOracleでも同じSQLを使いたい場合に問題がありました。
というのも、Oracleではescape句が必要なためこう書かなければいけません。

escape '\'

一方、MySQLPostgreSQLではこのままではだめで\をエスケープしないといけません。

escape '\\'

というわけで、これまでだとどのRDBMSでも同じ記述というのが難しかったわけです。そこでMySQLPostgreSQLエスケープが必要ない$に変更しました。

MySQLPostgreSQLでせっかくデフォルトのエスケープ文字(\)が用意されているのに、わざわざ毎回「escape '$'」と記述しなければいけないのは面倒だという場合は、MySQLDialectやPostgresDialectのコンストラクタでExpressionFunctionsのインタフェースを渡せるようになっているのでそこで調整可能です。

ちなみに、

今回DB2SQL Serverに対応したわけですが、@prefix、@contain、@suffixを使った場合に、RDBMSごとのDialectで適切な文字をエスケープするようにしています。

Dialect エスケープ対象文字
OracleDialect %, _, %, _
DB2Dialect %, _, %, _
Mssql2008Dialect %, _, [
その他のDialect %, _