Uploaded image for project: 'S2Dao.NET'
  1. S2Dao.NET
  2. DAONET-37

「IF&埋め込み変数」コメントが正常なのにWarnログが発生する。

XMLWordPrintable

    • Type: Icon: Bug Bug
    • Resolution: Fixed
    • Priority: Icon: Major Major
    • 1.0.2
    • Affects Version/s: 1.0.1
    • Component/s: S2Dao.NET
    • None

      現象と原因を追究してみました。

      現象
      A. 埋め込み変数コメントで

      {.}つなぎを使うと発生{dto.xxx}
      B. IFコメントで{.}

      つなぎを使うと発生

      {dto.xxx}

      原因
      A. EmbeddedValueNodeにて、GetArgType()を呼び出しているが、
      その引数の値が、"dto"ではなく、"dto.xxx"になってしまっている。
      当然そんなArgTypeはないので、WARNが出力される。
      なぜ、"dto.xxx"になっているかと言うと、EmbeddedValueNodeの
      Splitの引数が、本来は

      {.}

      ドットであるべきところが、

      {,}

      カンマに
      なってしまっているからである。

      B. CommandContextImpl.GetArg()にて、値が取得できなかった場合に
      WARNが出力される。しかし、IFコメント的には、

      {!= null}

      と判定
      したいので、その値が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」に関して、どうしましょうか?

            Assignee:
            jflute jflute
            Reporter:
            jflute jflute
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved: