/* Copyright 2022 The Matrix.org Foundation C.I.C * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ -- We're going to stop populating event_edges.room_id and event_edges.is_state, -- which means we now need to give them defaults. -- -- We also take the opportunity to: -- - drop any rows with is_state=True (these were populated a long time ago, but -- are no longer used.) -- - drop any rows which do not correspond to entries in `events` -- - tighten the unique index so that it applies just to (event_id, prev_event_id) -- - drop the "ev_edges_id" index, which is redundant to the above. -- - add a foreign key constraint from event_id to `events` CREATE TABLE new_event_edges ( event_id TEXT NOT NULL, prev_event_id TEXT NOT NULL, room_id TEXT NULL, is_state BOOL NOT NULL DEFAULT 0, FOREIGN KEY(event_id) REFERENCES events(event_id) ); INSERT INTO new_event_edges SELECT ee.event_id, ee.prev_event_id, ee.room_id, ee.is_state FROM event_edges ee JOIN events ev USING (event_id) WHERE NOT ee.is_state; DROP TABLE event_edges; ALTER TABLE new_event_edges RENAME TO event_edges; CREATE UNIQUE INDEX event_edges_event_id_prev_event_id_idx ON event_edges (event_id, prev_event_id); CREATE INDEX ev_edges_prev_id ON event_edges (prev_event_id);