-- v0 -> v11 (compatible with v3+): Latest revision CREATE TABLE whatsapp_poll_option_id ( bridge_id TEXT NOT NULL, msg_mxid TEXT NOT NULL, opt_id TEXT NOT NULL, opt_hash bytea NOT NULL CHECK ( length(opt_hash) = 32 ), PRIMARY KEY (bridge_id, msg_mxid, opt_id), CONSTRAINT whatsapp_poll_option_unique_hash UNIQUE (bridge_id, msg_mxid, opt_hash), CONSTRAINT message_mxid_fkey FOREIGN KEY (bridge_id, msg_mxid) REFERENCES message (bridge_id, mxid) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE TABLE whatsapp_history_sync_conversation ( bridge_id TEXT NOT NULL, user_login_id TEXT NOT NULL, chat_jid TEXT NOT NULL, last_message_timestamp BIGINT, archived BOOLEAN, pinned BOOLEAN, mute_end_time BIGINT, end_of_history_transfer_type INTEGER, ephemeral_expiration INTEGER, ephemeral_setting_timestamp BIGINT, marked_as_unread BOOLEAN, unread_count INTEGER, synced_login_ts BIGINT, PRIMARY KEY (bridge_id, user_login_id, chat_jid), CONSTRAINT whatsapp_history_sync_conversation_user_login_fkey FOREIGN KEY (bridge_id, user_login_id) REFERENCES user_login (bridge_id, id) ON UPDATE CASCADE ON DELETE CASCADE ); CREATE TABLE whatsapp_history_sync_message ( bridge_id TEXT NOT NULL, user_login_id TEXT NOT NULL, chat_jid TEXT NOT NULL, sender_jid TEXT NOT NULL, message_id TEXT NOT NULL, timestamp BIGINT NOT NULL, data bytea NOT NULL, inserted_time BIGINT NOT NULL, PRIMARY KEY (bridge_id, user_login_id, chat_jid, sender_jid, message_id), CONSTRAINT whatsapp_history_sync_message_user_login_fkey FOREIGN KEY (bridge_id, user_login_id) REFERENCES user_login (bridge_id, id) ON UPDATE CASCADE ON DELETE CASCADE, CONSTRAINT whatsapp_history_sync_message_conversation_fkey FOREIGN KEY (bridge_id, user_login_id, chat_jid) REFERENCES whatsapp_history_sync_conversation (bridge_id, user_login_id, chat_jid) ON UPDATE CASCADE ON DELETE CASCADE ); CREATE TABLE whatsapp_media_backfill_request ( bridge_id TEXT NOT NULL, user_login_id TEXT NOT NULL, message_id TEXT NOT NULL, _part_id TEXT NOT NULL DEFAULT '', portal_id TEXT NOT NULL, portal_receiver TEXT NOT NULL, media_key bytea, status INTEGER NOT NULL, error TEXT NOT NULL, PRIMARY KEY (bridge_id, user_login_id, message_id), CONSTRAINT whatsapp_media_backfill_request_user_login_fkey FOREIGN KEY (bridge_id, user_login_id) REFERENCES user_login (bridge_id, id) ON UPDATE CASCADE ON DELETE CASCADE, CONSTRAINT whatsapp_media_backfill_request_portal_fkey FOREIGN KEY (bridge_id, portal_id, portal_receiver) REFERENCES portal (bridge_id, id, receiver) ON UPDATE CASCADE ON DELETE CASCADE, CONSTRAINT whatsapp_media_backfill_request_message_fkey FOREIGN KEY (bridge_id, portal_receiver, message_id, _part_id) REFERENCES message (bridge_id, room_receiver, id, part_id) ON UPDATE CASCADE ON DELETE CASCADE ); CREATE INDEX whatsapp_media_backfill_request_portal_idx ON whatsapp_media_backfill_request (bridge_id, portal_id, portal_receiver); CREATE INDEX whatsapp_media_backfill_request_message_idx ON whatsapp_media_backfill_request (bridge_id, portal_receiver, message_id, _part_id); CREATE TABLE whatsapp_history_sync_notification ( -- only: sqlite (line commented) -- rowid INTEGER PRIMARY KEY, -- only: postgres rowid BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, bridge_id TEXT NOT NULL, user_login_id TEXT NOT NULL, data bytea NOT NULL, CONSTRAINT whatsapp_history_sync_notification_user_login_fkey FOREIGN KEY (bridge_id, user_login_id) REFERENCES user_login (bridge_id, id) ON UPDATE CASCADE ON DELETE CASCADE ); CREATE INDEX whatsapp_history_sync_notification_login_idx ON whatsapp_history_sync_notification (bridge_id, user_login_id); CREATE TABLE whatsapp_avatar_cache ( entity_jid TEXT NOT NULL, avatar_id TEXT NOT NULL, direct_path TEXT NOT NULL, expiry BIGINT NOT NULL, gone BOOLEAN NOT NULL DEFAULT false, PRIMARY KEY (entity_jid, avatar_id) ); CREATE TABLE whatsapp_matrixrtc_call ( bridge_id TEXT NOT NULL, user_login_id TEXT NOT NULL, wa_call_id TEXT NOT NULL, room_id TEXT NOT NULL, portal_id TEXT NOT NULL, portal_receiver TEXT NOT NULL, peer_jid TEXT NOT NULL, direction TEXT NOT NULL, media_kind TEXT NOT NULL, focus_type TEXT NOT NULL, livekit_service_url TEXT NOT NULL, livekit_room TEXT, matrix_participant_mxid TEXT, matrix_session_id TEXT, selected_publisher_id TEXT, bridge_membership_event_id TEXT, selected_membership_event_id TEXT, bridge_hand_raise_event_id TEXT, selected_hand_raise_event_id TEXT, audio_policy TEXT NOT NULL, state TEXT NOT NULL, created_ts BIGINT NOT NULL, joined_ts BIGINT, answered_ts BIGINT, ended_ts BIGINT, end_reason TEXT, last_error TEXT, PRIMARY KEY (bridge_id, user_login_id, wa_call_id), CONSTRAINT whatsapp_matrixrtc_call_user_login_fkey FOREIGN KEY (bridge_id, user_login_id) REFERENCES user_login (bridge_id, id) ON UPDATE CASCADE ON DELETE CASCADE, CONSTRAINT whatsapp_matrixrtc_call_portal_fkey FOREIGN KEY (bridge_id, portal_id, portal_receiver) REFERENCES portal (bridge_id, id, receiver) ON UPDATE CASCADE ON DELETE CASCADE ); CREATE INDEX whatsapp_matrixrtc_call_room_idx ON whatsapp_matrixrtc_call (bridge_id, room_id, state);