DB_DataObjectで使えない列名

また妙なところでハマってしまった…。

PEAR/DB_DataObjectを使ってDBアクセスをするテストをしていたところ、PostgreSQLでテーブルを作って、createTables.phpを実行した時に、以下のようなWarningが出力されました。

*****************************************************************
**                             WARNING                         **
** Found column 'no', which is invalid in an .ini file **
** This line will not be writen to the file - you will have    **
** define the keys()/method manually.                          **
*****************************************************************

まぁ、書いてある通りなんですが、「iniファイルの中に"no"っていう不正な列がありますよ」と…。
で、createTables.phpでは自動でiniファイルに"no"列が定義できないようなので、手動で定義を追加してDBアクセスしてみる…けど、やっぱりダメ…。

んじゃ、ソースを追ってみるか…って事で、createTables.phpを見てみる。

<?php
require_once 'DB/DataObject/Generator.php';

//途中略…

$generator = new DB_DataObject_Generator;
$generator->start();
?>

という事で、結果的にGenerator.phpをrequireして呼び出してるだけなので、Generator.phpを見てみる。

<?php
if (in_array($t->name,array('null','yes','no','true','false'))) {
    echo "*****************************************************************\n".
         "**                             WARNING                         **\n".
         "** Found column '{$t->name}', which is invalid in an .ini file **\n".
         "** This line will not be writen to the file - you will have    **\n".
         "** define the keys()/method manually.                          **\n".
         "*****************************************************************\n";
    $write_ini = false;
} else {
    $this->_newConfig .= "{$t->name} = $type\n";
}
?>

出力されたWarningで検索すると、こんなコードのところがある。
つまり、"null"とか"no"とかっていう列名はPEAR/DB_DataObjectでは使っちゃいけない事にしてるって感じですな…。

てことで、結局、"no"っていう列名は使わない方向で対応しました。

…が、"null"・"true"・"false"はそもそもDB側でテーブル作る時に列名にはできないのは分かりますが、"yes"・"no"は列名として使えますよねぇ?
特に"no"って、つい列名として使っちゃいたくなる気もするんですがNGなんですね…。(^^;