From 2b2194afd1ceda549dadd18221d7b84df265ceae Mon Sep 17 00:00:00 2001 From: Guewen Baconnier Date: Wed, 27 May 2020 07:42:37 +0200 Subject: [PATCH] Revert "Optimize SQL queries when searching a rule" This reverts commit 768f186fd23e876c6daa7ccbd1423fbaf8b8cee0. Which is not more optimized, the optimization based on parent_path doesn't make sense here as the ORM will read parent_path in the location and get the parent ids by splitting the ids, it doesn't need more than one query on stock_location which is done based on its id and can reuse the cache, there is no lookup on parent path for parent_of. >>> env["stock.reserve.rule"].search([("location_id", "parent_of", 3125)]) 2020-05-27 05:36:59,938 1 DEBUG log_p odoo.sql_db: query: SELECT "stock_location"."id" as "id","stock_location"."name" as "name","stock_location"."complete_name" as "complete_name","stock_location"."active" as "active","stock_location"."usage" as "usage","stock_location"."location_id" as "location_id","stock_location"."comment" as "comment","stock_location"."parent_path" as "parent_path", ,"stock_location"."create_uid" as "create_uid","stock_location"."create_date" as "create_date","stock_location"."write_uid" as "write_uid","stock_location"."write_date" as "write_date" FROM "stock_location" WHERE "stock_location".id IN (3125) 2020-05-27 05:36:59,942 1 DEBUG log_p odoo.sql_db: query: SELECT "stock_reserve_rule".id FROM "stock_reserve_rule" WHERE (("stock_reserve_rule"."active" = true) AND ("stock_reserve_rule"."location_id" in (1,7,8,133,134,135,144,207,3125))) ORDER BY "stock_reserve_rule"."sequence" ,"stock_reserve_rule"."id" --- stock_reserve_rule/models/stock_reserve_rule.py | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/stock_reserve_rule/models/stock_reserve_rule.py b/stock_reserve_rule/models/stock_reserve_rule.py index 0959bca16..0015eb5ee 100644 --- a/stock_reserve_rule/models/stock_reserve_rule.py +++ b/stock_reserve_rule/models/stock_reserve_rule.py @@ -64,14 +64,7 @@ class StockReserveRule(models.Model): ) def _rules_for_location(self, location): - # We'll typically have a handful of rules, so reading all of them then - # checking if they are a parent location of the location is pretty - # fast. Searching all the parent locations then the rules matching them - # can be much slower if we have many locations. - rules = self.search([]).filtered( - lambda rule: rule.location_id.parent_path.startswith(location.parent_path) - ) - return rules + return self.search([("location_id", "parent_of", location.id)]) def _eval_rule_domain(self, move, domain): move_domain = [("id", "=", move.id)]