I'm a big fan of  EOF (Apple's relational to OO tool) and I've been
trying to figure out the easiest/best way to support queries that span
several links through a many-to-many cross-link table and am hoping for
some suggestions and pointers.

Here is the kind of query I would like to write (or something like it):

        // to find people whose great-grandfather's name is Fred

        select p1.* from person p1, person p2 where p2.name='Fred'  AND
related-to (p1.rowid, 'parent.parent.parent', p2.rowid);

Should I auto-generate the link part of the query to be something like

        select p1.* from person p1, person p2,
                link l1, link l2, link l3
        where
                p2.name = 'Fred'
        and
                        (p1.rowid = l1.src_rowid and l1.type = 'parent')
                and
                        (l1.dest_rowid = l2.src_rowid and l2.type = 'parent')   
        and
                        (l2.dest_rowid = l3.src_rowid and l3.type = 'parent')

Well, this is probably correct sql but hopefully you get the idea. So
part of the question is:

        1. How efficient is this?
        2. Is there an ordering that would make it much more efficient?
        3. Would it be better to write the custom function "related-to" to use
its own index?
        4. Can a custom function leverage the sqlite data structures is some
low level ways to gain efficiency?

I'm a pretty good coder and am willing to dive into the sqlite source
as required but not very adept at sql.

Thanks,
Jason



Reply via email to