From f1a331850d5f3383cd1ad2c765dd9e8ce3565b61 Mon Sep 17 00:00:00 2001 From: Jeremy Kersten Date: Fri, 1 Jul 2016 10:22:52 +0200 Subject: [PATCH] [FIX] website_sale: fix order for the pager in front end. In psql, use LIMIT and OFFSET together without a fully specified and uniq sort order will generate unexpected behaviour. Eg: > id id_dept name > ------------------- > 1 1 Tom > 2 1 Mike > 3 2 Meggie > 4 2 Marge > 5 3 Bart > 6 3 Lisa > using LIMITed selects like: > SELECT * FROM employee ORDER BY id_dept LIMIT 3 > SELECT * FROM employee ORDER BY id_dept LIMIT 3 OFFSET 3 > SELECT * FROM employee ORDER BY id_dept LIMIT 3 OFFSET 6 > You can have some result missings from the 3 requests, and others duplicated. > Because id_dept is not a uniq order. opw-686639 note: backport of saas-12 4dce8616 --- addons/website_sale/controllers/main.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py index 2dadc53573e..aeadf2a4f3c 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -145,7 +145,8 @@ class website_sale(http.Controller): def _get_search_order(self, post): # OrderBy will be parsed in orm and so no direct sql injection - return 'website_published desc,%s' % post.get('order', 'website_sequence desc') + # id is added to be sure that order is a unique sort key + return 'website_published desc,%s , id desc' % post.get('order', 'website_sequence desc') def _get_search_domain(self, search, category, attrib_values): domain = request.website.sale_product_domain()