From e1748d23857fca68e216b8583e0f11a329a7a6f0 Mon Sep 17 00:00:00 2001 From: Matthieu Foucault Date: Mon, 20 Jul 2020 10:31:16 -0700 Subject: [PATCH] fix: search_products function returns the correct values for add options --- .../search_functions/search_products.sql | 4 +- .../search_products@v1.0.0-rc.12.sql | 62 +++++++++++++++++++ .../search_functions/search_products.sql | 59 +++++++++++++++++- .../search_products@v1.0.0-rc.12.sql | 7 +++ schema/sqitch.plan | 1 + .../search_products@v1.0.0-rc.12.sql | 7 +++ 6 files changed, 136 insertions(+), 4 deletions(-) create mode 100644 schema/deploy/search_functions/search_products@v1.0.0-rc.12.sql create mode 100644 schema/revert/search_functions/search_products@v1.0.0-rc.12.sql create mode 100644 schema/verify/search_functions/search_products@v1.0.0-rc.12.sql diff --git a/schema/deploy/search_functions/search_products.sql b/schema/deploy/search_functions/search_products.sql index 0c11a7e48a..59d803dd36 100644 --- a/schema/deploy/search_functions/search_products.sql +++ b/schema/deploy/search_functions/search_products.sql @@ -39,14 +39,14 @@ returns setof ggircs_portal.product as then return query execute search_query_input_query || 'select id, product_name, units, - product_state, requires_emission_allocation, is_ciip_product, requires_product_amount, subtract_exported_electricity_emissions, subtract_exported_electricity_emissions, subtract_exported_heat_emissions, subtract_exported_heat_emissions, + product_state, requires_emission_allocation, is_ciip_product, requires_product_amount, add_purchased_electricity_emissions, subtract_exported_electricity_emissions, add_purchased_heat_emissions, subtract_exported_heat_emissions, subtract_generated_electricity_emissions, subtract_generated_heat_emissions, add_emissions_from_eios, is_read_only, is_energy_product, created_at, created_by, updated_at, updated_by, deleted_at, deleted_by from innerTable order by ' || order_by_field || ' ' || direction; else return query execute search_query_input_query || 'select id, product_name, units, product_state, - requires_emission_allocation, is_ciip_product, requires_product_amount, subtract_exported_electricity_emissions, subtract_exported_electricity_emissions, subtract_exported_heat_emissions, subtract_exported_heat_emissions, + requires_emission_allocation, is_ciip_product, requires_product_amount, add_purchased_electricity_emissions, subtract_exported_electricity_emissions, add_purchased_heat_emissions, subtract_exported_heat_emissions, subtract_generated_electricity_emissions, subtract_generated_heat_emissions, add_emissions_from_eios, is_read_only, is_energy_product, created_at, created_by, updated_at, updated_by, deleted_at, deleted_by from innerTable where diff --git a/schema/deploy/search_functions/search_products@v1.0.0-rc.12.sql b/schema/deploy/search_functions/search_products@v1.0.0-rc.12.sql new file mode 100644 index 0000000000..0c11a7e48a --- /dev/null +++ b/schema/deploy/search_functions/search_products@v1.0.0-rc.12.sql @@ -0,0 +1,62 @@ +-- Deploy ggircs-portal:function_search_products to pg +-- requires: table_product + +begin; + +create or replace function ggircs_portal.search_products( + search_field text, + search_value text, + order_by_field text default 'id', + direction text default 'asc' +) + +returns setof ggircs_portal.product as + $function$ + declare + search_query_input_query text; + begin + + search_query_input_query :='with outerTable as + ( + select + p.*, + benchmark, + eligibility_threshold, + incentive_multiplier, + start_reporting_year, + end_reporting_year, + b.created_at as benchmark_created_at + from ggircs_portal.product as p + left join ggircs_portal.benchmark as b + on p.id = b.product_id + ), + innerTable as + ( + select distinct on (id) * from outerTable order by id, benchmark_created_at desc + )'; + + if search_field is null or search_value is null + then return query execute search_query_input_query || + 'select + id, product_name, units, + product_state, requires_emission_allocation, is_ciip_product, requires_product_amount, subtract_exported_electricity_emissions, subtract_exported_electricity_emissions, subtract_exported_heat_emissions, subtract_exported_heat_emissions, + subtract_generated_electricity_emissions, subtract_generated_heat_emissions, add_emissions_from_eios, is_read_only, is_energy_product, created_at, created_by, updated_at, updated_by, deleted_at, deleted_by + from innerTable order by ' || order_by_field || ' ' || direction; + else + return query execute search_query_input_query || + 'select + id, product_name, units, product_state, + requires_emission_allocation, is_ciip_product, requires_product_amount, subtract_exported_electricity_emissions, subtract_exported_electricity_emissions, subtract_exported_heat_emissions, subtract_exported_heat_emissions, + subtract_generated_electricity_emissions, subtract_generated_heat_emissions, add_emissions_from_eios, is_read_only, is_energy_product, created_at, created_by, updated_at, updated_by, deleted_at, deleted_by + from innerTable + where + '|| search_field || '::text ilike ''%' || search_value || '%'' + order by '|| order_by_field || ' ' || direction; + + end if; + end + $function$ language plpgsql stable; + + grant execute on function ggircs_portal.search_products to ciip_administrator, ciip_analyst, ciip_industry_user; + +commit; diff --git a/schema/revert/search_functions/search_products.sql b/schema/revert/search_functions/search_products.sql index 3d57965f31..0c11a7e48a 100644 --- a/schema/revert/search_functions/search_products.sql +++ b/schema/revert/search_functions/search_products.sql @@ -1,7 +1,62 @@ --- Revert ggircs-portal:function_search_products from pg +-- Deploy ggircs-portal:function_search_products to pg +-- requires: table_product begin; -drop function ggircs_portal.search_products; +create or replace function ggircs_portal.search_products( + search_field text, + search_value text, + order_by_field text default 'id', + direction text default 'asc' +) + +returns setof ggircs_portal.product as + $function$ + declare + search_query_input_query text; + begin + + search_query_input_query :='with outerTable as + ( + select + p.*, + benchmark, + eligibility_threshold, + incentive_multiplier, + start_reporting_year, + end_reporting_year, + b.created_at as benchmark_created_at + from ggircs_portal.product as p + left join ggircs_portal.benchmark as b + on p.id = b.product_id + ), + innerTable as + ( + select distinct on (id) * from outerTable order by id, benchmark_created_at desc + )'; + + if search_field is null or search_value is null + then return query execute search_query_input_query || + 'select + id, product_name, units, + product_state, requires_emission_allocation, is_ciip_product, requires_product_amount, subtract_exported_electricity_emissions, subtract_exported_electricity_emissions, subtract_exported_heat_emissions, subtract_exported_heat_emissions, + subtract_generated_electricity_emissions, subtract_generated_heat_emissions, add_emissions_from_eios, is_read_only, is_energy_product, created_at, created_by, updated_at, updated_by, deleted_at, deleted_by + from innerTable order by ' || order_by_field || ' ' || direction; + else + return query execute search_query_input_query || + 'select + id, product_name, units, product_state, + requires_emission_allocation, is_ciip_product, requires_product_amount, subtract_exported_electricity_emissions, subtract_exported_electricity_emissions, subtract_exported_heat_emissions, subtract_exported_heat_emissions, + subtract_generated_electricity_emissions, subtract_generated_heat_emissions, add_emissions_from_eios, is_read_only, is_energy_product, created_at, created_by, updated_at, updated_by, deleted_at, deleted_by + from innerTable + where + '|| search_field || '::text ilike ''%' || search_value || '%'' + order by '|| order_by_field || ' ' || direction; + + end if; + end + $function$ language plpgsql stable; + + grant execute on function ggircs_portal.search_products to ciip_administrator, ciip_analyst, ciip_industry_user; commit; diff --git a/schema/revert/search_functions/search_products@v1.0.0-rc.12.sql b/schema/revert/search_functions/search_products@v1.0.0-rc.12.sql new file mode 100644 index 0000000000..3d57965f31 --- /dev/null +++ b/schema/revert/search_functions/search_products@v1.0.0-rc.12.sql @@ -0,0 +1,7 @@ +-- Revert ggircs-portal:function_search_products from pg + +begin; + +drop function ggircs_portal.search_products; + +commit; diff --git a/schema/sqitch.plan b/schema/sqitch.plan index cd0e14dbca..f73c5ba98c 100644 --- a/schema/sqitch.plan +++ b/schema/sqitch.plan @@ -157,3 +157,4 @@ computed_columns/application_revision_ciip_incentive [computed_columns/applicati @v1.0.0 2020-07-16T00:27:28Z Matthieu Foucault # release v1.0.0 @v1.0.1 2020-07-16T01:12:49Z Matthieu Foucault # release v1.0.1 @v1.0.2 2020-07-16T19:48:33Z Matthieu Foucault # release v1.0.2 +search_functions/search_products [search_functions/search_products@v1.0.0-rc.12] 2020-07-20T17:26:50Z Matthieu Foucault # fix wrong fields being returned by search_product function diff --git a/schema/verify/search_functions/search_products@v1.0.0-rc.12.sql b/schema/verify/search_functions/search_products@v1.0.0-rc.12.sql new file mode 100644 index 0000000000..e27e686e7d --- /dev/null +++ b/schema/verify/search_functions/search_products@v1.0.0-rc.12.sql @@ -0,0 +1,7 @@ +-- Verify ggircs-portal:function_search_products on pg + +begin; + +select pg_get_functiondef('ggircs_portal.search_products(text,text,text,text)'::regprocedure); + +rollback;