[pgsql-jp: 36859] Re: client encoding と PQexec
Jun Kuriyama
kuriyama @ imgsrc.co.jp
2006年 3月 10日 (金) 13:01:04 JST
At Fri, 10 Mar 2006 12:43:33 +0900 (JST),
Tatsuo Ishii wrote:
> > これは主に昔の PostgreSQL (7.2.x 世代?) をサポートするため、だとは思
> > うのですが、現在の DBD::Pg では 7.4.x で PQexecPrepared が使える場合で
> > も、全てのパラメータの型を指定しないと PQexecPrepared を使いません(サー
> > バが 8.x なら大丈夫)。
> > PQprepare の際に paramTypes[] に 0 を入れてサーバ側に型を推測させる、
> > という機能を正しく使えていないような箇所を見つけたので、それを直せばよ
> > り多くの場面で PQexecPrepared が使えるようになるかもしれませんので、
> > ちょっとそこを攻めてみます。
>
> そういう実装なんですか.DBD::Pgの内部処理がサーバのバージョンによって
> 変わってしまうというのは,結構危険な感じがしますね.
はい、かなり危険です。:-(
# しかもその辺の if 文の条件がかなり深いし
> > libpq 側の PQescapeString が、client encoding と server (db)
> > encoding が異なる場合には、入力を server encoding に直した上で quote
> > してさらに client encoding に戻してそれを返す、などとしてしまうと
> > PQescapeString の定義が変わってしまいますか?
> >
> > # しかも遅くなりそう……。
>
> それは無理と言うか,必要ありません.エンコーディング変換の機能は
> PostgreSQLのバックエンド内部でしか利用できません.
> # それとも,エンコーディング変換をPerlでやる話でしたっけ?
まずはどちらの層でやるべきか、ということを知りたかったのと、DBD::Pg
側でやるべき場合にはそういうコードを入れようかな、と考えていました。
そうか、libpq と backend って全然別の世界なんだ。
> PQescapeStringがクライアントエンコーディングを理解するように修正するか,
> 同等の処理をDBD::Pgでやれば良いと思います.
で、[pgsql-jp: 36857] にあるように、今の PQescapeString の API だと
encoding が渡せない、ということですよね。やるとしたら別関数か……ちょっ
と話大きくしすぎになっちゃうなあ。
やはり DBD::Pg 側でどうにかするのが楽そうですね。ちょっと考えてみま
す。
--
Jun Kuriyama <kuriyama @ imgsrc.co.jp> // IMG SRC, Inc.
pgsql-jp メーリングリストの案内