thrift/lib/cl/READMES/readme-cassandra.lisp
Tomek Kurcz e93a901715 THRIFT-82: Add Common Lisp support
Client: cl

There's framed and buffered socket transport, binary protocol, multiplex, simple
server, cross-tests, self-tests, tutorial, CL library, CL code generator. Only
SBCL is supported for now.

This closes #1412
2018-03-02 13:44:50 -05:00

65 lines
2.6 KiB
Common Lisp

(in-package :cl-user)
#+(or ccl sbcl) /development/source/library/
(load "build-init.lisp")
;;; ! first, select the api version in the cassandra system definition
;;; as only one should be loaded at a time.
(asdf:load-system :de.setf.cassandra)
(in-package :de.setf.cassandra)
(defparameter *c-location*
;; remote
;; #u"thrift://ec2-174-129-66-148.compute-1.amazonaws.com:9160"
;; local
#u"thrift://127.0.0.1:9160"
"A cassandra service location - either the local one or a remote service
- always a 'thrift' uri.")
(defparameter *c* (thrift:client *c-location*))
(cassandra:describe-keyspaces *c*)
;; => ("Keyspace1" "system")
(cassandra:describe-cluster-name *c*)
;; =>"Test Cluster"
(cassandra:describe-version *c*)
;; => "2.1.0"
(loop for space in (cassandra:describe-keyspaces *c*)
collect (loop for key being each hash-key of (cassandra:describe-keyspace *c* space)
using (hash-value value)
collect (cons key
(loop for key being each hash-key of value
using (hash-value value)
collect (cons key value)))))
(close *c*)
(defun describe-cassandra (location &optional (stream *standard-output*))
"Print the first-order store metadata for a cassandra LOCATION."
(thrift:with-client (cassandra location)
(let* ((keyspace-names (cassandra:describe-keyspaces cassandra))
(cluster (cassandra:describe-cluster-name cassandra))
(version (cassandra:describe-version cassandra))
(keyspace-descriptions (loop for space in keyspace-names
collect (cons space
(loop for key being each hash-key
of (cassandra:describe-keyspace cassandra space)
using (hash-value value)
collect (cons key
(loop for key being each hash-key of value
using (hash-value value)
collect (cons key value))))))))
(format stream "~&connection to : ~a" cassandra)
(format stream "~&version : ~a" version)
(format stream "~&cluster : ~a" cluster)
(format stream "~&keyspaces~{~{~%~%space: ~a~@{~% ~{~a :~@{~20t~:w~^~%~}~}~}~}~}" keyspace-descriptions))))
;;; (describe-cassandra *c-location*)