[cl-prevalence-devel] Removal of managed prevalence object does not delete corresponding non-id indexes' entries and duplicate index values allowed

Nico de Jager ndj at hivsa.com
Wed Apr 18 13:19:30 UTC 2007


On Wednesday 18 April 2007 13:45, Sven Van Caekenberghe wrote:
> Nico,
> 
> On 18 Apr 2007, at 11:33, Nico de Jager wrote:
> 
> > When one deletes an object with tx-delete-object after creating an  
> > index on a slot (other than id) of a managed prevalence class, the  
> > corresponding index entry is not deleted. Because adding a new  
> > object with tx-create-object appears to update all the indexes on  
> > the class, one would expect tx-delete-object to also update the  
> > indexes accordingly. Is this a bug or the intended behaviour?
> 
> The 'indexes on arbitrary slots' was contributed at one point. I do  
> think the implementation was quite clear and simple.
> But you are right, this is a bug (or oversight): when deleting an  
> object, the index entries should be cleaned up.
> 
> > Also, shouldn't tx-create-object (or tx-change-object-slots) signal  
> > a condition when the addition of an object or the change of a slot  
> > results in duplicate slot values for an indexed slot?
> 
> Apart from indexes on keys (like ID), which are necessarily unique,  
> indexes on arbitrary slots could theoretically be unique or not (as  
> in SQL). The current implementation is using hashtables and is  
> overwriting entries: so there too, there is a bug (or oversight):  
> either we should enforce unique indexes by signalling errors, or we  
> should allow multiple objects with the same indexed slot value, but  
> then there should be a list as value there (and we have to manage all  
> that correctly, esp. wrt. deleting objects).
> 
> What to you think ? How are you using this feature ?

It would be really nice if INDEX-ON had an optional UNIQUE parameter that allows one to choose between either a unique or non-unique index. I would use both types.

B.t.w. why is SLOTS an optional parameter in the definition of INDEX-ON? As it is the function would do nothing if SLOTS is not supplied:

(defun index-on (system class &optional slots (test 'equalp))
  "Create indexes on each of the slots provided."
  (dolist (slot slots)
    (execute-transaction (tx-create-objects-slot-index system class slot test))))

> 
> So, thanks for reporting this problem. Do you feel like trying to fix  
> this with a patch ?

I would give it a try as soon as I can find the time. I am not an expert Lisper yet, so it will probably take me longer. But it will definitely be worth it, I have replaced all my CLSQL databases with cl-prevalence.

> 
> Are there any other people on the list who would like to comment ?
> 
> Sven
> 

Thanks for your quick feedback.

Nico




More information about the Cl-prevalence-devel mailing list