Aliases removed and search functions renamed
parent
d522a80f51
commit
d1dc936eee
|
@ -14,15 +14,8 @@
|
||||||
))
|
))
|
||||||
(in-package dodb)
|
(in-package dodb)
|
||||||
|
|
||||||
(defmacro alias (to fn)
|
|
||||||
`(setf (fdefinition ',to) #',fn))
|
|
||||||
|
|
||||||
(alias ln osicat:make-link)
|
|
||||||
(alias ls osicat:list-directory)
|
|
||||||
(alias basename pathname-name)
|
|
||||||
|
|
||||||
(defun filename->integer (filename)
|
(defun filename->integer (filename)
|
||||||
(parse-integer (basename filename)))
|
(parse-integer (pathname-name filename))) ; pathname-name returns the basename
|
||||||
|
|
||||||
(defun to-upper-case (some-string)
|
(defun to-upper-case (some-string)
|
||||||
(format nil "~@:(~a~)" some-string))
|
(format nil "~@:(~a~)" some-string))
|
||||||
|
@ -58,7 +51,7 @@
|
||||||
|
|
||||||
(ensure-directories-exist data-dir-path)
|
(ensure-directories-exist data-dir-path)
|
||||||
|
|
||||||
(loop for filename in (ls data-dir-path)
|
(loop for filename in (osicat:list-directory data-dir-path)
|
||||||
do (let ((id (filename->integer filename))
|
do (let ((id (filename->integer filename))
|
||||||
(value (util:read-object-from-file filename)))
|
(value (util:read-object-from-file filename)))
|
||||||
(if (> id current-index)
|
(if (> id current-index)
|
||||||
|
@ -107,14 +100,14 @@
|
||||||
(db/index/get-filename database index-name object)))
|
(db/index/get-filename database index-name object)))
|
||||||
|
|
||||||
; Example: database "name" object "0000000015"
|
; Example: database "name" object "0000000015"
|
||||||
; -> (ln "./storage/cars/indexes/by_name/Corvet"
|
; -> (osicat:make-link "./storage/cars/indexes/by_name/Corvet"
|
||||||
; :target "../../data/0000000015"
|
; :target "../../data/0000000015"
|
||||||
; :hard nil)
|
; :hard nil)
|
||||||
(defun db/index/new (database index-name object file-name)
|
(defun db/index/new (database index-name object file-name)
|
||||||
(let ((symlink-path (db/index/get-symlink-path database index-name object)))
|
(let ((symlink-path (db/index/get-symlink-path database index-name object)))
|
||||||
|
|
||||||
; Works even when the database directory is moved.
|
; Works even when the database directory is moved.
|
||||||
(ln symlink-path
|
(osicat:make-link symlink-path
|
||||||
:target (concatenate 'string "../../data/" file-name)
|
:target (concatenate 'string "../../data/" file-name)
|
||||||
:hard nil)
|
:hard nil)
|
||||||
))
|
))
|
||||||
|
@ -133,7 +126,7 @@
|
||||||
file-name))
|
file-name))
|
||||||
|
|
||||||
; Example: database "color" object "0000000015"
|
; Example: database "color" object "0000000015"
|
||||||
; -> (ln "./storage/cars/partitions/by_color/Red/0000000015"
|
; -> (osicat:make-link "./storage/cars/partitions/by_color/Red/0000000015"
|
||||||
; :target "../../../data/0000000015"
|
; :target "../../../data/0000000015"
|
||||||
; :hard nil)
|
; :hard nil)
|
||||||
(defun db/partition/new (database partition-name object file-name)
|
(defun db/partition/new (database partition-name object file-name)
|
||||||
|
@ -143,7 +136,7 @@
|
||||||
(ensure-directories-exist symlink-path)
|
(ensure-directories-exist symlink-path)
|
||||||
|
|
||||||
; Works even when the database directory is moved.
|
; Works even when the database directory is moved.
|
||||||
(ln symlink-path
|
(osicat:make-link symlink-path
|
||||||
:target (concatenate 'string "../../../data/" file-name)
|
:target (concatenate 'string "../../../data/" file-name)
|
||||||
:hard nil)))
|
:hard nil)))
|
||||||
|
|
||||||
|
@ -243,7 +236,7 @@
|
||||||
(remhash object-index (db-data database))))
|
(remhash object-index (db-data database))))
|
||||||
|
|
||||||
; Search for the data from the FS.
|
; Search for the data from the FS.
|
||||||
(defun db/search/fs/get-by-index (database index-name value)
|
(defun db/get-by-index (database index-name value)
|
||||||
(filename->integer
|
(filename->integer
|
||||||
(osicat:read-link
|
(osicat:read-link
|
||||||
(concatenate 'string
|
(concatenate 'string
|
||||||
|
@ -252,14 +245,10 @@
|
||||||
; (db/index/get-directory-path database index-name) "/" value)))
|
; (db/index/get-directory-path database index-name) "/" value)))
|
||||||
|
|
||||||
; Search for the data from the FS.
|
; Search for the data from the FS.
|
||||||
(defun db/search/fs/get-by-partition (database name value)
|
(defun db/get-by-partition (database name value)
|
||||||
(loop for filename in (ls (db/partition/get-directory-path database name value))
|
(loop for filename in (osicat:list-directory (db/partition/get-directory-path database name value))
|
||||||
collect (filename->integer filename)))
|
collect (filename->integer filename)))
|
||||||
|
|
||||||
; By default, search on the FS.
|
|
||||||
(alias db/get-by-index db/search/fs/get-by-index)
|
|
||||||
(alias db/get-by-partition db/search/fs/get-by-partition)
|
|
||||||
|
|
||||||
(defun db/index/update (database index-name object file-name old-object)
|
(defun db/index/update (database index-name object file-name old-object)
|
||||||
(let* ((struct-name (db-struct-name database))
|
(let* ((struct-name (db-struct-name database))
|
||||||
(new-value (get-object-attribute struct-name index-name object))
|
(new-value (get-object-attribute struct-name index-name object))
|
||||||
|
|
Loading…
Reference in New Issue