From b29badbad09502ccc8be96a8b48613bcd4a412c0 Mon Sep 17 00:00:00 2001 From: Karchnu Date: Thu, 13 Oct 2022 02:14:31 +0200 Subject: [PATCH] Deletion works. --- src/dodb.cl | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/src/dodb.cl b/src/dodb.cl index f52da9d..667f23d 100644 --- a/src/dodb.cl +++ b/src/dodb.cl @@ -108,6 +108,9 @@ :hard nil) )) +(defun db/index/del (database index-name object) + (delete-file (db/index/get-symlink-path database index-name object))) + ; Example: database "color" object ; -> "./storage/cars/partitions/by_color/Red/0000000015". (defun db/partition/get-symlink-path (database partition-name object file-name) @@ -133,6 +136,9 @@ :target (concatenate 'string "../../../data/" file-name) :hard nil))) +(defun db/partition/del (database partition-name object file-basename) + (delete-file (db/partition/get-symlink-path database partition-name object file-basename))) + ; example: db-path/indexes/by_name/ (defun db/new-index (database attribute-name) ; Create a directory for the indexes. @@ -170,7 +176,7 @@ (number->filename (db-current-index database))) ; Example: {db-path}/data/000000000000018 -(defun db/add/new-data-filepath (database file-name) +(defun get-filepath (database file-name) (concatenate 'string (db-path database) "/data/" file-name)) (defun db/add (database object) @@ -180,7 +186,7 @@ ; write object to file (util:write-object-to-file object - (db/add/new-data-filepath database file-name)) + (get-filepath database file-name)) ; handle indexes (loop for index in (db-indexes database) @@ -194,6 +200,25 @@ ; database.data[database.current-index] = object (setf (gethash (db-current-index database) (db-data database)) object)) +; TODO +(defun db/del (database object-index) + (let ((file-basename (number->filename object-index)) + (object (gethash object-index (db-data database)))) + ; remove data file + (delete-file (get-filepath database file-basename)) + + ; handle indexes + (loop for index in (db-indexes database) + do (db/index/del database index object)) + + ; TODO + ; handle partitions + (loop for partition in (db-partitions database) + do (db/partition/del database partition object file-basename)) + + ; remove in-memory data + (remhash object-index (db-data database)))) + ; Search for the data from the FS. ; TODO: get the hash index, too. (defun db/search/fs/get-by-index (database index-name value) @@ -232,9 +257,11 @@ (defparameter cars (db/new "vehicle" "./storage/cars/")) -;(db/add cars (make-vehicle :name "Corvet" :color "Red")) -;(db/add cars (make-vehicle :name "Ferrari" :color "Red")) -;(db/add cars (make-vehicle :name "Deudeuch" :color "Beige")) +;(db/add cars (make-vehicle :name "Corvet" :color "Red")) +;(db/add cars (make-vehicle :name "Ferrari" :color "Red")) +;(db/add cars (make-vehicle :name "Deudeuch" :color "Beige")) +;(db/add cars (make-vehicle :name "BMW" :color "Blue")) +;(db/add cars (make-vehicle :name "Suzuki Wagon" :color "Blue")) (db/new-index cars "name") (db/new-partition cars "color")