LoginSignup
0
0

More than 5 years have passed since last update.

ChillaxでCouchDBを使う

Last updated at Posted at 2012-09-21

Chillaxを使うと簡単にCouchDBを利用できます。

chillax.lisp
;; サーバオブジェクトを作る
(defparameter *server*
  ;; yason-serverはJSONをYASONでエンコード・デコードする
  (make-instance 'chillax:yason-server
                 ;; JSONをalistにデコードする
                 :object-as-alist-p t
                 ;; JSONオブジェクトのキーをキーワードシンボルに変換する
                 :parse-object-key-fun (lambda (x) (intern x :keyword))))

;; データベースの一覧をリストで
(chillax:all-dbs *server*)
;=> ("_replicator" "_users"),
;   :OK

;; データベースにアクセスするときはensure-dbで
;; 存在しない場合は自動的に作られる
(defparameter *db* (chillax:ensure-db *server* "test"))

;; testというデータベースが作成された
(chillax:all-dbs *server*)
;=> ("_replicator" "_users" "test"),
;   :OK

;; データベースに属するドキュメントの一覧をリストで
;; まだドキュメントは存在しない
(chillax:all-documents *db*)
;=> ((:|rows|) (:|offset| . 0) (:|total_rows| . 0))

;; ドキュメントをPOSTメソッドで追加する
(chillax:post-document *db* '((:x . 0) (:y . 1)))
;=> ((:|rev| . "1-2c7bf904079545d844eaecd6b2b86324")
;    (:|id| . "2aad3ee4a1b1be1f1d746629f1001e2b") (:|ok| . T))

;; 作成したドキュメントが増えている
(chillax:all-documents *db*)
;=> ((:|rows|
;     ((:|value| (:|rev| . "1-2c7bf904079545d844eaecd6b2b86324"))
;      (:|key| . "2aad3ee4a1b1be1f1d746629f1001e2b")
;      (:|id| . "2aad3ee4a1b1be1f1d746629f1001e2b")))
;    (:|offset| . 0) (:|total_rows| . 1))

;; ドキュメントの内容を得る
(chillax:get-document *db* "2aad3ee4a1b1be1f1d746629f1001e2b")
;=> ((:Y . 1) (:X . 0) (:|_rev| . "1-2c7bf904079545d844eaecd6b2b86324")
;    (:|_id| . "2aad3ee4a1b1be1f1d746629f1001e2b"))

;; ドキュメントを更新する
(let* ((id "2aad3ee4a1b1be1f1d746629f1001e2b")
       (rev `(:|_rev| . ,(chillax:get-document-revision *db* id))))
  (chillax:put-document *db* id `(,rev (:x . 1) (:y . 2))))
;=> ((:|rev| . "2-e5db5dc048432fb2c980de010d280645")
;    (:|id| . "2aad3ee4a1b1be1f1d746629f1001e2b") (:|ok| . T))

;; 内容が変更されている
(chillax:get-document *db* "2aad3ee4a1b1be1f1d746629f1001e2b")
;=> ((:Y . 2) (:X . 1) (:|_rev| . "2-e5db5dc048432fb2c980de010d280645")
;    (:|_id| . "2aad3ee4a1b1be1f1d746629f1001e2b"))

注意点としては、現時点の最新リビジョンではDrakmaのurl-encode関数と干渉する不具合があります。開発者も問題は把握していて、一応GitHubに報告もしているので、近いうちに修正はされると思われます。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0