diff --git a/odoo/addons/base/tests/test_expression.py b/odoo/addons/base/tests/test_expression.py index 973574655ec..4e0e5fc0be9 100644 --- a/odoo/addons/base/tests/test_expression.py +++ b/odoo/addons/base/tests/test_expression.py @@ -1032,12 +1032,6 @@ class TestQueries(TransactionCase): with self.assertQueries([''' SELECT COUNT(1) FROM "res_partner_title" - LEFT JOIN "ir_translation" AS "res_partner_title__name" ON - ("res_partner_title"."id" = "res_partner_title__name"."res_id" - AND "res_partner_title__name"."type" = 'model' - AND "res_partner_title__name"."name" = %s - AND "res_partner_title__name"."lang" = %s - AND "res_partner_title__name"."value" != %s) WHERE ("res_partner_title"."id" = %s) ''']): Model.search_count([('id', '=', 1)]) diff --git a/odoo/models.py b/odoo/models.py index 43ac7929843..bbdb91b0369 100644 --- a/odoo/models.py +++ b/odoo/models.py @@ -4376,19 +4376,20 @@ Record ids: %(records)s query = self._where_calc(args) self._apply_ir_rules(query, 'read') - order_by = self._generate_order_by(order, query) - from_clause, where_clause, where_clause_params = query.get_sql() - - where_str = where_clause and (" WHERE %s" % where_clause) or '' if count: # Ignore order, limit and offset when just counting, they don't make sense and could # hurt performance + from_clause, where_clause, where_clause_params = query.get_sql() + where_str = where_clause and (" WHERE %s" % where_clause) or '' query_str = 'SELECT count(1) FROM ' + from_clause + where_str self._cr.execute(query_str, where_clause_params) res = self._cr.fetchone() return res[0] + order_by = self._generate_order_by(order, query) + from_clause, where_clause, where_clause_params = query.get_sql() + where_str = where_clause and (" WHERE %s" % where_clause) or '' limit_str = limit and ' limit %d' % limit or '' offset_str = offset and ' offset %d' % offset or '' query_str = 'SELECT "%s".id FROM ' % self._table + from_clause + where_str + order_by + limit_str + offset_str