[Web-SIG] Trac-like Query Builder

Gustavo Narea me at gustavonarea.net
Tue Jun 30 17:43:08 CEST 2009


Hello,

Booleano and Geniusql seem to be two different things:
 * If you need to *parse* a text-based filter (aka "boolean expression"), use 
Booleano.
 * If you already have the data in a useful form (i.e., no need to parse 
anything), use Geniusql.

BTW, you can use a Booleano parse tree not only to create an SQL `WHERE` 
clause, but also to create a SQLAlchemy filter, for example -- you can turn 
these trees into anything you need (or at least that's the goal).

Cheers,

  - Gustavo.


Robert said:
>  Heck, if all you want is the back end, Geniusql (and therefore Dejavu) 
allows you to build comparison expressions and combine them with "+", "&", and 
"|":
>  >>> from geniusql import logic
>  >>> a = logic.comparison('Name', 6, ['Dave', 'Jerry', 'Sue'])
>  >>> a
>
>  logic.Expression(lambda x: x.Name in ['Dave', 'Jerry', 'Sue'])
>
>  >>> b = logic.comparison('Size', 2, 30)
>  >>> b
>
>  logic.Expression(lambda x: x.Size == 30)
>
>  >>> a + b
>
>  logic.Expression(lambda x: (x.Name in ['Dave', 'Jerry', 'Sue']) and
> (x.Size == 30))
>
>  >>> a & b
>
>  logic.Expression(lambda x: (x.Name in ['Dave', 'Jerry', 'Sue']) and
> (x.Size == 30))
>
>  >>> a | b
>
>  logic.Expression(lambda x: (x.Name in ['Dave', 'Jerry', 'Sue']) or (x.Size
> == 30))
>
>  >>> c = logic.Expression(lambda g, h: g.Name == h.Name)
>  >>> c
>
>  logic.Expression(lambda g, h: g.Name == h.Name)
>
>  >>> a + c
>
>  logic.Expression(lambda x, h: (x.Name in ['Dave', 'Jerry', 'Sue']) and
> (x.Name == h.Name))
>
>  You then pass those to the storage layer where they are automatically
> converted to backend-specific SQL etc. Been runnin' like a champ for years,
> not days. [1]
>
>
>  Robert Brewer
>  fumanchu at aminus.org
>
>  [1]  OK, I did have to commit a patch just now for comparison() in
> py2.5+--but it's a short one ;)
> http://www.aminus.net/geniusql/changeset/280
-- 
Gustavo Narea <xri://=Gustavo>.
| Tech blog: =Gustavo/(+blog)/tech  ~  About me: =Gustavo/about |


More information about the Web-SIG mailing list