DatabaseCreation: dml.sql

File dml.sql, 7.8 KB (added by 231136, 15 hours ago)
Line 
1INSERT INTO Users (username, email, password, full_name, last_login)
2SELECT
3 substr(md5(random()::text), 1, 12),
4
5 substr(md5(random()::text), 1, 10) || '@gmail.com',
6
7 'password123',
8
9 'John Doe',
10
11 now()
12FROM generate_series(1, 1000000)
13ON CONFLICT DO NOTHING;
14
15
16INSERT INTO Roles(role_name)
17VALUES ('ADMIN'),
18 ('FREE_LISTENER'),
19 ('PREMIUM_LISTENER'),
20 ('ARTIST'),
21 ('LABEL_ADMIN');
22
23
24INSERT INTO Permissions (action, resource_type, scope) VALUES
25('PLAY', 'SONG', 'PUBLIC'),
26('PLAY', 'SONG', 'SHARED'),
27('PLAY', 'SONG', 'OWN'),
28('VIEW', 'SONG', 'PUBLIC'),
29('VIEW', 'SONG', 'SHARED'),
30('VIEW', 'SONG', 'OWN'),
31('CREATE', 'SONG', 'OWN'),
32('EDIT', 'SONG', 'OWN'),
33('DELETE', 'SONG', 'OWN'),
34('EDIT', 'SONG', 'ANY'),
35('DELETE', 'SONG', 'ANY'),
36
37('VIEW', 'ALBUM', 'PUBLIC'),
38('VIEW', 'ALBUM', 'SHARED'),
39('VIEW', 'ALBUM', 'OWN'),
40('CREATE', 'ALBUM', 'OWN'),
41('EDIT', 'ALBUM', 'OWN'),
42('DELETE', 'ALBUM', 'OWN'),
43('EDIT', 'ALBUM', 'ANY'),
44('DELETE', 'ALBUM', 'ANY'),
45
46('VIEW', 'PLAYLIST', 'PUBLIC'),
47('VIEW', 'PLAYLIST', 'SHARED'),
48('VIEW', 'PLAYLIST', 'OWN'),
49('CREATE', 'PLAYLIST', 'OWN'),
50('EDIT', 'PLAYLIST', 'OWN'),
51('DELETE', 'PLAYLIST', 'OWN'),
52('ADD_SONG', 'PLAYLIST', 'OWN'),
53('REMOVE_SONG', 'PLAYLIST', 'OWN'),
54('SHARE', 'PLAYLIST', 'OWN'),
55('DELETE', 'PLAYLIST', 'ANY');
56
57INSERT INTO role_permissions (role_id, permission_id)
58SELECT r.id, p.id
59FROM roles r
60JOIN permissions p ON (
61 -- Song
62 (p.action = 'PLAY' AND p.resource_type = 'SONG' AND p.scope = 'PUBLIC' AND r.role_name IN ('ADMIN','ARTIST','LABEL_ADMIN','FREE_LISTENER','PREMIUM_LISTENER')) OR
63 (p.action = 'PLAY' AND p.resource_type = 'SONG' AND p.scope = 'SHARED' AND r.role_name IN ('ADMIN','ARTIST','LABEL_ADMIN')) OR
64 (p.action = 'PLAY' AND p.resource_type = 'SONG' AND p.scope = 'OWN' AND r.role_name IN ('ADMIN','ARTIST','LABEL_ADMIN')) OR
65
66 (p.action = 'VIEW' AND p.resource_type = 'SONG' AND p.scope = 'PUBLIC' AND r.role_name IN ('ADMIN','ARTIST','LABEL_ADMIN')) OR
67 (p.action = 'VIEW' AND p.resource_type = 'SONG' AND p.scope = 'SHARED' AND r.role_name IN ('ADMIN','ARTIST','LABEL_ADMIN')) OR
68 (p.action = 'VIEW' AND p.resource_type = 'SONG' AND p.scope = 'OWN' AND r.role_name IN ('ADMIN','ARTIST','LABEL_ADMIN')) OR
69
70 (p.action = 'CREATE' AND p.resource_type = 'SONG' AND p.scope = 'OWN' AND r.role_name IN ('ADMIN','ARTIST','LABEL_ADMIN')) OR
71 (p.action = 'EDIT' AND p.resource_type = 'SONG' AND p.scope = 'OWN' AND r.role_name IN ('ADMIN','ARTIST','LABEL_ADMIN')) OR
72 (p.action = 'DELETE' AND p.resource_type = 'SONG' AND p.scope = 'OWN' AND r.role_name IN ('ADMIN','ARTIST','LABEL_ADMIN')) OR
73
74 (p.action = 'EDIT' AND p.resource_type = 'SONG' AND p.scope = 'ANY' AND r.role_name IN ('ADMIN','LABEL_ADMIN')) OR
75 (p.action = 'DELETE' AND p.resource_type = 'SONG' AND p.scope = 'ANY' AND r.role_name IN ('ADMIN','LABEL_ADMIN')) OR
76
77 -- Album
78 (p.action = 'VIEW' AND p.resource_type = 'ALBUM' AND p.scope = 'PUBLIC' AND r.role_name IN ('ADMIN','ARTIST','LABEL_ADMIN','FREE_LISTENER','PREMIUM_LISTENER')) OR
79 (p.action = 'VIEW' AND p.resource_type = 'ALBUM' AND p.scope = 'SHARED' AND r.role_name IN ('ADMIN','ARTIST','LABEL_ADMIN','FREE_LISTENER','PREMIUM_LISTENER')) OR
80 (p.action = 'VIEW' AND p.resource_type = 'ALBUM' AND p.scope = 'OWN' AND r.role_name IN ('ADMIN','ARTIST','LABEL_ADMIN')) OR
81
82 (p.action = 'CREATE' AND p.resource_type = 'ALBUM' AND p.scope = 'OWN' AND r.role_name IN ('ADMIN','ARTIST','LABEL_ADMIN')) OR
83 (p.action = 'EDIT' AND p.resource_type = 'ALBUM' AND p.scope = 'OWN' AND r.role_name IN ('ADMIN','ARTIST','LABEL_ADMIN')) OR
84 (p.action = 'DELETE' AND p.resource_type = 'ALBUM' AND p.scope = 'OWN' AND r.role_name IN ('ADMIN','ARTIST','LABEL_ADMIN')) OR
85
86 (p.action = 'EDIT' AND p.resource_type = 'ALBUM' AND p.scope = 'ANY' AND r.role_name IN ('ADMIN','LABEL_ADMIN')) OR
87 (p.action = 'DELETE' AND p.resource_type = 'ALBUM' AND p.scope = 'ANY' AND r.role_name IN ('ADMIN','LABEL_ADMIN')) OR
88
89 -- Playlist
90 (p.action = 'VIEW' AND p.resource_type = 'PLAYLIST' AND p.scope = 'PUBLIC' AND r.role_name IN ('ADMIN','ARTIST','LABEL_ADMIN','FREE_LISTENER','PREMIUM_LISTENER')) OR
91 (p.action = 'VIEW' AND p.resource_type = 'PLAYLIST' AND p.scope = 'SHARED' AND r.role_name IN ('ADMIN','ARTIST','LABEL_ADMIN','FREE_LISTENER','PREMIUM_LISTENER')) OR
92 (p.action = 'VIEW' AND p.resource_type = 'PLAYLIST' AND p.scope = 'OWN' AND r.role_name IN ('ADMIN','ARTIST','LABEL_ADMIN','FREE_LISTENER','PREMIUM_LISTENER')) OR
93
94 (p.action = 'CREATE' AND p.resource_type = 'PLAYLIST' AND p.scope = 'OWN' AND r.role_name IN ('ADMIN','ARTIST','LABEL_ADMIN','FREE_LISTENER','PREMIUM_LISTENER')) OR
95 (p.action = 'EDIT' AND p.resource_type = 'PLAYLIST' AND p.scope = 'OWN' AND r.role_name IN ('ADMIN','ARTIST','LABEL_ADMIN','FREE_LISTENER','PREMIUM_LISTENER')) OR
96 (p.action = 'DELETE' AND p.resource_type = 'PLAYLIST' AND p.scope = 'OWN' AND r.role_name IN ('ADMIN','ARTIST','LABEL_ADMIN','FREE_LISTENER','PREMIUM_LISTENER')) OR
97
98 (p.action = 'ADD_SONG' AND p.resource_type = 'PLAYLIST' AND p.scope = 'OWN' AND r.role_name IN ('ADMIN','ARTIST','LABEL_ADMIN','FREE_LISTENER','PREMIUM_LISTENER')) OR
99 (p.action = 'REMOVE_SONG' AND p.resource_type = 'PLAYLIST' AND p.scope = 'OWN' AND r.role_name IN ('ADMIN','ARTIST','LABEL_ADMIN','FREE_LISTENER','PREMIUM_LISTENER')) OR
100 (p.action = 'SHARE' AND p.resource_type = 'PLAYLIST' AND p.scope = 'OWN' AND r.role_name IN ('ADMIN','ARTIST','LABEL_ADMIN','FREE_LISTENER','PREMIUM_LISTENER')) OR
101
102 (p.action = 'DELETE' AND p.resource_type = 'PLAYLIST' AND p.scope = 'ANY' AND r.role_name IN ('ADMIN','LABEL_ADMIN'))
103);
104
105
106INSERT INTO Labels (name)
107SELECT (
108 substr(md5(random()::text), 1, 12)
109
110 )
111FROM generate_series(1, 375);
112
113
114INSERT INTO Artists (user_id, display_name)
115SELECT
116 id,
117 substr(md5(random()::text), 1, 12)
118FROM Users
119ORDER BY id
120LIMIT 100000
121ON CONFLICT DO NOTHING;
122
123
124
125WITH selected_users AS (
126 SELECT id, row_number() OVER (ORDER BY id) AS rn
127 FROM Users
128 ORDER BY id
129 OFFSET 100000
130 LIMIT 375
131)
132INSERT INTO Label_Admins (label_id, user_id)
133SELECT
134 rn-100000 AS label_id,
135 id AS user_id
136FROM selected_users
137ON CONFLICT DO NOTHING;
138
139
140INSERT INTO User_Roles (user_id, role_id)
141
142SELECT id, 4
143FROM Users
144WHERE id BETWEEN 1 AND 100000
145
146UNION ALL
147
148SELECT id, 5
149FROM Users
150WHERE id BETWEEN 100001 AND 100375
151
152UNION ALL
153
154SELECT 1000000, 1
155
156UNION ALL
157
158SELECT
159 id,
160 CASE
161 WHEN (row_number() OVER (ORDER BY id)) % 3 = 0 THEN 3
162 ELSE 2
163 END
164FROM Users
165WHERE id BETWEEN 100376 AND 999999;
166
167
168-- with normal_listeners as
169-- (select id
170-- from users
171-- EXCEPT
172-- (select user_id
173-- from label_admins
174-- union
175-- select user_id
176-- from artists))
177--
178--
179-- select distinct r.role_name from users u
180--
181-- join user_roles ur on u.id = ur.user_id
182-- join roles r on r.id=ur.role_id
183-- join normal_listeners nl on nl.id=u.id
184-- where u.id<>1000000;
185
186
187WITH generated AS (
188 SELECT
189 -- follower
190 CASE
191 WHEN random() < 0.9 THEN
192 floor(random() * (1000000 - 100375))::bigint + 100376
193 ELSE
194 floor(random() * 100000)::bigint + 1
195 END AS follower_user_id,
196
197 -- followed
198 CASE
199 WHEN random() < 0.85 THEN -- artists
200 CASE
201 WHEN random() < 0.8 THEN
202 -- top 40 artists
203 floor(random() * 40)::bigint + 1
204 ELSE
205 -- remaining
206 floor(random() * (100000 - 40))::bigint + 41
207 END
208 ELSE
209 -- listeners
210 floor(random() * (1000000 - 100375))::bigint + 100376
211 END AS followed_user_id
212
213 FROM generate_series(1, 200000)
214)
215
216INSERT INTO Follows (follower_user_id, followed_user_id)
217SELECT DISTINCT *
218FROM generated
219WHERE follower_user_id <> followed_user_id
220LIMIT 100000;
221
222