I am using an adjacency list to store file system paths.

--
class Path(sqlobject.SQLObject):
    parent = sqlobject.ForeignKey('SyncPath', cascade=True)
    path = sqlobject.StringCol(alternateID=True)
--

I would like to retrieve an object given it's path in one fell swoop.
Below is an example...


path: /home/btimby/somefile

sql:

select p2.*
from path as p0
left join path as p1
on p1.parent_id = p0.id
and p0.path = 'home'
left join path as p2
on p2.parent_id = p1.id
and p1.path = 'btimby'
and p2.path = 'somefile';

How could I accomplish this in SQLObject? I would have code similar to
the following, but not sure how to generate the aliases and multiple
levels of joins...

--
def get_path(path):
    path_parts = path.split(os.sep)
    sql = Path
    for part in path_parts:
        sql = Path.select(sqlbuilder.LEFTJOINOn(
            sql,
            Path,
            sqlbuilder.AND(
                Path.q.id == Path.q.parent,
                Path.q.path == part
            )
        ))
    print sql
--

The above is a bit naive, but hopefully the solution is possible.

Thanks.

------------------------------------------------------------------------------
Lotusphere 2011
Register now for Lotusphere 2011 and learn how
to connect the dots, take your collaborative environment
to the next level, and enter the era of Social Business.
http://p.sf.net/sfu/lotusphere-d2d
_______________________________________________
sqlobject-discuss mailing list
sqlobject-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss

Reply via email to