[Zope] sqltest conditions

Hugh Emberson hugh@tig.com.au
16 Sep 1999 22:22:04 +1000


I just spent the day playing with my shiny new Zope installation and SQL
methods, and I have been wondering if there is any reason why you can't
specify a comparison operator in a sqltest directive.  What I really wanted
was something like:

   <!--#sqltest colname op=like type=string optional-->

which would produce SQL like:

  colname like 'value'

I know that I can use a construct like this:

  <!--#if colname-->
    colname like <!--#sqlvar colname-->
  <!--#/if-->

But it is quite clumsy.

If no one can come up with a reason then I might take a stab at adding an
optional attribute to sqltest, something like this:

  Option	SQL
  -------	-------
  op=eq		C = V		or C in (V) if V is a list
  op=like	C like V
  op=lt		C < V
  op=le		C <= V
  op=gt		C > V
  op=ge		C >= V
  op=ne		C <= V


where C is the column name and V is the value of the variable.  Does the order
of the comparisons make sense?  Should it be "C op V" or "V op C" ?

Obviously, only "op=eq" will work with lists, though I guess I could generate
something like:

  ( C like V[0] or C like V[1] or ... )

for "op=like" with a list though I'm not sure of the utility.

I had a quick look at the source, in sqltest.py, and I don't think it will be
hard to add this.  Can anyone come up with a reason why this doesn't make
sense?

Hugh