From 199d48123ba730af96b5cceda9ff585b6b952090 Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Mon, 22 Mar 2021 18:59:48 +0100 Subject: [PATCH] Fully qualify table columns in query object This fixes the error UK's is experiencing: ``` PG::AmbiguousColumn: ERROR: column reference "state" is ambiguous LINE 1: SELECT DISTINCT spree_orders.*, CASE WHEN state IN ('cancele... ^ : SELECT DISTINCT spree_orders.*, CASE WHEN state IN ('canceled', 'returned') THEN payment_total WHEN state IS NOT NULL THEN payment_total - total ELSE 0 END AS balance_value, spree_orders.* FROM "spree_orders" INNER JOIN "spree_shipments" ``` See https://app.bugsnag.com/yaycode/openfoodnetwork-uk/errors/6058c45989d37300079e8312?event_id=6058ccd30075af73bcb20000&i=sk&m=nw. --- app/queries/outstanding_balance.rb | 4 ++-- spec/queries/outstanding_balance_spec.rb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/queries/outstanding_balance.rb b/app/queries/outstanding_balance.rb index 48ee451009..5f4b5b921f 100644 --- a/app/queries/outstanding_balance.rb +++ b/app/queries/outstanding_balance.rb @@ -30,8 +30,8 @@ class OutstandingBalance # a little longer. See https://github.com/rails/arel/pull/400 for details. def statement <<-SQL.strip_heredoc - CASE WHEN state IN #{non_fulfilled_states_group.to_sql} THEN payment_total - WHEN state IS NOT NULL THEN payment_total - total + CASE WHEN "spree_orders"."state" IN #{non_fulfilled_states_group.to_sql} THEN "spree_orders"."payment_total" + WHEN "spree_orders"."state" IS NOT NULL THEN "spree_orders"."payment_total" - "spree_orders"."total" ELSE 0 END SQL end diff --git a/spec/queries/outstanding_balance_spec.rb b/spec/queries/outstanding_balance_spec.rb index bd21b9da9e..2586d4eede 100644 --- a/spec/queries/outstanding_balance_spec.rb +++ b/spec/queries/outstanding_balance_spec.rb @@ -12,8 +12,8 @@ describe OutstandingBalance do normalized_sql_statement = normalize(outstanding_balance.statement) expect(normalized_sql_statement).to eq(normalize(<<-SQL)) - CASE WHEN state IN ('canceled', 'returned') THEN payment_total - WHEN state IS NOT NULL THEN payment_total - total + CASE WHEN "spree_orders"."state" IN ('canceled', 'returned') THEN "spree_orders"."payment_total" + WHEN "spree_orders"."state" IS NOT NULL THEN "spree_orders"."payment_total" - "spree_orders"."total" ELSE 0 END SQL end