From 7080279bde83fefd121b877caca840184c07b978 Mon Sep 17 00:00:00 2001 From: Anael Closson Date: Thu, 20 Feb 2014 10:59:11 +0100 Subject: [PATCH 1/2] [FIX] incorrect handling of orderbys when generator for the groupby field generates more than one orderby clause item bzr revid: acl@openerp.com-20140220095911-zd5j1ssjw0cwzzz2 --- openerp/osv/orm.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index e37531ac93f..ee8c522189b 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -2605,19 +2605,20 @@ class BaseModel(object): :param query: the query object used to construct the query afterwards """ orderby_list = [] - ob = '' + ob = [] for order_splits in orderby.split(','): order_split = order_splits.split() orderby_field = order_split[0] orderby_dir = len(order_split) == 2 and order_split[1].upper() == 'ASC' and 'ASC' or 'DESC' if orderby_field == groupby: - ob = self._generate_order_by(order_splits, query).replace('ORDER BY ', '') - orderby_list.append(ob) + orderby_item = self._generate_order_by(order_splits, query).replace('ORDER BY ', '') + orderby_list.append(orderby_item) + ob += [obi.split()[0] for obi in orderby_item.split(',')] elif orderby_field in aggregated_fields: orderby_list.append('%s %s' % (orderby_field,orderby_dir)) if orderby_list: - return ' ORDER BY %s' % (','.join(orderby_list)), ob and ob.split()[0] or '' + return ' ORDER BY %s' % (','.join(orderby_list)), ob and ','.join(ob) or '' else: return '', '' From 5e593b34d0d0faa5b7f43cb3ca9c3d9047c06f99 Mon Sep 17 00:00:00 2001 From: Anael Closson Date: Thu, 20 Feb 2014 14:51:27 +0100 Subject: [PATCH 2/2] [FIX] orm: grouping of date and datetime conflicts ordering on dates with date and datetime - hotfix bzr revid: acl@openerp.com-20140220135127-1hh7s6dx6p2wuhz9 --- openerp/osv/orm.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index ee8c522189b..afbac492c43 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -2609,6 +2609,9 @@ class BaseModel(object): for order_splits in orderby.split(','): order_split = order_splits.split() orderby_field = order_split[0] + if isinstance(self._all_columns[orderby_field].column, openerp.osv.fields.date) or \ + isinstance(self._all_columns[orderby_field].column, openerp.osv.fields.datetime): + continue orderby_dir = len(order_split) == 2 and order_split[1].upper() == 'ASC' and 'ASC' or 'DESC' if orderby_field == groupby: orderby_item = self._generate_order_by(order_splits, query).replace('ORDER BY ', '') @@ -2715,7 +2718,7 @@ class BaseModel(object): offset_str = offset and ' offset %d' % offset or '' if len(groupby_list) < 2 and context.get('group_by_no_leaf'): group_count = '_' - cr.execute('SELECT min(%s.id) AS id, count(%s.id) AS %s_count' % (self._table, self._table, group_count) + (flist and ',') + flist + ' FROM ' + from_clause + where_clause + gb + (ob and ',') + ob + orderby_clause + limit_str + offset_str, where_clause_params) + cr.execute('SELECT min(%s.id) AS id, count(%s.id) AS %s_count' % (self._table, self._table, group_count) + (flist and ',') + flist + ' FROM ' + from_clause + where_clause + gb + (ob and ',') + ob + orderby_clause + limit_str + offset_str, where_clause_params) alldata = {} groupby = group_by