Posql Database - index catalog - ピュア PHP データベースエンジン


目次


Posql 概要

Posql (ポスキューエル) は、 ピュア PHP (標準バンドル以外に必要なモジュールなし) で作られた、
1 つのファイルを 1 つのデータベースとして扱う データベースエンジン のクラス (ライブラリ系 DBMS) です。
PHP のバージョンに関係なく動作し、 SQLite より気軽に扱えることを目標とされています。
基本的な SQL 文法をサポートし SQL-92 に準拠した設計で作られています。 パッケージには GUI でデータベースを操作できる PosqlAdmin (データベースマネージャ) が付属されています。
また、PEAR::DB, PEAR::MDB2 抽象化レイヤーを使用して Posql を操作できるドライバや、PHP フレームワーク CakePHP から Posql をデータベースとして扱える DBO ドライバもパッケージに同梱されています。
SQL ステートメントは、 PDO と互換性のある プリペアドステートメントや、 バインドメカニズムを使用することができます。
Posql データベースは、多数の同時アクセスに耐えられる 排他機構 (ロック) を実装しています。 複数のプロセスからの同時アクセスにより競合が発生するような場合でも、 アトミック操作に加え テスト・アンド・セット方式によって、 常にデータベースの安定性を保持します。

Posql は、 評価式 (WHERE 句など) で PHP 構文を使用することができます。
SQL92 - 99 標準の関数、文法を使用し SQL 構文で評価することも可能です。
評価エンジン切り替え機能によって、 その式の評価のされかたを PHP モード、SQL モードと、 その時に応じて切り替えることができます。

Posql は他のライブラリやフレームワークと衝突しないよう、 グローバル空間を汚さず設計されています。
定義されるものはクラス数個のみで、 Posql* (Posql_Config, Posql_Utils, etc.) 等のクラスが定義されます。

Posql バージョン 2.11 から、 SELECT サブクエリ (副問い合わせ) が実装され 扱える SQL が大幅に広がりました。 サブクエリは SELECT, INSERT, UPDATE または DELETE の各ステートメントの中の評価式など、 式が使えるところであればどこにでも使用できます。 それにあわせて EXISTS, ANY, SOME, ALL 演算子が実装されています。 バージョン 2.15 から、 UNION, INTERSECT, EXCEPT 演算子が実装されています。 また、今まではエイリアス名を指定する演算子が AS のみだったのを改善し、 ホワイトスペース区切りでも適応可能となりました。 バージョン 2.16 では、 GROUP BY 句において、 今までは 1 つのカラム名のみ指定可能だったのを改善し、 任意の評価式を複数 指定できるようになりました。 また、日時を扱う strftime や extract 関数が実装されました。 最新バージョン 2.17 では、 SELECT の速度が 約 80% 向上したという劇的な改善がされています。 また、JavaScript の関数 escape/unescape, encodeURI/decodeURI, encodeURIComponent/decodeURIComponent が互換実装され、PHP と JavaScript 間の連携をとる際に便利になりました。 JavaScript 関数の互換実装については API マニュアル を参照ください。 クエリーキャッシュ機能も実装されています。 setUseQueryCache(true/false) をコールすることによって、 クエリをキャッシュし 高速に結果セットが得られる仕組みになっています。 その他、いくつかのバグや不具合に対して より 標準 SQL に準じた修正がされ、 広く普及している MySQL, PostgreSQL, SQLite などの DBMS, RDBMS との互換性が 高くなっています。


Download

GitHub から Posql 最新 (Version 2.17) がダウンロードもしくは clone できます


目録

パッケージの説明や追記事項など。

Posql

Posql データベース クラス ライブラリです。

Posql についての詳しい解説や サポートする SQL 文法については、 ページ下記の 主なマニュアルとドキュメント を参照してください。

(posql.php)

posql.php は、Posql データベース クラス本体です。

Posql データベース メインファイル (posql.php, posql.pack.php) は、 ビルドの際に 各クラス (Posql_Config, Posql_Utils, etc.) を 1 つのファイルにまとめています。 これは、各クラスファイルを別々に require 等で読み込んだ場合と、 あらかじめ 1 つのファイルにまとめて実行した場合とで、 ベンチマークの結果、後者のほうが処理速度が向上したためです (環境によって違いはでると思います)。 SQLite の amalgamation のような感じでしょうか。 なお、より処理速度を向上させたい場合 下で解説する posql.pack.php を利用してください。

Posql は現時点 (Version 2.17) で 一時ファイルを生成することはありません。 それはトランザクション時も同じで、 すべて 1 つのデータベース (ファイル) 内で 一時的なバックアップ領域や更新、削除領域を作り、処理しています。 キャッシュも生成していません。 そのため、一時ファイルのためのディレクトリを用意したり そのパーミッションを気にする必要はありません。 また、データベースのバックアップをとりたい場合 対象のデータベース (ファイル) そのものをコピーするだけですみます。

例外として、排他ロック中のみ一時的に空のディレクトリを生成します。 ロック用ディレクトリはデータベースファイルと同じ場所に生成され 瞬時に削除されますが、 これは対象の (データベースファイルがある) ディレクトリに 「書き込み権限」が必要となることを示しています。 また、デッドロックの解消も行っています。 詳細については、 Posql API Reference #get/setDeadLockTimeout() を参照してください。

速度向上のため、 クエリキャッシュや 一時的な結果のキャッシュなどを利用したい場合、 Posql (Version 2.17) 側ではそのようなクラス・メソッドを実装していないため、 独自にロジックを組む必要がありますが、 その際には DESCRIBE コマンドによって各テーブルの最終更新日時などが取得できるため、 実装に役立つかもしれません。

(posql.pack.php)

posql.pack.php は、 posql.php のコメント、 インデントおよびホワイトスペースを除去 (minify) したファイルです。 現バージョン (2.17) では、約半分のファイルサイズになっています。

posql.pack.php は動作確認済みです。 より処理速度を向上させたい場合などに利用してください。

PosqlAdmin (posqladmin.php)

Posql パッケージには、 PosqlAdmin というデータベースマネージャが含まれています。 これは、phpMyAdmin (MySQL) や SQLiteManager (SQLite) のように GUI でデータベースの管理ができるアプリケーションです。

PosqlAdmin は、 データの保存を自身のファイルに書込み、読み込み 完全に 1 ファイルのみで稼動します。

サーバーにアップロードし、パーミッションを変更するだけで設置できます。 ローカルで利用する場合も同様ですが、Windows (XAMPP 環境) なら特に楽です。

Posql が生成するデータベースと同様に、 ファイル (posqladmin.php) をコピーするだけでバックアップがとれます。

なお、PosqlAdmin は下位バージョンとの互換性を保つ設計になっていますが、 バージョンが違いすぎると不具合が発生する可能性があります。 なるべく最新版を利用してください。

PEAR (PEAR)

Posql パッケージ内に、PEAR ディレクトリがあります。 これは PEAR::DB, PEAR::MDB2 抽象化レイヤーを利用し Posql をデータベースとして扱うための各ドライバです。

各ドライバは 現状 PEAR に登録していません。 そのため、利用するには PEAR ディレクトリにコピーするか、 または 各ディレクトリに同梱されている サンプルスクリプト (example.db.php, example.mdb2.php) のように 個別で (require 等によって) 読み込む方法になります。

CakePHP Posql driver (CakePHP-DBO-Posql)

Posql Version 2.09 から、 PHP フレームワーク CakePHP 上で、 Posql を データベース (DBO ドライバ) として利用するためのドライバが用意されています。 現バージョン 2.17 からも同様に扱えます。

パッケージに含まれるディレクトリ CakePHP-DBO-Posql 内が CakePHP と同じディレクトリ構造になっています。 その中に、ドライバやデータベース設定ファイルが含まれます。

CakePHP Posql driver の詳しい解説は、 ページ下記の CakePHP で Posql を使うための手順 を参照してください。

サンプルスクリプト (example.php)

example.php は、Posql を扱う上での 簡単なサンプルです。

実行すると 処理結果が表示されます。 各メソッドの使い方など参考になれば幸いです。

マニュアル・ドキュメント

主なマニュアル・ドキュメントとして以下のファイルが同梱されています。

これらは、Posql を扱う上で不明な点を解消するものでもあり、 また、PosqlAdmin 上で 「ヘルプ」 メニューを開いた際の 対象マニュアルにもなっています。

各マニュアル・ドキュメントは、 ページ下記の 主なマニュアルとドキュメント から閲覧できます。

(posql.sql.manual.html)

Posql が サポートしている SQL 文法 リファレンスです。

(posql.api.manual.html)

Posql の クラスメソッド API リファレンスです。

(posql.src.manual.html)

PHPDoc から生成された ソース ドキュメントです。


主なマニュアルとドキュメント

主なドキュメント、およびマニュアルは以下のリンクに含まれています。