興味本位ですが、PostgreSQLで動かないか?!

上記のジャンルにあてはまらない話題、雑談など
アバター
sumida

興味本位ですが、PostgreSQLで動かないか?!

投稿記事by sumida » 2011/3/29 11:08

includes/classes/db/mysql/query_factory.phpと同等なものがあれば動くか?
(単なる興味本位です。以下、MySQLをM、PostgreSQLをPで記述)

PHPのM関数をP関数に「置き換える」或は「組み合わせて代用」でどうにかしようと思ったのですが、
insert_ID関数(@mysql_insert_id関数)について対応ができません。
 Mのauto_incrementの代用として、Pには、SERIAL型があります。
 ZenCartでは、インストール時、値を設定しているため、Pでは、シーケンスの同期を取る必要があります。
 また、取得は、SELECT文を使ってシーケンスを取得します。
 そのため、代用できません。
(とりあえず、影響は不明ですが、常にfalseを戻り値にする。)

次に、インストール用SQLの変更
 型をM用から同等なP用に変更
 主キー以外のキーは、CREATE INDEX或はCREATE UNIQUE INDEXで作成する。

HTMLを変更
 PostgreSQLを選択できるようにする。など。

zc_installを実行しました。
が、includes/configure.phpにあるDB_TYPEが'mysql'のため、データベースの設定画面に遷移する際、MySQLに接続しようとします。
事前に、includes/configure.phpにあるDB_TYPEを'postgresql'にします。

現在は、インストールをなんとか完了し、商品なしのショップをなんとか表示、管理画面と対戦中です。

これまでの対戦状況:
 SQLの文法上、Mは、型に寛容で、Pは、厳格です。
 SELECT文WHERE句で使用する日付(Pでは、timestamp型)、VCHARは、「'」で囲まないとエラーになります。
 SELECT文WHERE句にPでは、IF関数がないので、CASEに変更します。
 SELECT文WHERE句にPでは、date_format関数がないので、to_charに変更します。
 SELECT文に列の別名を使用する(列 AS 別名)と、Mは、結果セットも別名になるが、Pは、別名にならない。
 テーブル名取得は、Mは、「SHOW TABLES like …」、Pは、「SELECT tablename FROM pg_tables WHERE tablename like …」に変更する。
 などなど。

現状:
 管理画面で詳細項目を変更すると、項目の表示順序が入れ替わることがある。
 SELECT文WHERE句で「列(int型)=''」の場合、Mの寛容さで、動作している箇所があり、Pでは、厳格に文法エラーになる。

すべての部分でP用に対策するには、無理がありそう。

“Zen Cart 雑談処「禅亭」” へ戻る