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)