Hi everybody.
I think I found an issue in the DB2 adapter. This is the scenario:
I have a field in a table with the following two attributes:
*db.table1.field.requires=IS_EMPTY_OR(IS_IN_DB(db, db.table2.id,
'%(description)s, null=None)*
*db.table1.field.widget = SQLFORM.widgets.autocomplete(*
* request, db.table2.description, id_field=db.table2.id,
limitby=(0,10), min_length=2)*
The "requires" attribute is supposed to be necessary because I accept null
values in this field, otherwise it would not allow me to leave the field
empty.
The problem is that, when using the autocomplete widget on a record with
null db.table1.field, the DB2 adapter attempts to issue a SELECT statement
like:
"SELECT LIBRARY.TABLE.description FROM LIBRARY.TABLE WHERE
(LIBRARY.TABLE.id = NULL)", which is syntactically wrong on DB2 (the right
syntax is "...WHERE ... *IS* NULL").
I tried to follow the code to see if I could fix the generation of the SQL
statement, but that goes beyond my ability and knowledge of web2py.
I found a workaround, though, that i suggest you to consider as a fix to
the Autocomplete widget inside sqlhtml.py:
around line 707, in case of a self-referencing field (like the one I am
working on), I changed this line:
record = self.db(
self.fields[1] == value).select(self.fields[0]).first()
to:
record = self.db(
self.fields[1] == value).select(self.fields[0]).first()* if
value != '' else None*
I suggest it as a fix because it's a time and resource waste to query the
database for a record with null id, beside my need to "workaround" the
mistaken behaviour of the DB2 sql adapter.
This is just my opinion. I'd like to know what you think about it.
Ciao
Maurizio
--
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
---
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.