[PHP-users 6747] Re: FRC: New PostgreSQL function for PHP (pg_convert)

Yasuo Ohgaki php-users@php.gr.jp
Mon, 08 Apr 2002 21:08:37 +0900


Naofumi Kondoh wrote:
> ソフト工房の近藤です。
>
> Yasuo Ohgaki wrote:
>
>>大垣です。
>
>
> 詳しい説明ありがとうございます。
>
> PHP-users 6734 で、エラーの時は FALSE を返すという仕様
> ですが、できれば、どの列がどういうエラーだったかわかった
> 方が便利だと思います。
>
> 勿論、SQL 文生成前の更新値のチェックは行なうのが当然だ
> から、列ごとのエラーチェックは不要という考えもあるとは
> 思いますが、あった方が便利です。

そうですね。エラーメッセージ(E_NOTICE)には書いてありますが、
ログ用にpg_convert_error()と言う関数があった方が便利かも
しれません。

# まだ、実装するかは悩んでいます。

>
> -- snip --
>
>
>># "" (null string)がNULLになると困る場合は使わな
>># いでください。ほとんどの場合、この仕様で困らないと
>># と思いますが、もし困る方多い場合は考えます。
>
>
> 実情は大垣さんの言われるとおりだとは思います。

POST等が空白の場合は、値が""になるのでこの仕様の方が便利
なのは確かですが、問題が全く無い訳でもありません。。。

>
> しかし、"" と NULL を混同する人が多くて、SQL の説明に
> いつも苦慮している身としては、"" と NULL を同一視して
> しまいかねない仕様には抵抗があります。

初心者とは言えSQLのNULLと""の違いを理解しないのは致命
的です。

# この仕様はNULLと""の違いをさらに混同させてしまいそう
# と言う事は確かですね。

>
> 個人的には、"" は、そのまま "" と扱って、NULL にしたい
> ばあいは、\N など特別な文字列を入れるという仕様の方が
> 良いと思います。

> 少くとも、直接 SQL 文を書いた場合と、pg_convert() を
> 通した場合では、結果が違うというのは、仕様として好ましく
> ないと思います。
>
> # 以前どこかのMLで話題になったことですが、CHAR 型に "" を
> # INSERT した場合、Oracle では NULL になり、PostgreSQL
> # Informix では、空白になるということでした。ANSI SQL
> # の解釈では、"" の場合は CHAR 型で空白補完の義務はない
> # という説明を頂いた記憶があります。
>

この仕様にはnull stringが利用できない、致命的な欠陥(最近
のPostgreSQLではそれほど致命的でもないですが)があるので、
もう一度、考えてみます。

>
>>PHP4.3.0リリースまでにはデフォルト値の有無、NOT NULLの指定
>>の確認も追加する予定です。
>
>
> DEFAUTL,NOT NULL は当然ですが、CHECK 制約も欲しいですね。

プレチェックということで簡単なクエリで取得できるメタデータを
元にしているためCHECK制約はpg_metadataで取得していません。

メタデータを取得するのは簡単なので、取得する分には良いのですが
CHECK制約をきちんと処理するには手間が結構必要になります、、、

# とりあえず、サスペンドと言う事でお願いします。

>
> pg_convert() でエラーにならなければ、pg_exec でもエラーに
> ならないのが理想だけど、UNIQUE INDEX や REFERENCES その他
> があるから実現不可能でしょうね。

クエリ実行をお願いします :)

> そこまでカバーしようとすると、関数レベルの話ではなくて、
> フレームワークのような手法をとるしかないと思っています。

フレームワークとまではいきませんが、静的なデータである毎回メタデー
タをクエリするのはあまりに効率的とは言えないのでメタデータのキャッ
シュは実装しようと思っています。

# キャッシュが無くても使えるので、いつになるか分かりません。
# 実はこの関数も4.2.0までに実装と思っていたのですが、思い
# のほか、4.2.0が早くリリースプロセスに入ったので無理でした。

--
Yasuo Ohgaki




__________________________________________________
Do You Yahoo!?
Yahoo! BB is Broadband by Yahoo!  http://bb.yahoo.co.jp/