Daniel,
I just promoted a simple sketch of a query interpreter and syntax on
the unstable branch that handles queries like:
(query-select #'(lambda (person school) (format t "Person named: ~A at
~A~%" (name person) (name school)))
'(select ((?p person) (?s school))
(where (and (> (age ?p) 10) (< (age ?p) 25))
(= ?s (school ?p))
(string> (name ?s) "Foo")))))
This calls the provided function for all pairs of people and schools
for ages between 10 and 25 where the school name is alphabetically
greater than "Foo"
If you load and evaluate src/elephant/query-example.lisp you can play
with this little hack.
There are absolutely no performance considerations. It essentially
does the search through lisp objects that Robert alluded to. It maps
all instances of person and uses constraints like (= ?s (school ?p))
to create the connection between objects via slot values. You have to
make sure that it can figure out what ?s is before you can use ?s in
another expression, so it's pretty restrictive.
Anyway, hopefully this will give you some ideas on how to get started!
Ian
On Mar 6, 2008, at 8:23 AM, [EMAIL PROTECTED] wrote:
On Mar 4, 2008, at 10:38 PM, Ian Eslick wrote:
= A little query interpreter (Waldo?, Daniel?)
Read sets of oids from indices, implement an efficient in-memory
sort&merge over oids, and deserialize after the query. I've
specified a bunch of this so could provide a set of pointers to
start. Looking at some other object query languages and proposing
a syntax would be a good place to start
Will definitely like to pick up on this again. Been doing some more
reading and think should have some time to invest on this.
- Daniel
_______________________________________________
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