SqlFileBatchUpdateImplでは、最初に解析されたSQLをキャッシュしaddBatchする仕様だと思いますが、
SQLファイルに、条件によってWhere句や更新カラムを変更するようなIFコメントが含まれている場合、
意図しないSQLが実行されてしまうことがあります。
SQLのWhere句や更新カラムが変わってしまうようなOGNL式が含まれている場合は
Exception等throwしていただくことは可能でしょうか?
【例、UPDATE文で動的にSET句がかわる場合】
UPDATE TEST_TABLE SET /*IF batchDD == '01'*/ ,CULUMNS01 = /*value*/1 /*END*/ /*IF batchDD == '02'*/ ,COLUMNS02 = /*value*/1 /*END*/ WHERE DATE_YM = /*dateYm*/'201004'
最初にbatchDD=01だと、
UPDATE TEST_TABLE SET CULUMNS01 = 1 WHERE DATE_YM = '201004'
というSQL文になります。
2行目が、仮にbatchDDが02でCULUMNS02にいれたいとしても、
キャッシュされたCULUMNS01をUPDATEするSQLが利用され値がCOLUMNS01に入ります。
対応しました.
http://www.seasar.org/source/browse/?view=rev&root=s2container&revision=4464
s2jdbc.dicon で JdbcManager の allowVariableSqlForBatchUpdate プロパティを false にすると,バッチ更新で IF コメントや埋め込み変数コメントを含む SQL ファイルが使われた場合に VariableSqlNotAllowedRuntimeException がスローされます.