Merge ~pappacena/launchpad:snap-pillar-db-indexes into launchpad:db-devel

Proposed by Thiago F. Pappacena
Status: Superseded
Proposed branch: ~pappacena/launchpad:snap-pillar-db-indexes
Merge into: launchpad:db-devel
Prerequisite: ~pappacena/launchpad:snap-pillar-db
Diff against target: 122 lines (+32/-13)
4 files modified
database/schema/patch-2210-26-1.sql (+11/-13)
database/schema/patch-2210-26-2.sql (+14/-0)
database/schema/security.cfg (+3/-0)
lib/lp/registry/personmerge.py (+4/-0)
Reviewer Review Type Date Requested Status
Launchpad code reviewers Pending
Review via email: mp+398359@code.launchpad.net

Commit message

Snap privacy indexes and CHECK constraint validation

To post a comment you must log in.

Unmerged commits

c8875c6... by Thiago F. Pappacena

Snap privacy indexes and CHECK constraint validation

a44145f... by Thiago F. Pappacena

Skipping personmerge sanity checks on SnapSubscription (while we dont have this entity in place)

bcdb89b... by Thiago F. Pappacena

Minor adjustments, and moving large index/constraint creation to another patch

0510967... by Thiago F. Pappacena

Fixing ambiguity in snap_denorm_access

08fb5e5... by Thiago F. Pappacena

Adding Snap.information_type column

9c49e1b... by Thiago F. Pappacena

Adding SnapSubscription model

f2abd3c... by Thiago F. Pappacena

Adding access_policy and access_grants caches to Snap table

ea33cf9... by Thiago F. Pappacena

Adding Snap.project for private Snaps' optional pillars

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/database/schema/patch-2210-26-1.sql b/database/schema/patch-2210-26-1.sql
index 5511d91..90fdbf3 100644
--- a/database/schema/patch-2210-26-1.sql
+++ b/database/schema/patch-2210-26-1.sql
@@ -18,8 +18,8 @@ COMMENT ON COLUMN Snap.information_type IS
1818
19CREATE TABLE SnapSubscription (19CREATE TABLE SnapSubscription (
20 id serial PRIMARY KEY,20 id serial PRIMARY KEY,
21 person integer NOT NULL REFERENCES Person(id),
22 snap integer NOT NULL REFERENCES Snap(id),21 snap integer NOT NULL REFERENCES Snap(id),
22 person integer NOT NULL REFERENCES Person(id),
23 date_created timestamp without time zone DEFAULT (CURRENT_TIMESTAMP AT TIME ZONE 'UTC') NOT NULL,23 date_created timestamp without time zone DEFAULT (CURRENT_TIMESTAMP AT TIME ZONE 'UTC') NOT NULL,
24 subscribed_by integer NOT NULL REFERENCES Person(id)24 subscribed_by integer NOT NULL REFERENCES Person(id)
25);25);
@@ -41,17 +41,17 @@ CREATE UNIQUE INDEX snapsubscription__person_snap__key
41CREATE INDEX snapsubscription__person__idx41CREATE INDEX snapsubscription__person__idx
42 ON SnapSubscription(person);42 ON SnapSubscription(person);
4343
44CREATE INDEX snapsubscription__subscribed_by__idx
45 ON SnapSubscription(subscribed_by);
46
44ALTER TABLE AccessArtifact47ALTER TABLE AccessArtifact
45 ADD COLUMN snap integer REFERENCES snap;48 ADD COLUMN snap integer REFERENCES snap;
4649
47CREATE UNIQUE INDEX accessartifact__snap__key
48 ON AccessArtifact(snap) WHERE snap IS NOT NULL;
49
5050
51ALTER TABLE AccessArtifact DROP CONSTRAINT has_artifact;51ALTER TABLE AccessArtifact DROP CONSTRAINT has_artifact;
52ALTER TABLE AccessArtifact52ALTER TABLE AccessArtifact
53 ADD CONSTRAINT has_artifact CHECK (53 ADD CONSTRAINT has_artifact CHECK (
54 (null_count(ARRAY[bug, branch, gitrepository, snap, specification]) = 4));54 (null_count(ARRAY[bug, branch, gitrepository, snap, specification]) = 4)) NOT VALID;
5555
5656
57CREATE OR REPLACE FUNCTION snap_denorm_access(snap_id integer)57CREATE OR REPLACE FUNCTION snap_denorm_access(snap_id integer)
@@ -60,17 +60,15 @@ $$
60DECLARE60DECLARE
61 info_type integer;61 info_type integer;
62BEGIN62BEGIN
63 -- XXX pappacena 2021-002-12: Once we finish filling "information_type" and63 -- XXX pappacena 2021-02-12: Once we finish filling "information_type" and
64 -- deprecate the usage of "public" column at code level, we will be able to64 -- deprecate the usage of "public" column at code level, we will be able to
65 -- drop the "private" column usage here.65 -- drop the "private" column usage here.
66 SELECT66 SELECT
67 CASE snap.information_type67 COALESCE(
68 WHEN NULL THEN68 snap.information_type,
69 -- information type: 1 = public; 5 = proprietary69 -- information type: 1 = public; 5 = proprietary
70 CASE WHEN snap.private THEN 5 ELSE 1 END70 CASE WHEN snap.private THEN 5 ELSE 1 END
71 ELSE71 )
72 snap.information_type
73 END
74 INTO info_type72 INTO info_type
75 FROM snap WHERE id = snap_id;73 FROM snap WHERE id = snap_id;
7674
diff --git a/database/schema/patch-2210-26-2.sql b/database/schema/patch-2210-26-2.sql
77new file mode 10064475new file mode 100644
index 0000000..ab6e0a3
--- /dev/null
+++ b/database/schema/patch-2210-26-2.sql
@@ -0,0 +1,14 @@
1-- Copyright 2021 Canonical Ltd. This software is licensed under the
2-- GNU Affero General Public License version 3 (see the file LICENSE).
3
4SET client_min_messages=ERROR;
5
6CREATE INDEX snap__project__idx ON Snap(project) WHERE project IS NOT NULL;
7
8CREATE UNIQUE INDEX accessartifact__snap__key
9 ON AccessArtifact(snap) WHERE snap IS NOT NULL;
10
11ALTER TABLE AccessArtifact VALIDATE CONSTRAINT has_artifact;
12
13
14INSERT INTO LaunchpadDatabaseRevision VALUES (2210, 26, 2);
diff --git a/database/schema/security.cfg b/database/schema/security.cfg
index bf4b81c..e343a5f 100644
--- a/database/schema/security.cfg
+++ b/database/schema/security.cfg
@@ -302,6 +302,7 @@ public.snapbuild = SELECT, INSERT, UPDATE, DELETE
302public.snapbuildjob = SELECT, INSERT, UPDATE, DELETE302public.snapbuildjob = SELECT, INSERT, UPDATE, DELETE
303public.snapfile = SELECT, INSERT, UPDATE, DELETE303public.snapfile = SELECT, INSERT, UPDATE, DELETE
304public.snapjob = SELECT, INSERT, UPDATE, DELETE304public.snapjob = SELECT, INSERT, UPDATE, DELETE
305public.snapsubscription = SELECT, INSERT, UPDATE, DELETE
305public.snappydistroseries = SELECT, INSERT, UPDATE, DELETE306public.snappydistroseries = SELECT, INSERT, UPDATE, DELETE
306public.snappyseries = SELECT, INSERT, UPDATE, DELETE307public.snappyseries = SELECT, INSERT, UPDATE, DELETE
307public.sourcepackageformatselection = SELECT308public.sourcepackageformatselection = SELECT
@@ -2246,6 +2247,7 @@ type=user
22462247
2247[person-merge-job]2248[person-merge-job]
2248groups=script2249groups=script
2250public.accesspolicyartifact = SELECT
2249public.accessartifactgrant = SELECT, UPDATE, DELETE2251public.accessartifactgrant = SELECT, UPDATE, DELETE
2250public.accesspolicy = SELECT, UPDATE, DELETE2252public.accesspolicy = SELECT, UPDATE, DELETE
2251public.accesspolicygrant = SELECT, UPDATE, DELETE2253public.accesspolicygrant = SELECT, UPDATE, DELETE
@@ -2363,6 +2365,7 @@ public.signedcodeofconduct = SELECT, UPDATE
2363public.snap = SELECT, UPDATE2365public.snap = SELECT, UPDATE
2364public.snapbase = SELECT, UPDATE2366public.snapbase = SELECT, UPDATE
2365public.snapbuild = SELECT, UPDATE2367public.snapbuild = SELECT, UPDATE
2368public.snapsubscription = SELECT, UPDATE, DELETE
2366public.snappyseries = SELECT, UPDATE2369public.snappyseries = SELECT, UPDATE
2367public.sourcepackagename = SELECT2370public.sourcepackagename = SELECT
2368public.sourcepackagepublishinghistory = SELECT, UPDATE2371public.sourcepackagepublishinghistory = SELECT, UPDATE
diff --git a/lib/lp/registry/personmerge.py b/lib/lp/registry/personmerge.py
index 7873a61..50e0f91 100644
--- a/lib/lp/registry/personmerge.py
+++ b/lib/lp/registry/personmerge.py
@@ -917,6 +917,10 @@ def merge_people(from_person, to_person, reviewer, delete=False):
917 _mergeSnap(cur, from_person, to_person)917 _mergeSnap(cur, from_person, to_person)
918 skip.append(('snap', 'owner'))918 skip.append(('snap', 'owner'))
919919
920 # XXX pappacena 2021-02-18: add tests for this once we have
921 # SnapSubscription model in place.
922 skip.append(('snapsubscription', 'person'))
923
920 _mergeOCIRecipe(cur, from_person, to_person)924 _mergeOCIRecipe(cur, from_person, to_person)
921 skip.append(('ocirecipe', 'owner'))925 skip.append(('ocirecipe', 'owner'))
922926