Skip to content

Commit c17b4a2

Browse files
committed
RHINENG-26544: add workspace columns
1 parent 6c5b053 commit c17b4a2

17 files changed

Lines changed: 116 additions & 32 deletions

base/database/testing.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package database
22

33
import (
44
"app/base"
5+
"app/base/inventory"
56
"app/base/models"
67
"app/base/utils"
78
"fmt"
@@ -13,6 +14,17 @@ import (
1314
"github.com/stretchr/testify/assert"
1415
)
1516

17+
const (
18+
TestWorkspace1ID = "aaaaaaaa-0000-0000-0000-000000000001"
19+
TestWorkspace2ID = "aaaaaaaa-0000-0000-0000-000000000002"
20+
TestWorkspaceOtherID = "bbbbbbbb-0000-0000-0000-000000000003"
21+
)
22+
23+
func TestWorkspacesGroup1() *inventory.Groups {
24+
g := inventory.Groups{{ID: TestWorkspace1ID, Name: "group1"}}
25+
return &g
26+
}
27+
1628
func DebugWithCachesCheck(part string, fun func()) {
1729
fun()
1830
validAfter, err := CheckCachesValidRet()

base/database/utils_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ var (
1616
)
1717

1818
var testCases = []map[int64]map[string]string{
19-
{nGroup1: {utils.KeyGrouped: `{"[{\"id\":\"inventory-group-1\"}]"}`}},
20-
{nGroup2: {utils.KeyGrouped: `{"[{\"id\":\"inventory-group-2\"}]"}`}},
21-
{nGroup1 + nGroup2: {utils.KeyGrouped: `{"[{\"id\":\"inventory-group-1\"}]","[{\"id\":\"inventory-group-2\"}]"}`}},
19+
{nGroup1: {utils.KeyGrouped: `{"[{\"id\":\"aaaaaaaa-0000-0000-0000-000000000001\"}]"}`}},
20+
{nGroup2: {utils.KeyGrouped: `{"[{\"id\":\"aaaaaaaa-0000-0000-0000-000000000002\"}]"}`}},
21+
{nGroup1 + nGroup2: {utils.KeyGrouped: `{"[{\"id\":\"aaaaaaaa-0000-0000-0000-000000000001\"}]","[{\"id\":\"aaaaaaaa-0000-0000-0000-000000000002\"}]"}`}}, //nolint:lll
2222
{nGroup1 + nUngrouped: {
23-
utils.KeyGrouped: `{"[{\"id\":\"inventory-group-1\"}]"}`,
23+
utils.KeyGrouped: `{"[{\"id\":\"aaaaaaaa-0000-0000-0000-000000000001\"}]"}`,
2424
utils.KeyUngrouped: "[]",
2525
}},
2626
{nUngrouped: {
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
SELECT drop_table_partition_triggers('system_inventory_sync_workspace',
2+
$$BEFORE INSERT OR UPDATE OF workspaces$$,
3+
'system_inventory',
4+
$$FOR EACH ROW EXECUTE PROCEDURE sync_system_inventory_workspace()$$);
5+
6+
DROP FUNCTION IF EXISTS sync_system_inventory_workspace();
7+
8+
ALTER TABLE system_inventory
9+
DROP COLUMN IF EXISTS workspace_id,
10+
DROP COLUMN IF EXISTS workspace_name;
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
ALTER TABLE system_inventory
2+
ADD COLUMN IF NOT EXISTS workspace_id UUID,
3+
ADD COLUMN IF NOT EXISTS workspace_name TEXT CHECK (NOT empty(workspace_name));
4+
5+
CREATE OR REPLACE FUNCTION sync_system_inventory_workspace()
6+
RETURNS TRIGGER AS
7+
$$
8+
BEGIN
9+
IF NEW.workspaces IS NOT NULL
10+
AND jsonb_typeof(NEW.workspaces) = 'array'
11+
AND jsonb_array_length(NEW.workspaces) > 0
12+
THEN
13+
NEW.workspace_id := (NEW.workspaces->0->>'id')::UUID;
14+
NEW.workspace_name := NEW.workspaces->0->>'name';
15+
IF NEW.workspace_name IS NULL OR empty(NEW.workspace_name) THEN
16+
RAISE EXCEPTION 'workspace_name must not be empty';
17+
END IF;
18+
ELSIF TG_OP = 'INSERT' THEN
19+
RAISE EXCEPTION 'workspaces required';
20+
END IF;
21+
RETURN NEW;
22+
END;
23+
$$ LANGUAGE plpgsql;
24+
25+
SELECT create_table_partition_triggers('system_inventory_sync_workspace',
26+
$$BEFORE INSERT OR UPDATE OF workspaces$$,
27+
'system_inventory',
28+
$$FOR EACH ROW EXECUTE PROCEDURE sync_system_inventory_workspace()$$);

database_admin/schema/create_schema.sql

Lines changed: 27 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 (155, false);
10+
VALUES (156, false);
1111

1212
-- ---------------------------------------------------------------------------
1313
-- Functions
@@ -65,6 +65,25 @@ END;
6565
$check_unchanged$
6666
LANGUAGE 'plpgsql';
6767

68+
CREATE OR REPLACE FUNCTION sync_system_inventory_workspace()
69+
RETURNS TRIGGER AS
70+
$$
71+
BEGIN
72+
IF NEW.workspaces IS NOT NULL
73+
AND jsonb_typeof(NEW.workspaces) = 'array'
74+
AND jsonb_array_length(NEW.workspaces) > 0
75+
THEN
76+
NEW.workspace_id := (NEW.workspaces->0->>'id')::UUID;
77+
NEW.workspace_name := NEW.workspaces->0->>'name';
78+
IF NEW.workspace_name IS NULL OR empty(NEW.workspace_name) THEN
79+
RAISE EXCEPTION 'workspace_name must not be empty';
80+
END IF;
81+
ELSIF TG_OP = 'INSERT' THEN
82+
RAISE EXCEPTION 'workspaces required';
83+
END IF;
84+
RETURN NEW;
85+
END;
86+
$$ LANGUAGE plpgsql;
6887

6988
CREATE OR REPLACE FUNCTION on_system_update()
7089
-- this trigger updates advisory_account_data when server changes its stale flag
@@ -593,6 +612,8 @@ CREATE TABLE IF NOT EXISTS system_inventory
593612
mssql_workload BOOLEAN NOT NULL DEFAULT false,
594613
mssql_workload_version TEXT CHECK (NOT empty(mssql_workload_version)),
595614
workspaces JSONB,
615+
workspace_id UUID,
616+
workspace_name TEXT CHECK (NOT empty(workspace_name)),
596617
PRIMARY KEY (rh_account_id, id),
597618
UNIQUE (rh_account_id, inventory_id)
598619
) PARTITION BY HASH (rh_account_id);
@@ -621,6 +642,11 @@ SELECT create_table_partition_triggers('system_inventory_on_update',
621642
'system_inventory',
622643
$$FOR EACH ROW EXECUTE PROCEDURE on_system_update()$$);
623644

645+
SELECT create_table_partition_triggers('system_inventory_sync_workspace',
646+
$$BEFORE INSERT OR UPDATE OF workspaces$$,
647+
'system_inventory',
648+
$$FOR EACH ROW EXECUTE PROCEDURE sync_system_inventory_workspace()$$);
649+
624650
CREATE INDEX IF NOT EXISTS system_inventory_inventory_id_idx ON system_inventory (inventory_id);
625651
CREATE INDEX IF NOT EXISTS system_inventory_tags_index ON system_inventory USING GIN (tags JSONB_PATH_OPS);
626652
CREATE INDEX IF NOT EXISTS system_inventory_stale_timestamp_index ON system_inventory (stale_timestamp);

0 commit comments

Comments
 (0)