On May 10, 2008, at 2:46 PM, Clinton Ebadi wrote:
Ian Eslick <[EMAIL PROTECTED]> writes:
Also which version of the elephant tree? This may be fixed on
unstable - there was quite a bit of general cleanup as I made the
schema changes. Today, psets are just a wrapper around btrees -
anyone tried to reproduce this using straight btrees instead of
psets?
This is with stable. I tried to use unstable for the program at first,
but ran into weird issues with objects of different types ending up in
each others class indices.
Were you using inheritance? In unstable, a subclass can now be a
member of it's parent's index. This is a different behavior than in
the old branch. Actually I realized this isn't a good idea.
I've added an :inherit keyword to association, index and derived-index
slots that enables hierarchical indexing for all subclasses of that
base class. You can override the default behavior by shadowing the
slot in a subclass. This defaults to nil, so maintains the original
behavior but allows this new feature.
Default is that each named class has its own index.
ELEPHANT-USER> (defpclass base ()
((inherit :accessor inherit :index t :inherit t :initarg
:inherit)
(none :accessor none :index t :inherit nil :initarg :none)
(num :accessor num :initarg :num)))
#<PERSISTENT-METACLASS BASE>
ELEPHANT-USER> (defpclass sub (base)
())
#<PERSISTENT-METACLASS SUB>
Create some simple test cases
ELEPHANT-USER> (make-instance 'base :inherit 1 :none 1 :num 1)
#<BASE oid:210>
ELEPHANT-USER> (make-instance 'base :inherit 2 :none 2 :num 2)
#<BASE oid:213>
ELEPHANT-USER> (make-instance 'sub :inherit 2 :none 2 :num 2)
#<SUB oid:216>
ELEPHANT-USER> (make-instance 'sub :inherit 3 :none 3 :num 3)
#<SUB oid:214>
Our base class index picks up the subclass instances as well.
ELEPHANT-USER> (get-instances-by-value 'base 'inherit 1)
(#<BASE oid:210>)
ELEPHANT-USER> (get-instances-by-value 'base 'inherit 2)
(#<BASE oid:213> #<SUB oid:216>)
ELEPHANT-USER> (get-instances-by-value 'base 'inherit 3)
(#<SUB oid:214>)
Inherited indexes look the same from all subclasses, we could add an
option to filter superclasses if you use a subclass classname to
access an inherited index.
ELEPHANT-USER> (get-instances-by-value 'sub 'inherit 2)
(#<BASE oid:213> #<SUB oid:216>)
ELEPHANT-USER> (get-instances-by-value 'sub 'inherit 3)
(#<SUB oid:214>)
Non-inherited slots create a separate index for each class:
ELEPHANT-USER> (get-instances-by-value 'base 'none 1)
(#<BASE oid:210>)
ELEPHANT-USER> (get-instances-by-value 'base 'none 2)
(#<BASE oid:213>)
ELEPHANT-USER> (get-instances-by-value 'base 'none 3)
NIL
ELEPHANT-USER> (get-instances-by-value 'sub 'none 1)
NIL
ELEPHANT-USER> (get-instances-by-value 'sub 'none 2)
(#<SUB oid:216>)
ELEPHANT-USER> (get-instances-by-value 'sub 'none 3)
(#<SUB oid:214>)
After switching to derived indices and some manual index generation
the problems went away. I tried tracking down the problem for an
hourish but gave up.
I'm just using BDB.
--
<captain_krunk> ntk is currently using "telnet fyodor 25" to send
email
_______________________________________________
elephant-devel site list
elephant-devel@common-lisp.net
http://common-lisp.net/mailman/listinfo/elephant-devel
_______________________________________________
elephant-devel site list
elephant-devel@common-lisp.net
http://common-lisp.net/mailman/listinfo/elephant-devel