Skip to content

Commit ec4e6b2

Browse files
committed
refactor(sql): restructure om_scada_graph_json table by renaming and recreating it with updated primary key; adjust related SQL queries and tests
1 parent 6ff6588 commit ec4e6b2

3 files changed

Lines changed: 49 additions & 23 deletions

File tree

dbmodel/schemas/main/common/updates/4/17/0/patch.sql

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1780,31 +1780,39 @@ VALUES
17801780
(4748, 'No network path between node_1=%node_1% and node_2=%node_2%', NULL, 2, true, 'utils', 'core', 'UI')
17811781
ON CONFLICT (id) DO NOTHING;
17821782

1783-
-- om_scada_graph_json: one row per synoptic (group_id); expl_id is the union of exploitations.
1784-
-- Existing JSON (PK expl_id, one blob for the whole graph) cannot be split: truncate and regenerate.
1785-
TRUNCATE TABLE om_scada_graph_json;
1786-
1787-
ALTER TABLE om_scada_graph_json DROP CONSTRAINT IF EXISTS om_scada_graph_json_pkey;
1788-
1789-
SELECT gw_fct_admin_manage_fields($${"data":{"action":"ADD","table":"om_scada_graph_json","column":"group_id","dataType":"integer"}}$$);
1783+
-- om_scada_graph_json: one row per synoptic (group_id first); expl_id is the union of exploitations.
1784+
-- Existing JSON (PK expl_id, one blob for the whole graph) cannot be split: drop-in recreate, regenerate with commit.
1785+
ALTER TABLE om_scada_graph_json RENAME TO _om_scada_graph_json_;
1786+
ALTER TABLE _om_scada_graph_json_ RENAME CONSTRAINT om_scada_graph_json_pkey TO _om_scada_graph_json_pkey;
1787+
1788+
CREATE TABLE om_scada_graph_json (
1789+
group_id int4 NOT NULL,
1790+
expl_id int4[] NULL,
1791+
om_scada_graph_json json,
1792+
insert_tstamp timestamp DEFAULT now(),
1793+
update_tstamp timestamp DEFAULT NULL,
1794+
CONSTRAINT om_scada_graph_json_pkey PRIMARY KEY (group_id)
1795+
);
17901796

1791-
DO $scada_json$
1797+
DO $scada_json_acl$
1798+
DECLARE
1799+
r record;
17921800
BEGIN
1793-
IF EXISTS (
1794-
SELECT 1
1795-
FROM information_schema.columns
1801+
FOR r IN
1802+
SELECT DISTINCT grantee, privilege_type
1803+
FROM information_schema.role_table_grants
17961804
WHERE table_schema = current_schema()
1797-
AND table_name = 'om_scada_graph_json'
1798-
AND column_name = 'expl_id'
1799-
AND udt_name = 'int4'
1800-
) THEN
1801-
PERFORM gw_fct_admin_manage_fields($${"data":{"action":"CHANGETYPE","table":"om_scada_graph_json","column":"expl_id","dataType":"int4[]"}}$$);
1802-
END IF;
1805+
AND table_name = '_om_scada_graph_json_'
1806+
AND grantee <> 'PUBLIC'
1807+
LOOP
1808+
EXECUTE format(
1809+
'GRANT %s ON TABLE om_scada_graph_json TO %I',
1810+
r.privilege_type,
1811+
r.grantee
1812+
);
1813+
END LOOP;
18031814
END
1804-
$scada_json$;
1805-
1806-
ALTER TABLE om_scada_graph_json ALTER COLUMN group_id SET NOT NULL;
1807-
ALTER TABLE om_scada_graph_json ADD CONSTRAINT om_scada_graph_json_pkey PRIMARY KEY (group_id);
1815+
$scada_json_acl$;
18081816

18091817
-- om_scada_graph.order_id → level_id (same meaning as vertex level_id / JSON levelId)
18101818
DROP TRIGGER IF EXISTS gw_trg_v_om_scada_graph_delete ON v_om_scada_graph;

dbmodel/test/ud/schema/tables/test_schema_om_scada_graph_json.sql

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,20 @@ SELECT has_table('om_scada_graph_json'::name, 'Table om_scada_graph_json should
2121
SELECT columns_are(
2222
'om_scada_graph_json',
2323
ARRAY[
24-
'expl_id', 'om_scada_graph_json', 'insert_tstamp', 'update_tstamp', 'group_id'
24+
'group_id', 'expl_id', 'om_scada_graph_json', 'insert_tstamp', 'update_tstamp'
2525
],
2626
'Table om_scada_graph_json should have the correct columns'
2727
);
2828

29+
SELECT is(
30+
(SELECT array_agg(attname::text ORDER BY attnum)
31+
FROM pg_attribute
32+
WHERE attrelid = 'om_scada_graph_json'::regclass
33+
AND attnum > 0 AND NOT attisdropped),
34+
ARRAY['group_id', 'expl_id', 'om_scada_graph_json', 'insert_tstamp', 'update_tstamp']::text[],
35+
'PK group_id should be the first column'
36+
);
37+
2938
-- Check primary key
3039
SELECT has_pk('om_scada_graph_json', 'Table om_scada_graph_json should have a primary key');
3140
SELECT col_is_pk('om_scada_graph_json', ARRAY['group_id'], 'Primary key should be on group_id');

dbmodel/test/ws/schema/tables/test_schema_om_scada_graph_json.sql

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,20 @@ SELECT has_table('om_scada_graph_json'::name, 'Table om_scada_graph_json should
2121
SELECT columns_are(
2222
'om_scada_graph_json',
2323
ARRAY[
24-
'expl_id', 'om_scada_graph_json', 'insert_tstamp', 'update_tstamp', 'group_id'
24+
'group_id', 'expl_id', 'om_scada_graph_json', 'insert_tstamp', 'update_tstamp'
2525
],
2626
'Table om_scada_graph_json should have the correct columns'
2727
);
2828

29+
SELECT is(
30+
(SELECT array_agg(attname::text ORDER BY attnum)
31+
FROM pg_attribute
32+
WHERE attrelid = 'om_scada_graph_json'::regclass
33+
AND attnum > 0 AND NOT attisdropped),
34+
ARRAY['group_id', 'expl_id', 'om_scada_graph_json', 'insert_tstamp', 'update_tstamp']::text[],
35+
'PK group_id should be the first column'
36+
);
37+
2938
-- Check primary key
3039
SELECT has_pk('om_scada_graph_json', 'Table om_scada_graph_json should have a primary key');
3140
SELECT col_is_pk('om_scada_graph_json', ARRAY['group_id'], 'Primary key should be on group_id');

0 commit comments

Comments
 (0)