← Back to team overview

c2c-oerpscenario team mailing list archive

[Bug 701013] [NEW] [v6rc2] orm/sql_db.py bug

 

Public bug reported:

Hello,

The "project" module has been modified since rc1, among other things,
the field "parent_id" is now a "project.project" and doing a XMLRPC read
on a project having this field set now leads to a server error, as
described below.

Steps to reproduce:
  * install v6rc2 with the project module
  * create two projects "foo" (id 1) and "bar" (id 2) having "foo" as parent
  * execute(1,"read") => succeeds
  * execute(2,"read","parent_id") => succeeds
  * execute(2,"read") => FAILS with the following error:
---
[2011-01-10 14:03:12,035][main] ERROR:db.cursor:Programming error: arguments of row IN must all be row expressions
LINE 1: ...d FROM "project_project" WHERE project_project.id IN ((1, E'...
                                                             ^
, in query SELECT project_project.analytic_account_id,project_project.id FROM "project_project" WHERE project_project.id IN %s ORDER BY sequence
[2011-01-10 14:03:12,036][main] ERROR:web-services:Uncaught exception
Traceback (most recent call last):
  File "/home/user/Documents/openerp-server-6.0.0-rc2/bin/osv/osv.py", line 122, in wrapper
    return f(self, dbname, *args, **kwargs)
  File "/home/user/Documents/openerp-server-6.0.0-rc2/bin/osv/osv.py", line 177, in execute
    res = self.execute_cr(cr, uid, obj, method, *args, **kw)
  File "/home/user/Documents/openerp-server-6.0.0-rc2/bin/osv/osv.py", line 167, in execute_cr
    return getattr(object, method)(cr, uid, *args, **kw)
  File "/home/user/Documents/openerp-server-6.0.0-rc2/bin/osv/orm.py", line 2920, in read
    result = self._read_flat(cr, user, select, fields, context, load,indent+"  ")
  File "/home/user/Documents/openerp-server-6.0.0-rc2/bin/osv/orm.py", line 3058, in _read_flat
    res2 = self._columns[f].get(cr, self, ids, f, user, context=context, values=res,indent=indent+"  ")
  File "/home/user/Documents/openerp-server-6.0.0-rc2/bin/osv/fields.py", line 362, in get
    records = dict(obj.name_get(cr, 1, list(set(filter(None, res.values()))), context=context,indent=indent))
  File "/home/user/Documents/openerp-server-6.0.0-rc2/bin/osv/orm.py", line 1766, in name_get
    [self._rec_name], context, load='_classic_write',indent=indent)]
  File "/home/user/Documents/openerp-server-6.0.0-rc2/bin/osv/orm.py", line 2920, in read
    result = self._read_flat(cr, user, select, fields, context, load,indent+"  ")
  File "/home/user/Documents/openerp-server-6.0.0-rc2/bin/osv/orm.py", line 2984, in _read_flat
    cr.execute(query, (tuple(sub_ids),))
  File "/home/user/Documents/openerp-server-6.0.0-rc2/bin/sql_db.py", line 76, in wrapper
    return f(self, *args, **kwargs)
  File "/home/user/Documents/openerp-server-6.0.0-rc2/bin/sql_db.py", line 129, in execute
    res = self._obj.execute(query, params)
ProgrammingError: arguments of row IN must all be row expressions
LINE 1: ...d FROM "project_project" WHERE project_project.id IN ((1, E'...
                                                             ^

[2011-01-10 14:03:12,039][main] DEBUG_RPC:exception:u'arguments of row IN must all be row expressions\nLINE 1: ...d FROM "project_project" WHERE project_project.id IN ((1, E\'...\n                                                             ^\n'
[2011-01-10 14:03:12,040][main] DEBUG_RPC:xmlrpc:"POST /object HTTP/1.0" 200 -
---

As it occurs in sql_db.py, it is not specific to the project module as
far as I understand the issue.

Adding some trace in orm.py:_flat_read() show the query to be:
SELECT project_project.analytic_account_id,project_project.id FROM "project_project" WHERE project_project.id IN %s ORDER BY sequence 
with args= ((1, u'foo'),), where a list of ints is expected.

Somehow there's no impact on the user interface (so far), I guess the
client doesn't use a full read() but read each field separately.

** Affects: openobject-server
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of C2C
OERPScenario, which is subscribed to the OpenERP Project Group.
https://bugs.launchpad.net/bugs/701013

Title:
  [v6rc2] orm/sql_db.py bug

Status in OpenObject Server:
  New

Bug description:
  Hello,

The "project" module has been modified since rc1, among other things, the field "parent_id" is now a "project.project" and doing a XMLRPC read on a project having this field set now leads to a server error, as described below.

Steps to reproduce:
  * install v6rc2 with the project module
  * create two projects "foo" (id 1) and "bar" (id 2) having "foo" as parent
  * execute(1,"read") => succeeds
  * execute(2,"read","parent_id") => succeeds
  * execute(2,"read") => FAILS with the following error:
---
[2011-01-10 14:03:12,035][main] ERROR:db.cursor:Programming error: arguments of row IN must all be row expressions
LINE 1: ...d FROM "project_project" WHERE project_project.id IN ((1, E'...
                                                             ^
, in query SELECT project_project.analytic_account_id,project_project.id FROM "project_project" WHERE project_project.id IN %s ORDER BY sequence
[2011-01-10 14:03:12,036][main] ERROR:web-services:Uncaught exception
Traceback (most recent call last):
  File "/home/user/Documents/openerp-server-6.0.0-rc2/bin/osv/osv.py", line 122, in wrapper
    return f(self, dbname, *args, **kwargs)
  File "/home/user/Documents/openerp-server-6.0.0-rc2/bin/osv/osv.py", line 177, in execute
    res = self.execute_cr(cr, uid, obj, method, *args, **kw)
  File "/home/user/Documents/openerp-server-6.0.0-rc2/bin/osv/osv.py", line 167, in execute_cr
    return getattr(object, method)(cr, uid, *args, **kw)
  File "/home/user/Documents/openerp-server-6.0.0-rc2/bin/osv/orm.py", line 2920, in read
    result = self._read_flat(cr, user, select, fields, context, load,indent+"  ")
  File "/home/user/Documents/openerp-server-6.0.0-rc2/bin/osv/orm.py", line 3058, in _read_flat
    res2 = self._columns[f].get(cr, self, ids, f, user, context=context, values=res,indent=indent+"  ")
  File "/home/user/Documents/openerp-server-6.0.0-rc2/bin/osv/fields.py", line 362, in get
    records = dict(obj.name_get(cr, 1, list(set(filter(None, res.values()))), context=context,indent=indent))
  File "/home/user/Documents/openerp-server-6.0.0-rc2/bin/osv/orm.py", line 1766, in name_get
    [self._rec_name], context, load='_classic_write',indent=indent)]
  File "/home/user/Documents/openerp-server-6.0.0-rc2/bin/osv/orm.py", line 2920, in read
    result = self._read_flat(cr, user, select, fields, context, load,indent+"  ")
  File "/home/user/Documents/openerp-server-6.0.0-rc2/bin/osv/orm.py", line 2984, in _read_flat
    cr.execute(query, (tuple(sub_ids),))
  File "/home/user/Documents/openerp-server-6.0.0-rc2/bin/sql_db.py", line 76, in wrapper
    return f(self, *args, **kwargs)
  File "/home/user/Documents/openerp-server-6.0.0-rc2/bin/sql_db.py", line 129, in execute
    res = self._obj.execute(query, params)
ProgrammingError: arguments of row IN must all be row expressions
LINE 1: ...d FROM "project_project" WHERE project_project.id IN ((1, E'...
                                                             ^

[2011-01-10 14:03:12,039][main] DEBUG_RPC:exception:u'arguments of row IN must all be row expressions\nLINE 1: ...d FROM "project_project" WHERE project_project.id IN ((1, E\'...\n                                                             ^\n'
[2011-01-10 14:03:12,040][main] DEBUG_RPC:xmlrpc:"POST /object HTTP/1.0" 200 -
---

As it occurs in sql_db.py, it is not specific to the project module as far as I understand the issue.

Adding some trace in orm.py:_flat_read() show the query to be:
SELECT project_project.analytic_account_id,project_project.id FROM "project_project" WHERE project_project.id IN %s ORDER BY sequence 
with args= ((1, u'foo'),), where a list of ints is expected.

Somehow there's no impact on the user interface (so far), I guess the client doesn't use a full read() but read each field separately.





Follow ups

References