WordPress は MySQL ディペンドなブログ・システムだけれど、PHP 5.1 で標準サポートされた PDO(PHP のデータベース抽象化オブジェクト)で SQLite を使用できるようにできないかと挑戦してみた。
結論からいうと PDO 化のメドはたちました。ただ SQLite 対応は SQLite が日付型を扱えないために日付関係の操作をいろいろと変更しないといけないので大変そう。
以下、覚え書きです。
[PDO 化]
– wp-includes/wp-db.php
– wp-includes/functions.php
の中の mysql_* 関数を PDO のメソッドで置換えること。functions.php 内の generic_ctp_number だけ wpdb クラスで抽象化されていないのがいや〜んな感じ。
[SQL方言]
(wp-admin/upgrade-schema.php を変更)
– CREATE TABLE 文内の PRIMARY KEY() はカラム定義で PRIMARY KEY を指定するように置換え、そのカラム定義の NOT NULL は削除(NOT NULL だと省略して自動採番ができなくなるため)
– CREATE TABLE 文内の KEY 定義は CREATE INDEX 文で置換え
– UNSIGNED は SQL99標準にはないので削除
– BIGINT は SQL99標準の INTEGER に置換え
(wp-admin/upgrade-functions.php)
– SHOW TABLE文はエラーがでるけどとりあえず無視(テーブル作成時に無駄な処理が行われる可能性があるだけでとりあえず実害はない)
(その他ファイル)
– MD5() は SQL の外で md5 関数を使うように書き換え
– NOW() は SQL99標準の CURRENT_TIMESTAMP に置換え
– YEAR(), MONTH(), DAYOFMONTH(), HOUR(), MINUTE(), SECOND() も SQL99標準の EXTRACT (field FROM source) に置換えるべき。ただし SQLite は EXTRACT をサポートしていない(;_;)
[SQLite 対応]
さて日付関連の操作をどうするべきかだが、考えられる対策としては以下の3つである。
– 日付データを INTEGER 型で持つように変更する
– 日付関数を SUBSTR で代用
– PDO の SQLite ドライバをソースコードレベルで修正してなんちゃって日付関数を追加する
うーむ、どれも一長一短(^^;
I’ve published a PDO abstraction layer for WordPress together with a SQLITE driver.
it’s available for testing at rathercurious.net/archives/20