[CONTAINER-427] [S2JDBC] SQL ファイルを使ったバッチ更新で,SQL ファイルに IF コメントや埋め込み変数コメントが使われているとエラーにする指定をできるようにしました. Created: 2010-09-02 Updated: 2010-09-03 Resolved: 2010-09-03 |
|
Status: | Resolved |
Project: | S2Container |
Component/s: | S2JDBC |
Affects Version/s: | 2.4.42 |
Fix Version/s: | 2.4.43 |
Type: | Improvement | Priority: | Major |
Reporter: | saori murooka | Assignee: | koichik |
Resolution: | Fixed | Votes: | 0 |
Labels: | None |
Description |
SqlFileBatchUpdateImplでは、最初に解析されたSQLをキャッシュしaddBatchする仕様だと思いますが、 SQLのWhere句や更新カラムが変わってしまうようなOGNL式が含まれている場合は 【例、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にいれたいとしても、 |
Comments |
Comment by koichik [ 2010-09-03 ] |
対応しました. s2jdbc.dicon で JdbcManager の allowVariableSqlForBatchUpdate プロパティを false にすると,バッチ更新で IF コメントや埋め込み変数コメントを含む SQL ファイルが使われた場合に VariableSqlNotAllowedRuntimeException がスローされます. |
Comment by koichik [ 2010-09-02 ] |
バッチ更新では IF コメントや埋め込み変数コメントを使っていると例外をスローするオプションを付ける方向で検討するということで再オープン. ちなみに S2Dao では SQL ファイルを使ったバッチ更新はサポートされていないとのことでした.心より恥じる. |
Comment by koichik [ 2010-09-02 ] |
> SQLのWhere句や更新カラムが変わってしまうようなOGNL式が含まれている場合は バッチ更新であっても IF コメントや埋め込み変数コメントを使うケースは普通にありえるので,無条件にエラーとすることは出来ません. このような SQL をバッチ更新で使ってしまうようであれば,原則としてバッチ更新を使わないようにして,その後で必要 (可能) な部分だけバッチ更新に変更するなどの方法で対処してください. |
Comment by saori murooka [ 2010-09-02 ] |
> SQLのWhere句や更新カラムが変わってしまうようなOGNL式が含まれている場合は Exceptionをthrowしなくても、実行できなくなる等 |