[s2container-php5:74] Re: /*IF */ ... --ELSE ... /*END*/の使用方法について
Yusuke Hata
nowel @ xole.net
2007年 2月 8日 (木) 00:01:34 JST
ハタです。遅くなってしまって申し訳ありません。
で、結果なのですが、すいません、私の環境(後記)では全て動いてしまいます(@@;;
もし差し支えなければ、データやコードを私の方に送っていただければ検証してみますので、送っていただけませんでしょうか?
一部だけでも構わないです。
私の方でも、もう少し原因を追ってみます。
SQLバインドの使い方はgetFormatByWeightListやgetFormatByWeight2Listの使い方で正しいハズです。
以下は、その時のログになります。
------- <<ここから>> -------
[DEBUG] - SELECT hoge.id, hoge.weight, hoge.aaa, hoge.bbb FROM hoge WHERE hoge.weight=100
object(S2Dao_ArrayList)#454 (1) {
[0]=>
object(HogeEntity)#457 (4) {
:
}
}
[DEBUG] - SELECT hoge.id, hoge.weight, hoge.aaa, hoge.bbb FROM hoge WHERE hoge.weight is null
object(S2Dao_ArrayList)#453 (0) {
}
[DEBUG] - SELECT hoge.id, hoge.weight, hoge.aaa, hoge.bbb FROM hoge WHERE hoge.weight=100
object(S2Dao_ArrayList)#446 (1) {
[0]=>
object(HogeEntity)#456 (4) {
:
}
}
[DEBUG] - SELECT hoge.id, hoge.weight, hoge.aaa, hoge.bbb FROM hoge WHERE isnull(hoge.weight)
object(S2Dao_ArrayList)#445 (0) {
}
[DEBUG] - SELECT hoge.id, hoge.weight, hoge.aaa, hoge.bbb FROM hoge WHERE hoge.weight =100
object(S2Dao_ArrayList)#353 (1) {
[0]=>
object(HogeEntity)#455 (4) {
:
}
}
[DEBUG] - SELECT hoge.id, hoge.weight, hoge.aaa, hoge.bbb FROM hoge WHERE hoge.weight is null
object(S2Dao_ArrayList)#447 (0) {
}
------- <</ここまで>> -------
また、リファレンスに載せているコードですが、一部DBMSで正常に動かないことがあるので
以下のように修正することで動く可能性があります。
------- <<ここから>> -------
/*IF hoge != null*/hoge = /*hoge*/'abc'
-- ELSE hoge is null
# --[ここに半角スペース]ELSE hoge is null
/*END*/
------- <</ここまで>> -------
以下は作成してみたモノです。
interface HogeDao {
const BEAN = "HogeEntity";
const getFormatByWeightList_QUERY = '/*IF weight != null*/hoge.weight=/*weight*/0 --ELSE hoge.weight is null/*END*/';
public function getFormatByWeightList($weight = null);
const getFormatByWeight2List_QUERY = '/*IF weight != null*/hoge.weight=/*weight*/0 --ELSE isnull(hoge.weight)/*END*/';
public function getFormatByWeight2List($weight = null);
const getFormatByWeight3List_QUERY = 'hoge.weight /*IF weight != null*/=/*weight*/0 --ELSE is null/*END*/';
public function getFormatByWeight3List($weight = null);
}
class HogeEntity {
const TABLE = "hoge";
private $id;
private $weight;
private $aaa;
private $bbb;
:(setter/getterなので省略)
}
create table hoge(
id integer not null auto_increment,
weight varchar(255) not null,
aaa varchar(255),
bbb varchar(255),
primary key(id)
);
私の環境は以下になります。(なるべく合わせてみました)
OpenSuSE 10.2
PHP 5.1.6
MySql 5.0.26
S2Dao.PHP5 1.1.1
S2Container.PHP5 1.1.1
以上です。よろしくお願いします。
On Tue, 06 Feb 2007 16:27:19 +0900
Eishi Kuroda <kuroda @ jetsetrecords.net> wrote:
> こんにちは、黒田です。
>
> 立て続けに質問してすみません。
> S2Daoのコメントの使用についてなのですが、
>
> 下記のように/*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*/
>
>
> 環境は下記の通りです。
> CentOS 4.3
> PHP 5.1.6
> MySql 5.0.22
> S2Dao.PHP5 1.1.1
> S2Container.PHP5 1.1.1
>
> では、よろしくお願いいたします。
>
> 黒田
>
> _______________________________________________
> S2Container-PHP5 mailing list
> S2Container-PHP5 @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/s2container-php5
--
Yusuke Hata <nowel @ xole.net>
blog: http://blog.xole.net/
S2Container-PHP5 メーリングリストの案内