Ok, more tests.

If I change sql.py around line 790
#             self._execute = lambda *a, **b: self._cursor.execute(*a,
**b)
            self._execute = lambda *a: self._cursor.execute(a[:-1])

I get
Traceback (most recent call last):
  File "C:\web2py\trunk\gluon\restricted.py", line 98, in restricted
    exec ccode in environment
  File "C:/web2py/trunk/applications/test/models/db.py", line 7, in
<module>
    SQLField('name','string') )
  File "C:\web2py\trunk\gluon\sql.py", line 860, in define_table
    raise e
TypeError: The first argument to execute must be a string or unicode
query.

sql.log
timestamp: 2009-02-27T10:43:25.656000
CREATE TABLE person(
        id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY NOT NULL,
        name VARCHAR(32)
);

Note the ending ';'

Now I revert the change in sql.py around line 790
            self._execute = lambda *a, **b: self._cursor.execute(*a,
**b)
#             self._execute = lambda *a: self._cursor.execute(a[:-1])

and I add
        if self._db._dbname == 'db2': other=''
after
        other = ';'
around line 1115

then the creation runs fine as per the sql.log
timestamp: 2009-02-27T11:01:12.875000
CREATE TABLE person(
        id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY NOT NULL,
        name VARCHAR(32)
)
success!
timestamp: 2009-02-27T11:01:15.984000
CREATE TABLE dog(
        id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY NOT NULL,
        name VARCHAR(32),
        owner INT, FOREIGN KEY (owner) REFERENCES person(id) ON DELETE
CASCADE
)
success!

but inserting a new person fails:
Traceback (most recent call last):
  File "C:\web2py\trunk\gluon\restricted.py", line 98, in restricted
    exec ccode in environment
  File "C:/web2py/trunk/applications/test/controllers/appadmin.py",
line 271, in <module>
  File "C:\web2py\trunk\gluon\globals.py", line 75, in <lambda>
    self._caller = lambda f: f()
  File "C:/web2py/trunk/applications/test/controllers/appadmin.py",
line 103, in insert
    if form.accepts(request.vars, session):
  File "C:\web2py\trunk\gluon\sqlhtml.py", line 561, in accepts
    self.vars.id = self.table.insert(**fields)
  File "C:\web2py\trunk\gluon\sql.py", line 1304, in insert
    self._db._execute(query)
  File "C:\web2py\trunk\gluon\sql.py", line 789, in <lambda>
    self._execute = lambda *a, **b: self._cursor.execute(*a, **b)
ProgrammingError: ('42000', '[42000] [IBM][iSeries Access ODBC Driver]
[DB2 UDB]SQL0104 - Token ; was not valid. Valid tokens: <END-OF-
STATEMENT>. (-104) (SQLExecDirectW)')

the offending ';' again...

Denes.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web2py Web Framework" group.
To post to this group, send email to web2py@googlegroups.com
To unsubscribe from this group, send email to 
web2py+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to