[s2container-php5:116] Re: コメントアノテーション使用時の複数キーでの N:1 マッピングについて
Yusuke Hata
[E-MAIL ADDRESS DELETED]
2008年 1月 9日 (水) 00:52:09 JST
ハタです。
反応が遅れてしまいました。すいません。
パッチ提供ありがとうございます。
現在、S2Dao.PHP5の修正を行っている部分がいくつも溜まっ
てきているので
次回リリースに提供されたコードを盛り込もうと思います。
次回リリース次期が未定ですが、なるべく早くに提供できるように
します。
以上です、よろしくお願いします。
--
Yusuke Hata <[E-MAIL ADDRESS DELETED]>
blog: http://blog.xole.net/
On 2007/12/29, at 0:14, Shinya Tsuda wrote:
> はじめまして、津田と申します。
>
> 現在、担当プロジェクトで S2Dao.PHP5 を利用させていた
> だいておりますが、
> 表題の件について、不具合と思われる部分を見つけましたので報
> 告します。
>
> リファレンス (http://s2dao.php5.seasar.org/
> reference.html#N1Mapping) を
> 参照し、以下のような定義を含むエンティティを作成しました。
>
> /**
> * @Relation(relationNo = 0, relationKey = "sysid, subsysid")
> */
> public $subsystem;
>
> public function getSubsystem() {
> return $this->subsystem;
> }
>
> public function setSubsystem(Subsystem $subsystem) {
> $this->subsystem = $subsystem;
> }
>
> 対応する DAO で DB にアクセスしようとすると以下
> のような例外が発生しました。
>
> array and hash can not mix.
> [ @Relation(relationNo = 1, relationKey = "sysid, subsysid") ]
> [ subsysid" ]
>
> 調査したとこ
> ろ、S2DaoAnnotationReader#getAnnotationObject() で
> アノテーションをオブジェクトにするため、文字列を , で
> explode() した際に
> " で囲われた部分が分割されてしまうことが原因と分かりました。
>
> また、結果セットからマッピングを構成する際に、エンティティ
> が正しく
> マップされない不具合も発見しました。
> こちらは、S2Dao_RelationKey#__construct() で生成されるハッ
> シュの
> コリジョンが原因であることがわかりました。
>
> どちらの事象も、添付のパッチのとおり修正して解決しました。
> 修正に問題がないようであればリリースに盛り込んでいただきた
> いと思います。
>
> ご検討、よろしくお願いします。
>
> --
> Shinya Tsuda
> [E-MAIL ADDRESS DELETED]
>
> diff -Nru S2Dao-dist/S2Dao/S2DaoAnnotationReader.class.php S2Dao/
> S2Dao/S2DaoAnnotationReader.class.php
> --- S2Dao-dist/S2Dao/S2DaoAnnotationReader.class.php 2007-12-28
> 14:22:56.000000000 +0900
> +++ S2Dao/S2Dao/S2DaoAnnotationReader.class.php 2007-12-28
> 10:32:22.000000000 +0900
> @@ -112,6 +112,15 @@
> $argType = self::ARGS_TYPE_HASH;
> } else {
> $items = S2Dao_ArrayUtil::spacetrim(explode(',',
> $matches[2]));
> +
> + for ($i = 0; $i < count($items); $i++) {
> + if (preg_match_all('/"/', $items[$i],
> $_matches) % 2) {
> + $items[$i] .= "," . $items[$i + 1];
> + unset($items[$i + 1]);
> + $i--;
> + }
> + }
> +
> foreach ($items as $item) {
> if (preg_match('/^(.+?)=(.+)/s', $item,
> $matches)) {
> if ($argType == self::ARGS_TYPE_ARRAY) {
> diff -Nru S2Dao-dist/S2Dao/S2Dao_RelationKey.class.php S2Dao/S2Dao/
> S2Dao_RelationKey.class.php
> --- S2Dao-dist/S2Dao/S2Dao_RelationKey.class.php 2007-12-28
> 14:22:56.000000000 +0900
> +++ S2Dao/S2Dao/S2Dao_RelationKey.class.php 2007-12-28
> 14:20:29.000000000 +0900
> @@ -31,10 +31,7 @@
>
> public function __construct($values) {
> $this->values_ = $values;
> - $c = count($values);
> - for ($i = 0; $i < $c; ++$i) {
> - $this->hashCode_ += crc32($values[$i]);
> - }
> + $this->hashCode_ = crc32(var_export($values, true));
> }
>
> public function getValues() {
> _______________________________________________
> S2Container-PHP5 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/s2container-php5
S2Container-PHP5 メーリングリストの案内