Uploaded image for project: 'S2Dao.PHP5'
  1. S2Dao.PHP5
  2. DAOPHP-8

/*IF */ ... --ELSE ... /*END*/の指定が正しく行われない

XMLWordPrintable

      see: [s2container-php5:73] /IF */ ... --ELSE ... /*END/の使用方法について

      下記のように/*IF */コメントを使用しようと思い試してみたのですが、
      リファレンスに沿ってまず、下記のように設定したところ、上手くいきません。

      const getFormatByWeightList_QUERY = '/IF weight != null/formats.weight=/weight/0 --ELSE formats.weight is null/END/';
      public function getFormatByWeightList($weight = null);

      生成されたクエリのWHERE以下は下記の通りとなり、SQLExceptionとなります。

      $dao->getFormatByWeightList(100)
      WHERE 100

      $dao->getFormatByWeightList(null)
      WHERE is null

      次に、下記のようにしてみました。

      const getFormatByWeight2List_QUERY = '/IF weight != null/formats.weight=/weight/0 --ELSE isnull(formats.weight)/END/';
      public function getFormatByWeight2List($weight = null);

      引数100の場合は同じなのでエラーでしたが、nullの場合、WHERE以下が下記のように生成され、成功します。

      WHERE isnull(formats.weight)

      最後に、下記のようにしてみました。

      const getFormatByWeight3List_QUERY = 'formats.weight /IF weight != null/=/weight/0 --ELSE is null/END/';
      public function getFormatByWeight3List($weight = null);

      これだと、引数100, nullの場合それぞれ、

      WHERE formats.weight =100
      WHERE formats.weight is null

      となり、両方成功します。
      QUERYアノテーションをSQLに変えて同様に行っても、同じ結果でした。

      本当は一番最初の書き方で使える筈だと思うのですが、一番最後の方法で使うしかないのでしょうか?
      それとも、根本的に何かを間違っているのでしょうか?

      リファレンスには下記の例が載っていたのですが、これだと上手く行かないと思います。

      /IF hoge != null/hoge = /hoge/'abc'
      --ELSE hoge is null
      /END/

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

              Created:
              Updated:
              Resolved: