678d9ce5c2937829abc29b5b15e53085017b2751
[it/dep.git] /
1 --
2 -- ============LICENSE_START=======================================================
3 -- Copyright (C) 2024 Ericsson
4 -- Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
5 -- ================================================================================
6 -- Licensed under the Apache License, Version 2.0 (the "License");
7 -- you may not use this file except in compliance with the License.
8 -- You may obtain a copy of the License at
9 --
10 --       http://www.apache.org/licenses/LICENSE-2.0
11 --
12 -- Unless required by applicable law or agreed to in writing, software
13 -- distributed under the License is distributed on an "AS IS" BASIS,
14 -- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 -- See the License for the specific language governing permissions and
16 -- limitations under the License.
17 --
18 -- SPDX-License-Identifier: Apache-2.0
19 -- ============LICENSE_END=========================================================
20 --
21
22 BEGIN;
23
24 CREATE SCHEMA IF NOT EXISTS teiv_groups;
25 ALTER SCHEMA teiv_groups OWNER TO topology_exposure_user;
26 SET default_tablespace = '';
27 SET default_table_access_method = heap;
28
29 SET ROLE topology_exposure_user;
30
31 -- Function to create CONSTRAINT only if it does not exists
32 CREATE OR REPLACE FUNCTION teiv_groups.create_constraint_if_not_exists (
33         t_name TEXT, c_name TEXT, constraint_sql TEXT
34 )
35 RETURNS void AS
36 $$
37 BEGIN
38         IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'teiv_groups' AND table_name = t_name AND constraint_name = c_name) THEN
39                 EXECUTE constraint_sql;
40         END IF;
41 END;
42 $$ language 'plpgsql';
43
44 CREATE TABLE IF NOT EXISTS teiv_groups."groups" (
45         "id"              VARCHAR(150) PRIMARY KEY,
46         "name"            VARCHAR(150) NOT NULL,
47         "type"            VARCHAR(50) NOT NULL
48 );
49
50 CREATE TABLE IF NOT EXISTS teiv_groups."static_groups" (
51         "id"                    VARCHAR(150),
52         "topology_type"         TEXT NOT NULL,
53         "provided_members_ids"  TEXT[] NOT NULL,
54         PRIMARY KEY ("id", "topology_type"),
55         FOREIGN KEY ("id") REFERENCES teiv_groups."groups" ("id") ON DELETE CASCADE
56 );
57
58 CREATE TABLE IF NOT EXISTS teiv_groups."dynamic_groups" (
59         "id"                  VARCHAR(150) PRIMARY KEY,
60         "criteria"            JSONB NOT NULL,
61         FOREIGN KEY ("id") REFERENCES teiv_groups."groups" ("id") ON DELETE CASCADE
62 );
63
64 SELECT teiv_groups.create_constraint_if_not_exists(
65         'groups',
66         'CHECK_groups_type',
67         'ALTER TABLE teiv_groups."groups" ADD CONSTRAINT "CHECK_groups_type" CHECK ("type" IN (''static'', ''dynamic''))'
68 );
69
70 COMMIT;