-
Type: Bug
-
Resolution: Fixed
-
Priority: Critical
-
Affects Version/s: S2Dao.PHP5-1.1.1, S2Dao.PHP5-1.2.0-beta1
-
Component/s: S2Dao.PHP5
-
None
-
Environment:S2Dao.PHP5 1.1.1
S2Container.PHP5 1.1.1
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/