前方、中間、後方一致検索(LIKE検索)時のデフォルトのエスケープ文字
Doma 1.0.0-RC1にて、\から$に変更しました。
どのRDBMSであっても、次のように$を指定するescape句と合わせて@prefix、@contain、@suffix等を使ってください。
select * from employee where name like /* @prefix(prefix) */'X%' escape '$'
これまでだと、MySQLやPostgreSQLだとescape句が必要なかったんですが、たとえばOracleでも同じSQLを使いたい場合に問題がありました。
というのも、Oracleではescape句が必要なためこう書かなければいけません。
escape '\'
一方、MySQLやPostgreSQLではこのままではだめで\をエスケープしないといけません。
escape '\\'
というわけで、これまでだとどのRDBMSでも同じ記述というのが難しかったわけです。そこでMySQLやPostgreSQLでエスケープが必要ない$に変更しました。
MySQLやPostgreSQLでせっかくデフォルトのエスケープ文字(\)が用意されているのに、わざわざ毎回「escape '$'」と記述しなければいけないのは面倒だという場合は、MySQLDialectやPostgresDialectのコンストラクタでExpressionFunctionsのインタフェースを渡せるようになっているのでそこで調整可能です。
ちなみに、
今回DB2とSQL Serverに対応したわけですが、@prefix、@contain、@suffixを使った場合に、RDBMSごとのDialectで適切な文字をエスケープするようにしています。
Dialect | エスケープ対象文字 |
---|---|
OracleDialect | %, _, %, _ |
DB2Dialect | %, _, %, _ |
Mssql2008Dialect | %, _, [ |
その他のDialect | %, _ |