From ceaede403a9ffdf4b7f82e80110bbce8c455b74a Mon Sep 17 00:00:00 2001 From: Brent Moran Date: Tue, 13 Aug 2024 14:12:29 +0800 Subject: [PATCH 1/2] modify record deleter function to be forgiving about types --- db/sql/00_msar.sql | 11 ++++------- db/sql/test_00_msar.sql | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/db/sql/00_msar.sql b/db/sql/00_msar.sql index eb94c36ab4..2fda5dba09 100644 --- a/db/sql/00_msar.sql +++ b/db/sql/00_msar.sql @@ -3327,6 +3327,7 @@ INSERT INTO msar.expr_templates VALUES -- json(b) filters and expressions ('json_array_length', 'jsonb_array_length((%s)::jsonb)'), ('json_array_contains', '(%s)::jsonb @> (%s)::jsonb'), + ('element_in_json_array_untyped', '(%s)::text IN (SELECT jsonb_array_elements_text(%s))'), ('convert_to_json', 'to_jsonb(%s)'), -- date part extractors ('truncate_to_year', 'to_char((%s)::date, ''YYYY AD'')'), @@ -3790,13 +3791,9 @@ BEGIN msar.get_relation_name(tab_id), msar.build_where_clause( tab_id, jsonb_build_object( - 'type', 'json_array_contains', 'args', jsonb_build_array( - jsonb_build_object('type', 'literal', 'value', rec_ids), - jsonb_build_object( - 'type', 'convert_to_json', 'args', jsonb_build_array( - jsonb_build_object('type', 'attnum', 'value', msar.get_pk_column(tab_id)) - ) - ) + 'type', 'element_in_json_array_untyped', 'args', jsonb_build_array( + jsonb_build_object('type', 'attnum', 'value', msar.get_pk_column(tab_id)), + jsonb_build_object('type', 'literal', 'value', rec_ids) ) ) ) diff --git a/db/sql/test_00_msar.sql b/db/sql/test_00_msar.sql index cf6b255d3b..9c0030deaa 100644 --- a/db/sql/test_00_msar.sql +++ b/db/sql/test_00_msar.sql @@ -3900,6 +3900,26 @@ END; $$ LANGUAGE plpgsql; +CREATE OR REPLACE FUNCTION test_delete_records_from_table_stringy_pkey() RETURNS SETOF TEXT AS $$ +DECLARE + rel_id oid; + delete_result integer; +BEGIN + PERFORM __setup_list_records_table(); + rel_id := 'atable'::regclass::oid; + delete_result := msar.delete_records_from_table( + rel_id, + '["1", "2"]' + ); + RETURN NEXT is(delete_result, 2); + RETURN NEXT results_eq( + 'SELECT id FROM atable ORDER BY id', + $v$VALUES ('3'::integer)$v$ + ); +END; +$$ LANGUAGE plpgsql; + + CREATE OR REPLACE FUNCTION __setup_add_record_table() RETURNS SETOF TEXT AS $$ BEGIN PERFORM __setup_list_records_table(); From c078a44fe5b9c7b2e3791a8d1922a163b7981cd8 Mon Sep 17 00:00:00 2001 From: Brent Moran Date: Tue, 13 Aug 2024 15:08:07 +0800 Subject: [PATCH 2/2] add mathesar formatting so pkeys can be submitted as expected --- db/sql/00_msar.sql | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/db/sql/00_msar.sql b/db/sql/00_msar.sql index 2fda5dba09..e95ae348d7 100644 --- a/db/sql/00_msar.sql +++ b/db/sql/00_msar.sql @@ -3337,7 +3337,9 @@ INSERT INTO msar.expr_templates VALUES ('uri_scheme', 'mathesar_types.uri_scheme(%s)'), ('uri_authority', 'mathesar_types.uri_authority(%s)'), -- Email part getters - ('email_domain', 'mathesar_types.email_domain_name(%s)') + ('email_domain', 'mathesar_types.email_domain_name(%s)'), + -- Data formatter which is sometimes useful in comparison + ('format_data', 'msar.format_data(%s)') ; CREATE OR REPLACE FUNCTION msar.build_expr(rel_id oid, tree jsonb) RETURNS text AS $$ @@ -3792,7 +3794,11 @@ BEGIN msar.build_where_clause( tab_id, jsonb_build_object( 'type', 'element_in_json_array_untyped', 'args', jsonb_build_array( - jsonb_build_object('type', 'attnum', 'value', msar.get_pk_column(tab_id)), + jsonb_build_object( + 'type', 'format_data', 'args', jsonb_build_array( + jsonb_build_object('type', 'attnum', 'value', msar.get_pk_column(tab_id)) + ) + ), jsonb_build_object('type', 'literal', 'value', rec_ids) ) )