-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsicob_test.sql
More file actions
40 lines (40 loc) · 1.19 KB
/
Copy pathsicob_test.sql
File metadata and controls
40 lines (40 loc) · 1.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
SET CLIENT_ENCODING TO 'utf8';
CREATE OR REPLACE FUNCTION public.sicob_test(opt json DEFAULT '{}'::json)
RETURNS TABLE(test character varying, result character varying, descripcion character varying)
LANGUAGE plpgsql
AS $function$
DECLARE
var_r record;
sql text;
res text;
condition text;
BEGIN
sql := 'SELECT * FROM registro_derecho.pruebas';
condition := CASE WHEN COALESCE((opt->>'test')::text, '') <>'' THEN ('(test = '''|| (opt->>'test')::text || ''')') ELSE '(TRUE)' END;
sql := sql || ' WHERE ' || condition;
FOR var_r IN EXECUTE sql
LOOP
test := var_r.test;
descripcion := var_r.descripcion;
sql := var_r.entrada;
EXECUTE sql INTO res;
result := CASE
WHEN upper(var_r.tipo) = 'JSON'
AND (
SELECT
NOT exists(
SELECT
FROM json_each_text((var_r.salida)::json) t1
FULL OUTER JOIN json_each_text((res)::json) t2 USING (key)
WHERE t1.value<>t2.value OR t1.key IS NULL OR t2.key IS NULL
)
) THEN
'OK'
ELSE
'ERROR!!'
END;
RETURN NEXT;
END LOOP;
END;
$function$