[seasar-php:132] Re: S2DaoのDTOについて

Yusuke Hata [E-MAIL ADDRESS DELETED]
2007年 5月 17日 (木) 01:33:53 JST


ハタです。

ISHITOYA Kentaro <[E-MAIL ADDRESS DELETED]> wrote:

> 下記485行目周辺をコメントアウトすると、
> persons.nickname = 'administrator'
> というWHERE句が生成され、元に戻すと、生成されませんでした。

うーん、このあたりはどこかのロジックが間違っている可能性がありますので調べてみます。
結果が分かったらここでまた報告したいと思います。
もしこれも間に合えば今月末あたりにバグフィックス版として一緒にリリースします。

> ところで、createAutoSelectSqlByDtoで生成されるWHERE句ですが、Dtoに複数
> のプロパティがあって、先行するプロパティが nullのときに、不必要なANDが
> 生成されてしまいます。
>
> (snip)
>
> SQLコマンドが、
> WHERE /*BEGIN*/ WHERE
> /*IF $first != null */$first = /*$first*/null /*END*/
> /*IF $second != null */AND $second = /*$second*/null /*END*/
> /*IF $third != null */AND $third = /*$third*/null /*END*/
> /*END*/
> となり、SQL文は
> 
> AND $second = 'moge' AND $third = 'hoga'
> 

この部分はWHERE 1=1 という語句を先頭に付けることでAND文の複数生成にも
対応できそうな範囲ですが、パフォーマンス(?)の観点と認識しないDBMSがあるかもしれない
という点でやってなかったりする部分です。
もしやるとするならばSQLの外部化で対応するしか無いと思います。

また、

> SQLParserImplの33行目
> $sql = preg_replace('/(.+);$/s', '\1', trim($sql));
> が、ボトルネックになっています。
> 
> (snip)
>
> $sql = preg_replace('/;$/s', '', trim($sql));
> とすると、問題ない速度になりましたが、処理的にはあっていますでしょうか。

こちら解析ありがとうございました。
ここでのの処理は、終端文字が ";" である場合に
";" を取り除くことがメインの部分でしたので、提示していただいた文法で問題ないです。
もしかするともっと別の関数str_*系でもできるかもしれないですね。
次のリリースでここでの修正も含めます。

以上です、よろしくお願いします。

-- 
Yusuke Hata <[E-MAIL ADDRESS DELETED]>
blog: http://blog.xole.net/


seasar-php メーリングリストの案内