File: v21-dem-person_views.sql

package info (click to toggle)
gnumed-server 22.31-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 46,268 kB
  • sloc: sql: 1,217,633; python: 15,878; sh: 1,590; makefile: 20
file content (135 lines) | stat: -rw-r--r-- 3,625 bytes parent folder | download | duplicates (5)
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
-- ==============================================================
-- GNUmed database schema change script
--
-- License: GPL v2 or later
-- Author: karsten.hilbert@gmx.net
--
-- ==============================================================
\set ON_ERROR_STOP 1
--set default_transaction_read_only to off;

-- --------------------------------------------------------------
drop view if exists dem.v_all_persons cascade;

create view dem.v_all_persons as
select
	d_i.pk
		as pk_identity,
	d_i.title
		as title,
	d_n.firstnames
		as firstnames,
	d_n.preferred
		as preferred,
	d_n.lastnames
		as lastnames,
	d_i.gender
		as gender,
	_(d_i.gender)
		as l10n_gender,
	d_i.dob
		as dob_only,
	(date_trunc('day', d_i.dob) + coalesce(d_i.tob, dob::time))
		as dob,
	d_i.tob
		as tob,
	d_i.deceased
		as deceased,
	coalesce(d_ms.name, 'unknown')
		as marital_status,
	_(coalesce(d_ms.name, 'unknown'))
		as l10n_marital_status,
	d_i.emergency_contact
		as emergency_contact,
	d_i.comment
		as comment,
	d_i.deleted
		as is_deleted,
	d_i.fk_marital_status
		as pk_marital_status,
	d_n.id
		as pk_active_name,
	d_i.fk_emergency_contact
		as pk_emergency_contact,
	d_i.fk_primary_provider
		as pk_primary_provider,
	d_i.xmin
		as xmin_identity,
	d_i.dob_is_estimated
		as dob_is_estimated
from
	dem.identity d_i
		inner join dem.names d_n on ((d_n.id_identity = d_i.pk) and (d_n.active is true))
			left outer join dem.marital_status d_ms on (d_i.fk_marital_status = d_ms.pk)
;

comment on view dem.v_all_persons is
	'This view denormalizes persons with their active name.';

revoke all on dem.v_all_persons from public;
grant select on dem.v_all_persons to group "gm-public";

-- --------------------------------------------------------------
drop view if exists dem.v_deleted_persons cascade;

create or replace view dem.v_deleted_persons as
select d_vp.*
from dem.v_all_persons d_vp
where
	d_vp.is_deleted is true
;

comment on view dem.v_deleted_persons is
	'This view denormalizes "deleted" persons with their active name.';

revoke all on dem.v_deleted_persons from public;
grant select on dem.v_deleted_persons to group "gm-doctors";

-- --------------------------------------------------------------
drop view if exists dem.v_active_persons cascade;

create or replace view dem.v_active_persons as
select d_vp.*
from dem.v_all_persons d_vp
where
	d_vp.is_deleted is false
;

comment on view dem.v_active_persons is
	'This view denormalizes non-deleted persons with their active name.';

revoke all on dem.v_active_persons from public;
grant select on dem.v_active_persons to group "gm-public";

-- --------------------------------------------------------------
drop view if exists dem.v_basic_person cascade;

-- --------------------------------------------------------------
update cfg.report_query c_rq set
	cmd = replace(cmd, 'v_basic_person', 'v_active_persons')
where
	c_rq.cmd is not null
		and
	position('v_basic_person' in c_rq.cmd) > 0
;

-- --------------------------------------------------------------
update ref.auto_hint r_ah set
	query = replace(query, 'v_basic_person', 'v_active_persons')
where
	r_ah.query is not null
		and
	position('v_basic_person' in r_ah.query) > 0
;

-- --------------------------------------------------------------
update ref.auto_hint r_ah set
	recommendation_query = replace(recommendation_query, 'v_basic_person', 'v_active_persons')
where
	r_ah.recommendation_query is not null
		and
	position('v_basic_person' in r_ah.recommendation_query) > 0
;

-- --------------------------------------------------------------
select gm.log_script_insertion('v21-dem-person_views.sql', '21.0');