/* 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. */ -- The thread_id columns can now be made non-nullable. -- -- SQLite doesn't support modifying columns to an existing table, so it must -- be recreated. -- Create the new tables. CREATE TABLE event_push_actions_staging_new ( event_id TEXT NOT NULL, user_id TEXT NOT NULL, actions TEXT NOT NULL, notif SMALLINT NOT NULL, highlight SMALLINT NOT NULL, unread SMALLINT, thread_id TEXT, inserted_ts BIGINT, CONSTRAINT event_push_actions_staging_thread_id CHECK (thread_id is NOT NULL) ); CREATE TABLE event_push_actions_new ( room_id TEXT NOT NULL, event_id TEXT NOT NULL, user_id TEXT NOT NULL, profile_tag VARCHAR(32), actions TEXT NOT NULL, topological_ordering BIGINT, stream_ordering BIGINT, notif SMALLINT, highlight SMALLINT, unread SMALLINT, thread_id TEXT, CONSTRAINT event_id_user_id_profile_tag_uniqueness UNIQUE (room_id, event_id, user_id, profile_tag), CONSTRAINT event_push_actions_thread_id CHECK (thread_id is NOT NULL) ); CREATE TABLE event_push_summary_new ( user_id TEXT NOT NULL, room_id TEXT NOT NULL, notif_count BIGINT NOT NULL, stream_ordering BIGINT NOT NULL, unread_count BIGINT, last_receipt_stream_ordering BIGINT, thread_id TEXT, CONSTRAINT event_push_summary_thread_id CHECK (thread_id is NOT NULL) ); -- Copy the data. INSERT INTO event_push_actions_staging_new (event_id, user_id, actions, notif, highlight, unread, thread_id, inserted_ts) SELECT event_id, user_id, actions, notif, highlight, unread, thread_id, inserted_ts FROM event_push_actions_staging; INSERT INTO event_push_actions_new (room_id, event_id, user_id, profile_tag, actions, topological_ordering, stream_ordering, notif, highlight, unread, thread_id) SELECT room_id, event_id, user_id, profile_tag, actions, topological_ordering, stream_ordering, notif, highlight, unread, thread_id FROM event_push_actions; INSERT INTO event_push_summary_new (user_id, room_id, notif_count, stream_ordering, unread_count, last_receipt_stream_ordering, thread_id) SELECT user_id, room_id, notif_count, stream_ordering, unread_count, last_receipt_stream_ordering, thread_id FROM event_push_summary; -- Drop the old tables. DROP TABLE event_push_actions_staging; DROP TABLE event_push_actions; DROP TABLE event_push_summary; -- Rename the tables. ALTER TABLE event_push_actions_staging_new RENAME TO event_push_actions_staging; ALTER TABLE event_push_actions_new RENAME TO event_push_actions; ALTER TABLE event_push_summary_new RENAME TO event_push_summary; -- Recreate the indexes. CREATE INDEX event_push_actions_staging_id ON event_push_actions_staging(event_id); CREATE INDEX event_push_actions_highlights_index ON event_push_actions (user_id, room_id, topological_ordering, stream_ordering); CREATE INDEX event_push_actions_rm_tokens on event_push_actions( user_id, room_id, topological_ordering, stream_ordering ); CREATE INDEX event_push_actions_room_id_user_id on event_push_actions(room_id, user_id); CREATE INDEX event_push_actions_stream_ordering on event_push_actions( stream_ordering, user_id ); CREATE INDEX event_push_actions_u_highlight ON event_push_actions (user_id, stream_ordering); CREATE UNIQUE INDEX event_push_summary_unique_index2 ON event_push_summary (user_id, room_id, thread_id) ; -- Recreate some indexes in the background, by re-running the background updates -- from 72/02event_push_actions_index.sql and 72/06thread_notifications.sql. INSERT INTO background_updates (ordering, update_name, progress_json) VALUES (7706, 'event_push_summary_unique_index2', '{}') ON CONFLICT (update_name) DO UPDATE SET progress_json = '{}'; INSERT INTO background_updates (ordering, update_name, progress_json) VALUES (7706, 'event_push_actions_stream_highlight_index', '{}') ON CONFLICT (update_name) DO UPDATE SET progress_json = '{}';