Very early draft.
parent
e0a5fb7819
commit
069b879b36
|
@ -0,0 +1,25 @@
|
|||
(defpackage :dodb
|
||||
(:use :common-lisp :util)
|
||||
; TODO
|
||||
(:export
|
||||
:db/new ; new database
|
||||
:db/new-index ; symlinks based on an unique ID
|
||||
:db/new-partition ; symlinks based on a shared ID
|
||||
))
|
||||
(in-package dodb)
|
||||
|
||||
; TODO: equivalent in Crystal
|
||||
; cars = DODB::DataBase(Car).new "./storage"
|
||||
; cars_by_name = cars.new_index "name", &.name
|
||||
; cars_by_name.get "foo"
|
||||
; cars_by_name.update "blah", new-car
|
||||
; cars_by_name.delete "blah"
|
||||
;
|
||||
; car = Car.new "Mustang", "red", [] of String
|
||||
; cars_by_name.update_or_create car.name, car
|
||||
|
||||
; TODO
|
||||
; (setf cars (db/new :structure car :directory "./storage"))
|
||||
; (setf cars_by_name (db/new-index cars "name"))
|
||||
; (db/get-by-index cars "name" "foo"))
|
||||
; (setf cars_by_name (db/new-index cars "name" (optional: (lambda (x) (car-name x)))))
|
|
@ -0,0 +1,28 @@
|
|||
; (make-package :ut)
|
||||
; (in-package :ut)
|
||||
(defpackage :util
|
||||
(:use :common-lisp)
|
||||
(:nicknames :ut)
|
||||
(:export :write-object-to-file
|
||||
:read-file
|
||||
:read-object-from-file))
|
||||
(in-package util)
|
||||
|
||||
(defun read-file (infile)
|
||||
(with-open-file (instream infile
|
||||
:direction :input
|
||||
:if-does-not-exist nil)
|
||||
(when instream
|
||||
(let ((string (make-string (file-length instream))))
|
||||
(read-sequence string instream)
|
||||
string))))
|
||||
|
||||
(defun read-object-from-file (infile)
|
||||
(read-from-string (read-file infile)))
|
||||
|
||||
(defun write-object-to-file (object outfile)
|
||||
(with-open-file (my-file outfile
|
||||
:direction :output
|
||||
:if-exists :supersede
|
||||
:if-does-not-exist :create)
|
||||
(format my-file "~&~S~&" object)))
|
Loading…
Reference in New Issue