I'd like to build a Z SQL method for *many* people to use to list courses that we offer. I don't want to require that all queries using it understand all of the columns, but I do want to be able to modify the query in many ways. So...after reading http://yyy.zope.org/Documentation/Guides/ZSQL-HTML/ZSQL.1.5.3.html optional A flag indicating if the test is optional. If the test is optional and no value is provided for a variable, or the value provided is an invalid empty string, then no text is inserted. I thought I could just use "optional" with all of my sqltests. select * from course_catalog <dtml-sqlgroup where> <dtml-sqltest subject type=nb optional> <dtml-and> <dtml-sqltest course_nbr type=nb optional> <dtml-and> <dtml-sqltest version type=nb optional> <dtml-and> <dtml-sqltest campus_code type=nb optional> </dtml-sqlgroup> This works only if I provide at least an empty string for all values. If I don't provide a value at all for one of the arguments, I get Error, Bad Request: ['version'] SQL used: Could not render the query template! Traceback (innermost last): File /data/www/Zope/Zope-2.2.0a1-src/lib/python/ZPublisher/Publish.py, line 224, in publish_module File /data/www/Zope/Zope-2.2.0a1-src/lib/python/ZPublisher/Publish.py, line 189, in publish File /data/www/Zope/Zope-2.2.0a1-src/lib/python/Zope/__init__.py, line 221, in zpublisher_exception_hook (Object: list_courses) File /data/www/Zope/Zope-2.2.0a1-src/lib/python/ZPublisher/Publish.py, line 175, in publish File /data/www/Zope/Zope-2.2.0a1-src/lib/python/ZPublisher/mapply.py, line 160, in mapply (Object: manage_test) File /data/www/Zope/Zope-2.2.0a1-src/lib/python/ZPublisher/Publish.py, line 112, in call_object (Object: manage_test) File /data/www/Zope/Zope-2.2.0a1-src/lib/python/Shared/DC/ZRDB/DA.py, line 347, in manage_test (Object: list_courses) File /data/www/Zope/Zope-2.2.0a1-src/lib/python/Shared/DC/ZRDB/DA.py, line 324, in manage_test (Object: list_courses) File /data/www/Zope/Zope-2.2.0a1-src/lib/python/Shared/DC/ZRDB/DA.py, line 426, in __call__ (Object: list_courses) File /data/www/Zope/Zope-2.2.0a1-src/lib/python/Shared/DC/ZRDB/Aqueduct.py, line 150, in _argdata (Object: list_courses) Bad Request: (see above) Looking at Aqueduct.py, I don't understand why it's not catching the "optional" arg. Using my limited Python knowledge, I commented out lines 149 and 150 of Aqueduct.py and now it works great. Once again, I'm glad that I can add these awful kludges instead of waiting for the vendor, but this is something that I hope is fixed soon. --kyler
On Fri, May 26, 2000 at 02:59:38PM -0500, Kyler B. Laird wrote:
I'd like to build a Z SQL method for *many* people to use to list courses that we offer. I don't want to require that all queries using it understand all of the columns, but I do want to be able to modify the query in many ways.
So...after reading http://yyy.zope.org/Documentation/Guides/ZSQL-HTML/ZSQL.1.5.3.html optional
A flag indicating if the test is optional. If the test is optional and no value is provided for a variable, or the value provided is an invalid empty string, then no text is inserted. I thought I could just use "optional" with all of my sqltests. select * from course_catalog
<dtml-sqlgroup where> <dtml-sqltest subject type=nb optional> <dtml-and> <dtml-sqltest course_nbr type=nb optional> <dtml-and> <dtml-sqltest version type=nb optional> <dtml-and> <dtml-sqltest campus_code type=nb optional> </dtml-sqlgroup>
I have never used that corner of ZSQL methods. I have a guesses. I think that the method is working fine, but the nature of HTTP posting is giving you trouble. Remember, a REQUEST typically only contains non-null fields. There are three suggestions on fixing this. 1) preseed the calling form by putting in a <dtml-call "REQUEST.set('subject', '')> BEFORE the form. This way, normal acquisition will get you an empty string even if there is no value entered in the form. 2) A bit more of a pain, but certainly doable. Remember that you can use ordinary <dtml-if> logic in a ZSQL method. You can use choose among multiple cases in a single method. But, here you have 16 cases, which is unpleasant. Is it really true that ALL of these can be simultaneosly empty? 3) Considerable more pain, with some loss of safety. Construct the body of your method on the fly. Pass it in as an argument, and call that. For certain forms, this is necessary (if for example the user can modify the form generation process).
On Fri, 26 May 2000, Kyler B. Laird wrote:
<dtml-sqltest subject type=nb optional> <dtml-and> <dtml-sqltest course_nbr type=nb optional> <dtml-and> <dtml-sqltest version type=nb optional> <dtml-and> <dtml-sqltest campus_code type=nb optional> </dtml-sqlgroup>
This works only if I provide at least an empty string for all values. If I don't provide a value at all for one of the arguments, I get
In your 'Options' box for your ZSQL method, you can specify a default value for arguments if they were not passed: subject:string = '' course_nbr: string = '' Don't know if/where it is documented. -- Stuart Bishop Work: zen@cs.rmit.edu.au Senior Systems Alchemist Play: zen@shangri-la.dropbear.id.au Computer Science, RMIT University
On Sat, 27 May 2000 13:07:50 +1000 (EST) you wrote:
In your 'Options' box for your ZSQL method, you can specify a default value for arguments if they were not passed:
subject:string = '' course_nbr: string = ''
Don't know if/where it is documented.
I hope it's not documented anywhere; it doesn't work either. It *does* allow the method to run without setting the arguments, but it generates SQL like "where subject=''''''". Someone had a good vision when writing the documentation for the sqltest optional flag. I just want it to work. --kyler
On Sat, 27 May 2000, Kyler B. Laird wrote:
I hope it's not documented anywhere; it doesn't work either.
It *does* allow the method to run without setting the arguments, but it generates SQL like "where subject=''''''".
Someone had a good vision when writing the documentation for the sqltest optional flag. I just want it to work.
Oops.... the default argument looks like it needs to be in double quotes. So what I said before, but subject:string="" -- Stuart Bishop Work: zen@cs.rmit.edu.au Senior Systems Alchemist Play: zen@shangri-la.dropbear.id.au Computer Science, RMIT University
participants (3)
-
jpennyï¼ universal-fasteners.com -
Kyler B. Laird -
Stuart 'Zen' Bishop