diff --git a/openerp/addons/base/ir/ir_model.py b/openerp/addons/base/ir/ir_model.py index d119c0344b4..634152f6e01 100644 --- a/openerp/addons/base/ir/ir_model.py +++ b/openerp/addons/base/ir/ir_model.py @@ -1117,6 +1117,10 @@ class ir_model_data(osv.osv): # Don't remove the LOG_ACCESS_COLUMNS unless _log_access # has been turned off on the model. field = self.pool[model].browse(cr, uid, [res_id], context=context)[0] + if not field.exists(): + _logger.info('Deleting orphan external_ids %s', external_ids) + self.unlink(cr, uid, external_ids) + continue if field.name in openerp.osv.orm.LOG_ACCESS_COLUMNS and self.pool[field.model]._log_access: continue if field.name == 'id': diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index 9fee28359f0..268ba041bda 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -2195,19 +2195,24 @@ 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] + fields = openerp.osv.fields + if isinstance(self._all_columns[orderby_field].column, (fields.date, fields.datetime)): + continue 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 ', '') + if orderby_item: + 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 '', '' @@ -2337,7 +2342,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 diff --git a/openerp/service/db.py b/openerp/service/db.py index ed890a477ea..adbd058755d 100644 --- a/openerp/service/db.py +++ b/openerp/service/db.py @@ -311,7 +311,7 @@ def exp_list(document=False): cr.execute("select datname from pg_database where datdba=(select usesysid from pg_user where usename=%s) and datname not in %s order by datname", (db_user, templates_list)) else: cr.execute("select datname from pg_database where datname not in %s order by datname", (templates_list,)) - res = [tools.ustr(name) for (name,) in cr.fetchall()] + res = [openerp.tools.ustr(name) for (name,) in cr.fetchall()] except Exception: res = [] res.sort()