Lispy Days

趣味で Lisp な日々 (index) (weblog) (view) (edit) (help)

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 などの様々な環境で動作します.

特徴

サンプル

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)