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

Naofumi Kondoh php-users@php.gr.jp
Mon, 08 Apr 2002 17:23:12 +0900


ソフト工房の近藤です。

Yasuo Ohgaki wrote:
> 
> 大垣です。

詳しい説明ありがとうございます。

PHP-users 6734 で、エラーの時は FALSE を返すという仕様
ですが、できれば、どの列がどういうエラーだったかわかった
方が便利だと思います。

勿論、SQL 文生成前の更新値のチェックは行なうのが当然だ
から、列ごとのエラーチェックは不要という考えもあるとは
思いますが、あった方が便利です。

-- snip --

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

実情は大垣さんの言われるとおりだとは思います。

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

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

少くとも、直接 SQL 文を書いた場合と、pg_convert() を
通した場合では、結果が違うというのは、仕様として好ましく
ないと思います。

# 以前どこかのMLで話題になったことですが、CHAR 型に "" を
# INSERT した場合、Oracle では NULL になり、PostgreSQL
# Informix では、空白になるということでした。ANSI SQL
# の解釈では、"" の場合は CHAR 型で空白補完の義務はない
# という説明を頂いた記憶があります。


> PHP4.3.0リリースまでにはデフォルト値の有無、NOT NULLの指定
> の確認も追加する予定です。

DEFAUTL,NOT NULL は当然ですが、CHECK 制約も欲しいですね。

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

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

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
 (株)ソフト工房   近藤直文        Email:  nkon@shonan.ne.jp 
  《 PostgreSQL+PHPソースコードジェネレーターデモGPL版 》
           http://www.SOFTKOUBOU.co.jp/
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/