[orm-devel] Re: Postgres & Views

Diedrich Vorberg orm-devel@mailman.tux4web.de
Sat, 23 Nov 2002 12:32:13 +0100


Julio,

>p=ds.select(person, name=like("john"), birth=between(d1,d2))
ah! Excellent idea!

I won't get arround to implement it myself this week or so, because 
of my commissioned and academic work. But you can give it a try. Check 
out the datasource.select() method in line 398. There's a for loop 
that iterates over the method's keyword parameters. Here you'd have 
to check

  if isinstance(value, selector):
    v.append(value.sql_code(columnName))

As you see I suggest an sql_code() method for your selector class 
that assembles correct sql with the information supplied in its 
constructor and the columnName supplied in the keyword arguments dict.

We might want to introduce a selectors module and adapter.*.selectors 
in case different backends introduce different syntax (like for regex 
etc). You might have to figure that one out...

If you feel like giving it a try I'd create an account for you on
c200.tux4web.de and give you CVS write permession.

If not you'll have to wait until I've the time and energy to look 
into it myself. Until then you might want to take a look at the 
datasource.rselect() method, which lets you do a query as

   SELECT <all the cols we need> FROM <dbclass' table> <rest>

for any dbclass and will assemble the usual queryResult. Also you can
use selectByClauses() method which lets you supply only a specific 
clause.

Diedrich

-- 
           _..._                            Diedrich Vorberg
         .'     '.
        /  _   _  \                         http://www.tux4web.de
        | (o)_(o) |                         info@tux4web.de
         \(     ) /            .---.
         //'._.'\ \           /     \       Internet Dienstleistungen
        //   .   \ \          \.@-@./       und 'Consulting'.
       ||   .     \ \         /`\_/`\
       |\   :     / |        //  _  \\      Linux Rules!
       \ `) '   (`  /_      | \     )|_
     _)``".____,.'"` (_    /`\_`>  <_/ \
     )     )'--'(     (    \__/'---'\__/
      '---`      `---`