[elephant-cvs] CVS elephant/src/elephant

ieslick ieslick at common-lisp.net
Sat Mar 24 12:16:03 UTC 2007


Update of /project/elephant/cvsroot/elephant/src/elephant
In directory clnet:/tmp/cvs-serv6422/src/elephant

Modified Files:
	classes.lisp classindex.lisp 
Log Message:
Cleanup indexing tests so we always have a clean slate

--- /project/elephant/cvsroot/elephant/src/elephant/classes.lisp	2007/03/21 14:29:30	1.23
+++ /project/elephant/cvsroot/elephant/src/elephant/classes.lisp	2007/03/24 12:16:03	1.24
@@ -69,8 +69,9 @@
 				       never (eq (class-of superclass) persistent-metaclass))))
     (if (and (not (eq class persistent-object)) not-already-persistent)
 	(apply #'call-next-method class slot-names
-	       :direct-superclasses (cons persistent-object
-					  direct-superclasses) args)
+;;	       :direct-superclasses (cons persistent-object
+;;					  direct-superclasses) args)
+	       :direct-superclasses (append direct-superclasses (list persistent-object)) args)
 	(call-next-method))))
 
 (defmethod finalize-inheritance :around ((instance persistent-metaclass))
--- /project/elephant/cvsroot/elephant/src/elephant/classindex.lisp	2007/03/23 16:08:10	1.31
+++ /project/elephant/cvsroot/elephant/src/elephant/classindex.lisp	2007/03/24 12:16:03	1.32
@@ -232,34 +232,41 @@
   (let ((class-idx (find-class-index class :sc sc :errorp errorp)))
     (if class-idx 
 	(progn
-	  (wipe-class-indexing class class-idx :sc sc)
+	  (wipe-class-indexing class :sc sc)
 	  (update-indexed-record class nil))
 	(when errorp
 	  (error "No class index exists in persistent store ~A" sc)
 	  (return-from disable-class-indexing nil)))))
 
-(defmethod wipe-class-indexing ((class persistent-metaclass) class-idx &key (sc *store-controller*))
-  ;; Clear out the current class record
-  (with-transaction (:store-controller sc)
-    (with-btree-cursor (cur class-idx)
-      (when (cursor-first cur)
-	(loop while (cursor-delete cur)))))
-  ;; Get the names of all indices & remove them 
-  (let ((names nil))
-    (map-indices (lambda (name secondary-index)
-		   (declare (ignore secondary-index))
-		   (push name names))
-		 class-idx)
-    (dolist (name names)
-      (if (member name (class-slots class))
-	  (remove-class-slot-index class name)
-	  (with-transaction (:store-controller sc)
-	    (remove-index class-idx name)))))
-  ;; Drop the class instance index from the class root
-  (with-transaction (:store-controller sc)
-    (remove-kv (class-name class) (controller-class-root sc)))
-  (setf (%index-cache class) nil)
-  )
+(defmethod wipe-class-indexing ((class persistent-metaclass) &key (sc *store-controller*))
+  (wipe-class-indexing (class-name class) :sc sc))
+
+(defmethod wipe-class-indexing ((class-name symbol) &key (sc *store-controller*))
+  (let ((cindex (get-value class-name (controller-class-root sc)))
+	(class (find-class class-name nil)))
+    (when cindex
+      ;; Delete all the values
+      (with-transaction (:store-controller sc)
+	(with-btree-cursor (cur cindex)
+	  (loop while (cursor-next cur) do
+	       (cursor-delete cur))))
+      ;; Get the names of all indices & remove them 
+      (let ((names nil))
+	(map-indices (lambda (name secondary-index)
+		       (declare (ignore secondary-index))
+		       (push name names))
+		     cindex)
+	(dolist (name names)
+	  (when (member name (class-slots class))
+	    (if class 
+		(remove-class-slot-index class name)
+		(with-transaction (:store-controller sc)
+		  (remove-index cindex name))))))
+      ;; Drop the class instance index from the class root
+      (with-transaction (:store-controller sc)
+	(remove-kv class-name (controller-class-root sc)))
+      (when class
+	(setf (%index-cache class) nil)))))
 
 (defmethod add-class-slot-index ((class symbol) slot-name &key (sc *store-controller*))
   (add-class-slot-index (find-class class) slot-name :sc sc))




More information about the Elephant-cvs mailing list