CLSQL - Common Lisp 用マルチプラットフォーム SQL インターフェース
CLSQL は Common Lisp のための SQL データベースとのインターフェースです. 公式サイトは http://clsql.b9.com/ で Kevin M Rosenberg 氏 によって開発されています.
CLSQL は AllegroCL, LispWorks, SBCL, CMUCL, OpenMCL といった主要な処理系をサポートし, Microsoft Windows, Linux, Solaris, FreeBSD などの様々な環境で動作します.
特徴
- 多くの Lisp 処理系をサポート : AllegroCL, LispWorks, SBCL, CMUCL, OpenMCL
- 多くの RDBMS をサポート : PostgreSQL, MySQL, ODBC, AODBC, SQLite2, SQLite3, Oracle
- 関数的インターフェースとオブジェクト指向的インターフェースを備える
- MetaObjectProtocol による CLOS との統合
- Xanalys の LispWorks の上位エディションに附属の CommonSQL に似ている
サンプル
CLSQL 3.1.x はいちはやく SQLite の最新版 SQLite3 系 列に対応しました.SQLite3 系列はよりコンパクトなデータベースフォーマット,型 指定や BLOB サポート,UTF-16 サポートなどそれまでの SQLite2 系列に比べて大幅 に機能が強化されています.
;; データベースとの接続(オンメモリデータベース)
(clsql:connect '(":memory:") :database-type :sqlite3)
;; テーブル定義
(clsql:def-view-class User ()
((id :accessor id-of
:db-kind :key
:db-constraints :not-null
:type integer
:initarg :id)
(name :accessor name-of
:type (string 64)
:initarg :name))
(:base-table User))
(clsql:create-view-from-class 'User)
;; レコード挿入(1 トランザクション)
(clsql:with-transaction ()
(dotimes (i 100)
(clsql:update-records-from-instance
(make-instance 'User
:id i
:name (format nil "user~3,'0D" i)
:presidentid 1))))
;; 検索,表示
(clsql:locally-enable-sql-reader-syntax)
(let ((users (clsql:select 'User
:where (and [> [slot-value 'User 'id] 10]
[< [slot-value 'User 'id] 20]))))
(flet ((view (lst &aux (user (car lst)))
(format t ">>> User ~A : (id ~S) (name ~S)~%" user (id-of user) (name-of user))))
(mapcar #'view users)))
;; 接続を切る
(clsql:disconnect)