From 314d38ba3c7a357d39f2d5e307faf4b7bb0fd1f1 Mon Sep 17 00:00:00 2001 From: Paul Trowbridge Date: Thu, 1 Mar 2018 01:22:59 -0500 Subject: [PATCH] add function to set map --- deploy/ubm_schema.sql | 56 ++++++++++++++++++++++++++++++++++ functions/srce_map_set.sql | 51 +++++++++++++++++++++++++++++++ sample_discovercard/mapping.md | 14 +++++---- 3 files changed, 115 insertions(+), 6 deletions(-) create mode 100644 functions/srce_map_set.sql diff --git a/deploy/ubm_schema.sql b/deploy/ubm_schema.sql index 50299be..7a51994 100644 --- a/deploy/ubm_schema.sql +++ b/deploy/ubm_schema.sql @@ -363,6 +363,62 @@ END $_$; +-- +-- Name: srce_map_def_set(text, text, jsonb, integer); Type: FUNCTION; Schema: tps; Owner: - +-- + +CREATE FUNCTION srce_map_def_set(_srce text, _map text, _defn jsonb, _seq integer) RETURNS jsonb + LANGUAGE plpgsql + AS $_$ + +DECLARE + _message jsonb; + _MESSAGE_TEXT text; + _PG_EXCEPTION_DETAIL text; + _PG_EXCEPTION_HINT text; + +BEGIN + + BEGIN + + INSERT INTO + tps.map_rm + SELECT + _srce + ,_map + ,_defn + ,_seq + ON CONFLICT ON CONSTRAINT map_rm_pk DO UPDATE SET + srce = _srce + ,target = _map + ,regex = _defn + ,seq = _seq; + + EXCEPTION WHEN OTHERS THEN + + GET STACKED DIAGNOSTICS + _MESSAGE_TEXT = MESSAGE_TEXT, + _PG_EXCEPTION_DETAIL = PG_EXCEPTION_DETAIL, + _PG_EXCEPTION_HINT = PG_EXCEPTION_HINT; + _message:= + ($$ + { + "status":"fail", + "message":"error setting definition" + } + $$::jsonb) + ||jsonb_build_object('message_text',_MESSAGE_TEXT) + ||jsonb_build_object('pg_exception_detail',_PG_EXCEPTION_DETAIL); + return _message; + END; + + _message:= jsonb_build_object('status','complete','message','definition has been set'); + return _message; + +END; +$_$; + + -- -- Name: srce_set(text, jsonb); Type: FUNCTION; Schema: tps; Owner: - -- diff --git a/functions/srce_map_set.sql b/functions/srce_map_set.sql new file mode 100644 index 0000000..6ef417c --- /dev/null +++ b/functions/srce_map_set.sql @@ -0,0 +1,51 @@ +CREATE OR REPLACE FUNCTION tps.srce_map_def_set(_srce text, _map text, _defn jsonb, _seq int) RETURNS jsonb +AS +$f$ + +DECLARE + _message jsonb; + _MESSAGE_TEXT text; + _PG_EXCEPTION_DETAIL text; + _PG_EXCEPTION_HINT text; + +BEGIN + + BEGIN + + INSERT INTO + tps.map_rm + SELECT + _srce + ,_map + ,_defn + ,_seq + ON CONFLICT ON CONSTRAINT map_rm_pk DO UPDATE SET + srce = _srce + ,target = _map + ,regex = _defn + ,seq = _seq; + + EXCEPTION WHEN OTHERS THEN + + GET STACKED DIAGNOSTICS + _MESSAGE_TEXT = MESSAGE_TEXT, + _PG_EXCEPTION_DETAIL = PG_EXCEPTION_DETAIL, + _PG_EXCEPTION_HINT = PG_EXCEPTION_HINT; + _message:= + ($$ + { + "status":"fail", + "message":"error setting definition" + } + $$::jsonb) + ||jsonb_build_object('message_text',_MESSAGE_TEXT) + ||jsonb_build_object('pg_exception_detail',_PG_EXCEPTION_DETAIL); + return _message; + END; + + _message:= jsonb_build_object('status','complete','message','definition has been set'); + return _message; + +END; +$f$ +language plpgsql \ No newline at end of file diff --git a/sample_discovercard/mapping.md b/sample_discovercard/mapping.md index 8f92787..5fe8f94 100644 --- a/sample_discovercard/mapping.md +++ b/sample_discovercard/mapping.md @@ -79,11 +79,12 @@ map definition SQL --------------------------------------------- -INSERT INTO - tps.map_rm -SELECT - 'DCARD', - 'First 20', +select + x.x +from + TPS.srce_map_def_set( + 'DCARD'::text, + 'First 20'::text, $$ { "defn": [ { @@ -103,7 +104,8 @@ SELECT "function": "extract", "description": "pull first 20 characters from description for mapping" } $$::jsonb, - 1 + 1::int + ) x(x) assign new key/values to the results of the regular expression, and then back to the underlying row it came from