[PHP-users 21192]Re: PEARでpostgresqlのトランザクション開始

Daichi Ueura daichi @ lifeflow.jp
2004年 4月 8日 (木) 17:28:47 JST


上浦です.

ついでですが,
"SELECT FOR UPDATE"
でもトランザクションが開始されません.

#自分でBEGINを実行するしかないのかな

On Thu, 08 Apr 2004 15:39:14 +0900
Tanaka-Qtaro-Yasuhiro <tanaq @ ca2.so-net.ne.jp> wrote:

> 田中久太郎です。
> 
> KOYAMA Tetsujiさんの<87isgb3wuj.wl @ poseidon.hoge.org>から
> >  ただ単に PEAR DB でトランザクションを利用したいというだけなら、
> >
> >	$db = DB::connect($dsn);
> >	$db->autoCommit(false);
> 
> 申し訳ありません。言葉が足りなかったようです。
> 
> $db->autoCommit(false);をしたうえで、
> “SET CONSTRAINTS 〜”文を実行してもトランザクションが開始されないの
> です。
> 
> PEARのDB/pgsql.phpのソースを見ると、beginを行うタイミングは以下のよう
> になっていて、$ismanipな queryじゃないとトランザクションを開始しないの
> ですが、
> 
>         if (!$this->autocommit && $ismanip) {
>             if ($this->transaction_opcount == 0) {
>                 $result = @pg_exec($this->connection, "begin;");
>                 if (!$result) {
>                     return $this->pgsqlRaiseError();
>                 }
>             }
>             $this->transaction_opcount++;
>         }
> 
> その $ismanipな queryというのは、以下のファンクション(DB.php)で判定される
> queryなので、“SET CONSTRAINTS”文ではトランザクションが開始しないのは、
> 当然といえば当然なのです。
> 
>     function isManip($query)
>     {
>         $manips = 'INSERT|UPDATE|DELETE|'.'REPLACE|CREATE|DROP|'.
>                   'ALTER|GRANT|REVOKE|'.'LOCK|UNLOCK';
>         if (preg_match('/^\s*"?('.$manips.')\s+/i', $query)) {
>             return true;
>         }
>         return false;
>     }
> 
> ここで質問なのですが、
> PEAR DBでPostgreSQLを利用するときに強制的にトランザクションを開始させる
> にはどういった方法が良いのでしょうか?
> 皆さんの対処法などをご教示いただければ幸いです。
> 
> 
> 
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp
> http://ns1.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://www.php.gr.jp/php/novice.php3

┛
  ┛ Daichi Ueura
┛
  ┛ Hiroshima City Univ, Department of Intelligent Systems.
┛    e-mail: (Private) daichi @ lifeflow.jp
  ┛        : (Office)  daichi @ neu.co.jp
┛          : (Univ)    daichi @ v6.ipc.hiroshima-cu.ac.jp
  ┛
┛



PHP-users メーリングリストの案内