〜Gauche on Railsへの道〜 2. ActiveRecord 風のものを作る。その2
DBアクセス
GaucheのRDBライブラリーは Perl(CPAN)と同じように、DBI/DBD (DB非依存/DB依存)という2つのレイヤーのライブラリーからできていて、通常は DBI のみ使い、RDBをアクセスします。
指定された、テーブルのカラム情報(カラム名、型)を取得する関数は下のようになります。ただし、このコードはMySQL専用です。
(define *data-source-name* "dbi:mysql:db=yy") (define (db-connect) (let ((conn (dbi-connect *data-source-name*))) (dbi-do conn "SET NAMES utf8") conn)) (define (db-column-info conn table-name) (let* ((query (dbi-prepare conn "select column_name,data_type from information_schema.columns where table_name = ? order by ordinal_position")) (result (dbi-execute query table-name))) (values (list->vector (map (lambda(row) (ref row 0)) result)) (list->vector (map (lambda(row) (ref row 1)) (ref result 'rows))) )))
実行すると、以下のようにカラム名、型を文字列のベクターで戻してくれます(関数から複数の値を戻す事ができます)。
gosh> (db-column-info (db-connect) "todos") #("id" "due" "task" "memo" "created_at" "updated_at") #("int" "date" "varchar" "text" "datetime" "datetime")
少し変わっているのは、selectの結果は
また、一度 fetch された結果は result の rows というスロットに格納されてます。