[Zope] Re: [Zope-dev] Zope Book call for assistance

Matthew T. Kromer matt@zope.com
Mon, 09 Dec 2002 13:54:19 -0500


Jeffrey P Shell wrote:

> But SQL Method DTML is very very very very nice.  It has a lot of type 
> enforcement/safety measures (ie - autoquoting SQL Strings, ensuring 
> that a 'sqlvar type=float' operation is inserting a float); a lot of 
> *very* nice features for generating 'where' clauses (the sqltest 
> 'optional' flag and the smart '<dtml-and> and <dtml-or>' tags that 
> won't render if an optional 'sqltest' preceding them was not 
> rendered); the 'sqltest multiple' feature is especially nice:
>
> <dtml-sqlgroup where>
> <dtml-sqltest foo type=nb multiple optional>
> </dtml-sqlgroup>
>
> If foo is a blank string or empty list, that will render nothing.
>
> If foo is a single string, that renders::
>
> where foo = 'bar'
>
> But if foo is a list of strings, that will render::
>
> where foo in ('bar', 'baz')
>
> Doing that programatically in Python is counterintuitive and awkward 
> (just as it was before the specialized 'dtml-sql___' tags in DTML).  
> For simple queries, doing it in the host programming language is not 
> bad.  But for complex queries, it's very awkward to generate SQL.  
> It's almost as bad as generating HTML inside of a programming language 
> - it becomes difficult to maintain.
>

Yes, I think SQL methods are going to stick around.  The downside is 
there are some things that they SHOULD do that they dont, and that DTML 
doesnt (to my knowledge) facilitate.

For example, <dtml-sqltest foo type=nb> ought to be able to check with 
the underlying DA, and ask that DA to help it format its parameters. 
 Currently the render() method used by DTML seems to be presumed to be a 
 string, but what you want back is

    ("foo=:foo", ('foo',foo))  # or whatever  all this foo foo sounds 
like a poodle

so that any bind variables can be handled more efficiently by the DA. 
 Since each DA handles bind variables differently, it has to be involved 
in the process to return a string with substitution text, and the value 
to be substituted later.   The DA's query method currently takes only a 
string, but it should take a string and a concatenation of bind variables.

I remember looking at it and not wanting to get into trying to track 
down where DTML would have to change to allow nonlinear results.

There may well be something in DTML processing that would make this 
simple, I'm not very well versed on DTML processing internals.


-- 
Matt Kromer
Zope Corporation  http://www.zope.com/