not like って、あまり機会がないのかもしれないけど、これが必要になって、ちょっと調べる。DBFlute を確認したけど、like を not like にするようなオプションも見当たらない気がしたので、not like の ConditionKey を追加して対応した。やったことは、
ConditionKeyNotLikeSearch の作成
~/allcommon/cbean/ckey/ConditionKeyLikeSearch.java を ConditionKeyNotLikeSearch.java としてコピーして、_operand を not like にしておく。
ConditionKeyNotLikeSearchを追加
以下みたいな感じで、AbstractConditionQuery と ConditionKey を変更しておく。
--- ~/allcommon/cbean/AbstractConditionQuery.java +++ ~/allcommon/cbean/AbstractConditionQuery.java protected static final ConditionKey CK_LS = ConditionKey.CK_LIKE_SEARCH; + protected static final ConditionKey CK_NLS = ConditionKey.CK_NOT_LIKE_SEARCH; + protected static final ConditionKey CK_INS = ConditionKey.CK_IN_SCOPE; protected static final ConditionKey CK_NINS = ConditionKey.CK_NOT_IN_SCOPE; --- ~/allcommon/cbean/ckey/ConditionKey.java +++ ~/allcommon/cbean/ckey/ConditionKey.java /** The condition key of likeSearch. */ public static final ConditionKey CK_LIKE_SEARCH = new ConditionKeyLikeSearch(); + /** The condition key of notLikeSearch. */ + public static final ConditionKey CK_NOT_LIKE_SEARCH = new ConditionKeyNotLikeSearch(); + /** The condition key of inScope. */ public static final ConditionKey CK_IN_SCOPE = new ConditionKeyInScope();
~CQ にメソッド追加
あとは、not like をしたいカラムでできるようにメソッドを追加しておく。以下みたいな感じ。
--- ~/cbean/cq/bs/AbstractBs~CQ.java +++ ~/cbean/cq/bs/AbstractBs~CQ.java "content", "Content", "content", likeSearchOption); } + public void setContent_NotLikeSearch( + String content, + ~.allcommon.cbean.coption.LikeSearchOption likeSearchOption) { + registerLikeSearchQuery(CK_NLS, fRES(content), getCValueContent(), + "content", "Content", "content", likeSearchOption); + } + /** * InScope(in ('a', 'b')). And NullOrEmptyIgnored, * NullOrEmptyElementIgnored, SeveralRegistered.
あとは、like と同様にやれば良いのではないかな(いろんなLikeSearchOptionで実験とかはしてない)。
ありがとうございます!
参考にさせて頂き、次バージョン(0.8.5)にて取り込みました(SNAPSHOTに反映)。
エスケープも大丈夫でした。
(3年近くやってて、多分初めて話題に上りました(NotLikeSearch))
早速の対応をありがとうございます。
再生成しなきゃならなくなったら面倒だなっとも思っていたので助かります。