[Gauche-devel-jp] DBI/DBD

Back to archive index

えんどう yasuy****@javao*****
2004年 2月 17日 (火) 23:08:15 JST


えんどうです。

まだ最低限の実装ですが、DBI/DBDを書いたので投稿します。

http://www.kahua.org/cgi-bin/kahua.cgi/kahua-web/show/dev/DBI

上記から dbi-0.1.tgz がダウンロードできます。

* 利用可能なRDBMS

現状で利用できる RDMS は以下です。

- MySQL
- PostgreSQL

MySQLを利用するためには mysql.h と libmysqlclient ライブラリーが必要です。

たとえば Debian GNU/Linux では
apt-get install mysql-client mysql-dev を実行してください。

PostgreSQLを利用するためには Gauche の pg 拡張ライブラリーが必要です。

http://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?Gauche%3aPackages#H-19q7sdo

Gauche の pg 拡張ライブラリーをビルドするには
libpq-fe.h と libpq ライブラリーが必要です。

たとえば Debian GNU/Linux では
apt-get install postgresql-client postgresql-dev を実行してください。

* インストール

 $ tar xvfz dbi-0.1.tgz

 $ cd dbi-0.1

 $ ./configure

 $ make

makeにはMySQLのmysql.hヘッダーおよびlibmysqlclientライブラリーが必要です。

 $ make test

make testで共通モジュールのテストが行われます。 
PostgreSQL、MySQLのテストを行いたい場合は以下をそれぞれ実行してください。

 $ make checkpg
 $ make checkmysql

 $ sudo make install

* 使い方

まず dbi モジュールを use します。

(use dbi)

つぎに、各ドライバーに対応した <dbi-driver> をmakeします。

(define driver (dbi-make-driver "mysql"))

makeした <dbi-driver> を使ってデータベースに接続し、
<dbi-connection> を取得します。

(define connection (dbi-make-connection driver "user" "password" "option"))

<dbi-connection> に対応した <dbi-query> をmakeします。

(define query (dbi-make-query connection))

SQL文を実行し、<dbi-result-set> を得ます。

(define result-set (dmi-execute-query query "select * from test"))

<dbi-result-set> は <collection> を実装し、call-with-iterator が使えます。
カラムの取り出しは dbi-get-value カラム 番号 を使います。

(define rows
  (map (lambda (row) (list (dbi-get-value row 0) (dbi-get-value row 1)))
  result-set))

たとえば test テーブルに以下のようなデータが入っていた場合、

+------+----------
| id   | name     |
+------+----------+
|   10 | yasuyuki |
|   20 | nobsun   |
+------+----------+

上記の rows には以下が格納されます。

(("10" "yasuyuki") ("20" "nobsun"))

* ToDo

- SchemeQLの移植
- configureでPostgreSQLやMySQLのインストールを判断して、
  インストール済みのものだけテストする
- dbi層でのトランザクションAPI抽象化仕様
- dbi層でのカーソル抽象化仕様
- Firebird, Oracle等でprepared statementをネイティブ側へ委譲
- 各種エラー処理

-- 
ENDO Yasuyuki <yasuy****@javao*****>
http://www.javaopen.org/~yasuyuki/ (Personal/Japanese Only)
http://www.javaopen.org/jfriends/ (Japanese Only)




Gauche-devel-jp メーリングリストの案内
Back to archive index