現象と原因を追究してみました。
現象
A. 埋め込み変数コメントで
B. IFコメントで{.}
つなぎを使うと発生
{dto.xxx}原因
A. EmbeddedValueNodeにて、GetArgType()を呼び出しているが、
その引数の値が、"dto"ではなく、"dto.xxx"になってしまっている。
当然そんなArgTypeはないので、WARNが出力される。
なぜ、"dto.xxx"になっているかと言うと、EmbeddedValueNodeの
Splitの引数が、本来は
ドットであるべきところが、
{,}カンマに
なってしまっているからである。
B. CommandContextImpl.GetArg()にて、値が取得できなかった場合に
WARNが出力される。しかし、IFコメント的には、
と判定
したいので、その値がNULLになるのは正常である。
CommandContextImpl.GetArg()で、nullを返すときに
WARNログを出力するのは、Java版でも同様。
しかし違うのは、JavaではIFコメントをOGNLで解析していて、
C#ではJScriptで解析している。C#の場合は、JScript内部で
このGetArg()を呼び出してしまう。
解決方法
A. EmbeddedValueNodeの処理をBindVariableNodeとほぼ同じようにする。
(修正するctx.AddSqlの部分の引数の数だけが違う)
そもそもGetArg()で取得したいValueが取得できてしまうので
GetArgType()を呼び出す必要がない。
→GetArg()内で、Splitして解析しているため
B. 不明。
CommandContextImpl.GetArg()は、共通Objectなので、
WARNを出力するか否かは、呼び出し側の責任する?
→CommandContextImpl内でWARNは出力せず、
BindVariableNodeやEmbeddedValueNodeなどが、
戻り値で判断してWARNを出す。
とりあえずは、「A」はローカルで修正してテストも通り、
業務においてバッチを実行してもWARNログが出力されないことを確認しました。
その他正常に動作しております。
まず「A」に関して、このような修正でよろしいでしょうか?
そして「B」に関して、どうしましょうか?