Skip to content

Commit b296184

Browse files
MichaelMrakaDugowitch
authored andcommitted
RHINENG-21214: handle inserts/updates to system_platform view
1 parent 3ba54cd commit b296184

3 files changed

Lines changed: 355 additions & 1 deletion

File tree

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
DROP TRIGGER IF EXISTS system_platform_delete_trigger ON system_platform;
2+
DROP TRIGGER IF EXISTS system_platform_update_trigger ON system_platform;
3+
DROP TRIGGER IF EXISTS system_platform_insert_trigger ON system_platform;
4+
5+
DROP FUNCTION IF EXISTS system_platform_delete();
6+
DROP FUNCTION IF EXISTS system_platform_update();
7+
DROP FUNCTION IF EXISTS system_platform_insert();
Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
-- INSTEAD OF triggers for system_platform view to handle INSERT and UPDATE
2+
3+
CREATE OR REPLACE FUNCTION system_platform_insert()
4+
RETURNS TRIGGER AS
5+
$system_platform_insert$
6+
DECLARE
7+
new_system_id BIGINT;
8+
created TIMESTAMPTZ := CURRENT_TIMESTAMP;
9+
BEGIN
10+
INSERT INTO system_inventory (
11+
inventory_id,
12+
rh_account_id,
13+
vmaas_json,
14+
json_checksum,
15+
last_updated,
16+
unchanged_since,
17+
last_upload,
18+
stale_timestamp,
19+
stale_warning_timestamp,
20+
culled_timestamp,
21+
stale,
22+
display_name,
23+
reporter_id,
24+
yum_updates,
25+
satellite_managed,
26+
built_pkgcache,
27+
yum_checksum,
28+
arch,
29+
bootc,
30+
tags,
31+
created
32+
) VALUES (
33+
NEW.inventory_id,
34+
NEW.rh_account_id,
35+
NEW.vmaas_json,
36+
NEW.json_checksum,
37+
NEW.last_updated,
38+
NEW.unchanged_since,
39+
NEW.last_upload,
40+
NEW.stale_timestamp,
41+
NEW.stale_warning_timestamp,
42+
NEW.culled_timestamp,
43+
COALESCE(NEW.stale, false),
44+
NEW.display_name,
45+
NEW.reporter_id,
46+
NEW.yum_updates,
47+
COALESCE(NEW.satellite_managed, false),
48+
COALESCE(NEW.built_pkgcache, false),
49+
NEW.yum_checksum,
50+
NEW.arch,
51+
COALESCE(NEW.bootc, false),
52+
'[]'::JSONB,
53+
created
54+
)
55+
RETURNING id INTO new_system_id;
56+
57+
INSERT INTO system_patch (
58+
system_id,
59+
rh_account_id,
60+
last_evaluation,
61+
installable_advisory_count_cache,
62+
installable_advisory_enh_count_cache,
63+
installable_advisory_bug_count_cache,
64+
installable_advisory_sec_count_cache,
65+
packages_installed,
66+
packages_installable,
67+
packages_applicable,
68+
third_party,
69+
applicable_advisory_count_cache,
70+
applicable_advisory_enh_count_cache,
71+
applicable_advisory_bug_count_cache,
72+
applicable_advisory_sec_count_cache,
73+
template_id
74+
) VALUES (
75+
new_system_id,
76+
NEW.rh_account_id,
77+
NEW.last_evaluation,
78+
COALESCE(NEW.installable_advisory_count_cache, 0),
79+
COALESCE(NEW.installable_advisory_enh_count_cache, 0),
80+
COALESCE(NEW.installable_advisory_bug_count_cache, 0),
81+
COALESCE(NEW.installable_advisory_sec_count_cache, 0),
82+
COALESCE(NEW.packages_installed, 0),
83+
COALESCE(NEW.packages_installable, 0),
84+
COALESCE(NEW.packages_applicable, 0),
85+
COALESCE(NEW.third_party, false),
86+
COALESCE(NEW.applicable_advisory_count_cache, 0),
87+
COALESCE(NEW.applicable_advisory_enh_count_cache, 0),
88+
COALESCE(NEW.applicable_advisory_bug_count_cache, 0),
89+
COALESCE(NEW.applicable_advisory_sec_count_cache, 0),
90+
NEW.template_id
91+
);
92+
93+
NEW.id := new_system_id;
94+
RETURN NEW;
95+
END;
96+
$system_platform_insert$
97+
LANGUAGE 'plpgsql';
98+
99+
CREATE OR REPLACE FUNCTION system_platform_update()
100+
RETURNS TRIGGER AS
101+
$system_platform_update$
102+
BEGIN
103+
UPDATE system_inventory SET
104+
inventory_id = NEW.inventory_id,
105+
vmaas_json = NEW.vmaas_json,
106+
json_checksum = NEW.json_checksum,
107+
last_updated = NEW.last_updated,
108+
unchanged_since = NEW.unchanged_since,
109+
last_upload = NEW.last_upload,
110+
stale_timestamp = NEW.stale_timestamp,
111+
stale_warning_timestamp = NEW.stale_warning_timestamp,
112+
culled_timestamp = NEW.culled_timestamp,
113+
stale = NEW.stale,
114+
display_name = NEW.display_name,
115+
reporter_id = NEW.reporter_id,
116+
yum_updates = NEW.yum_updates,
117+
satellite_managed = NEW.satellite_managed,
118+
built_pkgcache = NEW.built_pkgcache,
119+
yum_checksum = NEW.yum_checksum,
120+
arch = NEW.arch,
121+
bootc = NEW.bootc
122+
WHERE id = OLD.id AND rh_account_id = OLD.rh_account_id;
123+
124+
UPDATE system_patch SET
125+
last_evaluation = NEW.last_evaluation,
126+
installable_advisory_count_cache = NEW.installable_advisory_count_cache,
127+
installable_advisory_enh_count_cache = NEW.installable_advisory_enh_count_cache,
128+
installable_advisory_bug_count_cache = NEW.installable_advisory_bug_count_cache,
129+
installable_advisory_sec_count_cache = NEW.installable_advisory_sec_count_cache,
130+
packages_installed = NEW.packages_installed,
131+
packages_installable = NEW.packages_installable,
132+
packages_applicable = NEW.packages_applicable,
133+
third_party = NEW.third_party,
134+
applicable_advisory_count_cache = NEW.applicable_advisory_count_cache,
135+
applicable_advisory_enh_count_cache = NEW.applicable_advisory_enh_count_cache,
136+
applicable_advisory_bug_count_cache = NEW.applicable_advisory_bug_count_cache,
137+
applicable_advisory_sec_count_cache = NEW.applicable_advisory_sec_count_cache,
138+
template_id = NEW.template_id
139+
WHERE system_id = OLD.id AND rh_account_id = OLD.rh_account_id;
140+
141+
RETURN NEW;
142+
END;
143+
$system_platform_update$
144+
LANGUAGE 'plpgsql';
145+
146+
CREATE OR REPLACE FUNCTION system_platform_delete()
147+
RETURNS TRIGGER AS
148+
$system_platform_delete$
149+
BEGIN
150+
DELETE FROM system_patch
151+
WHERE system_id = OLD.id AND rh_account_id = OLD.rh_account_id;
152+
153+
DELETE FROM system_inventory
154+
WHERE id = OLD.id AND rh_account_id = OLD.rh_account_id;
155+
156+
RETURN OLD;
157+
END;
158+
$system_platform_delete$
159+
LANGUAGE 'plpgsql';
160+
161+
CREATE TRIGGER system_platform_insert_trigger
162+
INSTEAD OF INSERT ON system_platform
163+
FOR EACH ROW
164+
EXECUTE FUNCTION system_platform_insert();
165+
166+
CREATE TRIGGER system_platform_update_trigger
167+
INSTEAD OF UPDATE ON system_platform
168+
FOR EACH ROW
169+
EXECUTE FUNCTION system_platform_update();
170+
171+
CREATE TRIGGER system_platform_delete_trigger
172+
INSTEAD OF DELETE ON system_platform
173+
FOR EACH ROW
174+
EXECUTE FUNCTION system_platform_delete();

database_admin/schema/create_schema.sql

Lines changed: 174 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ CREATE TABLE IF NOT EXISTS schema_migrations
77

88

99
INSERT INTO schema_migrations
10-
VALUES (142, false);
10+
VALUES (143, false);
1111

1212
-- ---------------------------------------------------------------------------
1313
-- Functions
@@ -1104,6 +1104,179 @@ CREATE OR REPLACE VIEW system_platform AS SELECT
11041104
FROM system_inventory si JOIN system_patch sp
11051105
ON si.id = sp.system_id AND si.rh_account_id = sp.rh_account_id;
11061106

1107+
CREATE OR REPLACE FUNCTION system_platform_insert()
1108+
RETURNS TRIGGER AS
1109+
$system_platform_insert$
1110+
DECLARE
1111+
new_system_id BIGINT;
1112+
created TIMESTAMPTZ := CURRENT_TIMESTAMP;
1113+
BEGIN
1114+
INSERT INTO system_inventory (
1115+
inventory_id,
1116+
rh_account_id,
1117+
vmaas_json,
1118+
json_checksum,
1119+
last_updated,
1120+
unchanged_since,
1121+
last_upload,
1122+
stale_timestamp,
1123+
stale_warning_timestamp,
1124+
culled_timestamp,
1125+
stale,
1126+
display_name,
1127+
reporter_id,
1128+
yum_updates,
1129+
satellite_managed,
1130+
built_pkgcache,
1131+
yum_checksum,
1132+
arch,
1133+
bootc,
1134+
tags,
1135+
created
1136+
) VALUES (
1137+
NEW.inventory_id,
1138+
NEW.rh_account_id,
1139+
NEW.vmaas_json,
1140+
NEW.json_checksum,
1141+
NEW.last_updated,
1142+
NEW.unchanged_since,
1143+
NEW.last_upload,
1144+
NEW.stale_timestamp,
1145+
NEW.stale_warning_timestamp,
1146+
NEW.culled_timestamp,
1147+
COALESCE(NEW.stale, false),
1148+
NEW.display_name,
1149+
NEW.reporter_id,
1150+
NEW.yum_updates,
1151+
COALESCE(NEW.satellite_managed, false),
1152+
COALESCE(NEW.built_pkgcache, false),
1153+
NEW.yum_checksum,
1154+
NEW.arch,
1155+
COALESCE(NEW.bootc, false),
1156+
'[]'::JSONB,
1157+
created
1158+
)
1159+
RETURNING id INTO new_system_id;
1160+
1161+
INSERT INTO system_patch (
1162+
system_id,
1163+
rh_account_id,
1164+
last_evaluation,
1165+
installable_advisory_count_cache,
1166+
installable_advisory_enh_count_cache,
1167+
installable_advisory_bug_count_cache,
1168+
installable_advisory_sec_count_cache,
1169+
packages_installed,
1170+
packages_installable,
1171+
packages_applicable,
1172+
third_party,
1173+
applicable_advisory_count_cache,
1174+
applicable_advisory_enh_count_cache,
1175+
applicable_advisory_bug_count_cache,
1176+
applicable_advisory_sec_count_cache,
1177+
template_id
1178+
) VALUES (
1179+
new_system_id,
1180+
NEW.rh_account_id,
1181+
NEW.last_evaluation,
1182+
COALESCE(NEW.installable_advisory_count_cache, 0),
1183+
COALESCE(NEW.installable_advisory_enh_count_cache, 0),
1184+
COALESCE(NEW.installable_advisory_bug_count_cache, 0),
1185+
COALESCE(NEW.installable_advisory_sec_count_cache, 0),
1186+
COALESCE(NEW.packages_installed, 0),
1187+
COALESCE(NEW.packages_installable, 0),
1188+
COALESCE(NEW.packages_applicable, 0),
1189+
COALESCE(NEW.third_party, false),
1190+
COALESCE(NEW.applicable_advisory_count_cache, 0),
1191+
COALESCE(NEW.applicable_advisory_enh_count_cache, 0),
1192+
COALESCE(NEW.applicable_advisory_bug_count_cache, 0),
1193+
COALESCE(NEW.applicable_advisory_sec_count_cache, 0),
1194+
NEW.template_id
1195+
);
1196+
1197+
NEW.id := new_system_id;
1198+
RETURN NEW;
1199+
END;
1200+
$system_platform_insert$
1201+
LANGUAGE 'plpgsql';
1202+
1203+
CREATE OR REPLACE FUNCTION system_platform_update()
1204+
RETURNS TRIGGER AS
1205+
$system_platform_update$
1206+
BEGIN
1207+
UPDATE system_inventory SET
1208+
inventory_id = NEW.inventory_id,
1209+
vmaas_json = NEW.vmaas_json,
1210+
json_checksum = NEW.json_checksum,
1211+
last_updated = NEW.last_updated,
1212+
unchanged_since = NEW.unchanged_since,
1213+
last_upload = NEW.last_upload,
1214+
stale_timestamp = NEW.stale_timestamp,
1215+
stale_warning_timestamp = NEW.stale_warning_timestamp,
1216+
culled_timestamp = NEW.culled_timestamp,
1217+
stale = NEW.stale,
1218+
display_name = NEW.display_name,
1219+
reporter_id = NEW.reporter_id,
1220+
yum_updates = NEW.yum_updates,
1221+
satellite_managed = NEW.satellite_managed,
1222+
built_pkgcache = NEW.built_pkgcache,
1223+
yum_checksum = NEW.yum_checksum,
1224+
arch = NEW.arch,
1225+
bootc = NEW.bootc
1226+
WHERE id = OLD.id AND rh_account_id = OLD.rh_account_id;
1227+
1228+
UPDATE system_patch SET
1229+
last_evaluation = NEW.last_evaluation,
1230+
installable_advisory_count_cache = NEW.installable_advisory_count_cache,
1231+
installable_advisory_enh_count_cache = NEW.installable_advisory_enh_count_cache,
1232+
installable_advisory_bug_count_cache = NEW.installable_advisory_bug_count_cache,
1233+
installable_advisory_sec_count_cache = NEW.installable_advisory_sec_count_cache,
1234+
packages_installed = NEW.packages_installed,
1235+
packages_installable = NEW.packages_installable,
1236+
packages_applicable = NEW.packages_applicable,
1237+
third_party = NEW.third_party,
1238+
applicable_advisory_count_cache = NEW.applicable_advisory_count_cache,
1239+
applicable_advisory_enh_count_cache = NEW.applicable_advisory_enh_count_cache,
1240+
applicable_advisory_bug_count_cache = NEW.applicable_advisory_bug_count_cache,
1241+
applicable_advisory_sec_count_cache = NEW.applicable_advisory_sec_count_cache,
1242+
template_id = NEW.template_id
1243+
WHERE system_id = OLD.id AND rh_account_id = OLD.rh_account_id;
1244+
1245+
RETURN NEW;
1246+
END;
1247+
$system_platform_update$
1248+
LANGUAGE 'plpgsql';
1249+
1250+
CREATE OR REPLACE FUNCTION system_platform_delete()
1251+
RETURNS TRIGGER AS
1252+
$system_platform_delete$
1253+
BEGIN
1254+
DELETE FROM system_patch
1255+
WHERE system_id = OLD.id AND rh_account_id = OLD.rh_account_id;
1256+
1257+
DELETE FROM system_inventory
1258+
WHERE id = OLD.id AND rh_account_id = OLD.rh_account_id;
1259+
1260+
RETURN OLD;
1261+
END;
1262+
$system_platform_delete$
1263+
LANGUAGE 'plpgsql';
1264+
1265+
CREATE TRIGGER system_platform_insert_trigger
1266+
INSTEAD OF INSERT ON system_platform
1267+
FOR EACH ROW
1268+
EXECUTE FUNCTION system_platform_insert();
1269+
1270+
CREATE TRIGGER system_platform_update_trigger
1271+
INSTEAD OF UPDATE ON system_platform
1272+
FOR EACH ROW
1273+
EXECUTE FUNCTION system_platform_update();
1274+
1275+
CREATE TRIGGER system_platform_delete_trigger
1276+
INSTEAD OF DELETE ON system_platform
1277+
FOR EACH ROW
1278+
EXECUTE FUNCTION system_platform_delete();
1279+
11071280
GRANT SELECT, INSERT, UPDATE, DELETE ON system_platform TO listener;
11081281
-- evaluator needs to update last_evaluation
11091282
GRANT UPDATE ON system_platform TO evaluator;

0 commit comments

Comments
 (0)