[MERGE] Merged branch holding a proposal to solve the generate_order_by issue (see lp:1070757). As requested by Olivier Donny, this fix has been moved into generate_order_by. Deleted previous workaround done in this branch. Patch courtesy of Paulius Sladkevičius

bzr revid: tde@openerp.com-20121207155825-9bjvuxhyr0x937l7
This commit is contained in:
Thibault Delavallée 2012-12-07 16:58:25 +01:00
commit 61a2a82174
2 changed files with 12 additions and 11 deletions

View File

@ -58,7 +58,7 @@ class test_search(common.TransactionCase):
id_desc_active_desc = partners.search(cr, uid, [('name', 'like', 'test_search_order%'), '|', ('active', '=', True), ('active', '=', False)], order="id desc, active desc")
self.assertEqual([e, ab, b, a, d, c], id_desc_active_desc, "Search with 'ID DESC, ACTIVE DESC' order failed.")
def test_10_unherits_m2order(self):
def test_10_inherits_m2order(self):
registry, cr, uid = self.registry, self.cr, self.uid
users_obj = registry('res.users')
@ -95,6 +95,15 @@ class test_search(common.TransactionCase):
test_user_ids = filter(lambda x: x in expected_ids, user_ids)
self.assertEqual(test_user_ids, expected_ids, 'search on res_users did not provide expected ids or expected order')
# Do: order on many2one, but not by specifying in order parameter of search, but by overriding _order of res_users
old_order = users_obj._order
users_obj._order = 'country_id desc, name asc, login desc'
user_ids = users_obj.search(cr, search_user, [])
expected_ids = [search_user, c, b, a]
test_user_ids = filter(lambda x: x in expected_ids, user_ids)
self.assertEqual(test_user_ids, expected_ids, 'search on res_users did not provide expected ids or expected order')
users_obj._order = old_order
if __name__ == '__main__':
unittest2.main()

View File

@ -4745,16 +4745,8 @@ class BaseModel(object):
:raise" except_orm in case order_spec is malformed
"""
def _split_order(order, table):
""" from name, id asc make "table"."id", "table."."name" asc """
order_list = []
for elem in order.split(','):
subelems = elem.strip().split(' ')
if len(subelems) == 1:
subelems.append(' ')
order_list.append('"%s"."%s" %s' % (table, subelems[0], subelems[1]))
return order_list
order_by_clause = ','.join(_split_order(self._order, self._table))
order_by_clause = ''
order_spec = order_spec or self._order
if order_spec:
order_by_elements = []
self._check_qorder(order_spec)