From henrik at evahjelte.com Fri Feb 2 17:40:22 2007 From: henrik at evahjelte.com (Henrik Hjelte) Date: Fri, 02 Feb 2007 18:40:22 +0100 Subject: [rucksack-devel] Bug in leaf-delete-key Message-ID: <1170438022.8265.397.camel@trinidad> While trying out this beautiful source-code, I found a little bug in leaf-delete-key, see below. While writing this I saw a recent thread about deleting and index problems, and I think this fixes these problems. Best wishes, Henrik Hjelte * bugfix in p-btrees leaf-delete-key diff -rN -u old-rucksack/p-btrees.lisp new-rucksack/p-btrees.lisp --- old-rucksack/p-btrees.lisp 2007-02-02 18:13:01.700672580 +0100 +++ new-rucksack/p-btrees.lisp 2007-02-02 18:13:01.872675407 +0100 @@ -828,7 +828,7 @@ (ecase if-does-not-exist (:ignore (return-from leaf-delete-key)) (:error (error 'btree-search-error :btree btree :key key)))) - (remove-key leaf key) + (remove-key leaf (binding-key binding)) (unless (node-full-enough-p btree leaf) (enlarge-node btree leaf parent-stack)))) From henrik at evahjelte.com Fri Feb 2 17:55:06 2007 From: henrik at evahjelte.com (Henrik Hjelte) Date: Fri, 02 Feb 2007 18:55:06 +0100 Subject: [rucksack-devel] delete-instances method Message-ID: <1170438906.8265.405.camel@trinidad> May I propose adding an easier way to remove instances from the database, something like the method below? Cheers, Henrik Hjelte (in-package :rucksack) (defmethod delete-instances ((rucksack standard-rucksack) instances) (let ((rucksack-roots (rucksack-roots rucksack))) (flet ((delete-instance (instance) (let ((class-index (rucksack-class-index rucksack (class-of instance) :errorp nil)) (indexed-slot-names (rucksack-indexed-slots-for-class rucksack (class-of instance))) (oid (object-id instance)) (class-name (class-name (class-of instance)))) (when class-index (index-delete class-index oid oid)) (loop for slot-name in indexed-slot-names do (index-delete (rucksack-slot-index rucksack class-name slot-name) (slot-value instance slot-name) oid :if-does-not-exist :ignore)) (when (member oid rucksack-roots) (delete-rucksack-root instance rucksack))))) (mapcar #'delete-instance instances))))