SQL文の可変IN構文を変換する。
IN句を検索条件にもつSQL文のIN句の項目数を付加する。
IN句を動的に生成する場合には、バインド変数名に「[]」を付加すること。
また、対応するオブジェクトのフィールドタイプは、配列またはCollectionとすること。
本機能は、検索条件のオブジェクトにMapインタフェースの実装クラスを指定することは出来ない。
Mapクラスは、値に対する型情報が存在しないため、IN句を構築する際に値が配列またはCollectionであることのチェックが確実に行えないためである。
これは、テスト時に確実に型チェックを行えないことを意味し(例えば値がnullの場合は、その型が何かは実行時にはわからない)、
予期せぬ不具合の温床となるため本フレームワークでは敢えてMapの使用を制限している。
例えば、「userKbn」をIN句のパラメータとして指定する場合には、「USER_KBN IN (:userKbn[])」となる。
例:
Entity entity = new Entity();
entity.userKbn = new String[] {"1", "2"};
parser.parse(
"SELECT "
+ "USER_ID "
+ "FROM "
+ "USER_MTR "
+ "WHERE "
+ "$if(userKbn) {USER_KBN IN (:userKbn[])} "
parser.getSql(); ->
SELECT USER_ID
FROM USER_MTR
WHERE (0 = 1 OR (USER_KBN IN (?, ?)))
parser.getNameList(); -> [userKbn[0], userKbn[1]]