[rucksack-devel] Error when deleting indexed objects
    Brad Beveridge 
    brad.beveridge at gmail.com
       
    Mon Jan 21 03:26:50 UTC 2008
    
    
  
I've run into an error when deleting classes that have slots that are
indexed by string.  The problem only occurs when you close & reopen
the Rucksack before deleting, which makes me suspect it is something
to do with the proxying.  I've tried to debug this, but I'm so far not
getting much traction :)
I'm going to keep looking at it, in the meantime here is a repro testcase.
Cheers,
Brad
(with-rucksack (rs *test-suite* :if-exists :supersede)
  ; Works
  (with-transaction ()
    (defclass broken ()
      ((string-key :initarg :data :accessor string-key
		   :index :string-index))
      (:index t)
      (:metaclass persistent-class))
    (make-instance 'broken :data "foo1")
    (make-instance 'broken :data "foo2")
    (rucksack-map-class rs 'broken
		       (lambda (obj)
			 (format t "Found ~A~%" (string-key obj))))
    (rucksack-map-slot rs 'broken 'string-key
		       (lambda (obj)
			 (rucksack::rucksack-delete-object rs obj))
		       :equal "foo1")
    (rucksack-map-class rs 'broken
		       (lambda (obj)
			 (format t "Found ~A~%" (string-key obj))))
  ))
(progn
  ; Broken
  (with-rucksack (rs *test-suite* :if-exists :supersede)
    (with-transaction ()
      (defclass broken ()
	((string-key :initarg :data :accessor string-key
		     :index :string-index))
	(:index t)
	(:metaclass persistent-class))
      (make-instance 'broken :data "foo1")
      (make-instance 'broken :data "foo2")
      (rucksack-map-class rs 'broken
			  (lambda (obj)
			    (format t "Found ~A~%" (string-key obj))))
      ))
  (with-rucksack (rs *test-suite*)
    (with-transaction ()
      (rucksack-map-slot rs 'broken 'string-key
			 (lambda (obj)
			   (rucksack::rucksack-delete-object rs obj))
			 :equal "foo1")
      (rucksack-map-class rs 'broken
			  (lambda (obj)
			    (format t "Found ~A~%" (string-key obj))))
      )))
    
    
More information about the rucksack-devel
mailing list