From 53a63775fe2b79cb60a477afa8f03413e1171040 Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Fri, 14 Feb 2020 18:38:26 +0100 Subject: [PATCH] Replace LEFT JOIN with INNER JOIN I see no reason why a LEFT might be needed and its the root cause of the awful performance. --- app/models/spree/order_decorator.rb | 6 ++++++ app/services/permissions/order.rb | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/models/spree/order_decorator.rb b/app/models/spree/order_decorator.rb index 28d487d6fd..688f1b3b16 100644 --- a/app/models/spree/order_decorator.rb +++ b/app/models/spree/order_decorator.rb @@ -75,6 +75,12 @@ Spree::Order.class_eval do joins('LEFT OUTER JOIN spree_products ON (spree_products.id = spree_variants.product_id)') } + scope :with_line_items_variants_and_products, lambda { + joins('INNER JOIN spree_line_items ON (spree_line_items.order_id = spree_orders.id)'). + joins('INNER JOIN spree_variants ON (spree_variants.id = spree_line_items.variant_id)'). + joins('INNER JOIN spree_products ON (spree_products.id = spree_variants.product_id)') + } + scope :not_state, lambda { |state| where("state != ?", state) } diff --git a/app/services/permissions/order.rb b/app/services/permissions/order.rb index 5e95ba92c8..cf44b1e0ae 100644 --- a/app/services/permissions/order.rb +++ b/app/services/permissions/order.rb @@ -10,7 +10,7 @@ module Permissions # Find orders that the user can see def visible_orders Spree::Order. - with_line_items_variants_and_products_outer. + with_line_items_variants_and_products. where(visible_orders_where_values) end