← Back to team overview

c2c-oerpscenario team mailing list archive

[Bug 701013] Re: [v6rc2] orm read() bug on redefined fields

 

** Branch linked: lp:openobject-server

-- 
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 read() fails when no fields-list passed, on objects that
  override parent columns

Status in OpenObject Server:
  Fix Released

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.





References