138 lines
4.7 KiB
Python
138 lines
4.7 KiB
Python
|
# Migration for Matrix Store
|
||
|
|
||
|
from datetime import datetime
|
||
|
|
||
|
def migration(conn):
|
||
|
with conn.cursor() as cursor:
|
||
|
# Create accounts table
|
||
|
cursor.execute("""
|
||
|
CREATE TABLE IF NOT EXISTS accounts (
|
||
|
id INTEGER PRIMARY KEY,
|
||
|
user_id VARCHAR NOT NULL,
|
||
|
device_id VARCHAR NOT NULL,
|
||
|
shared_account INTEGER NOT NULL,
|
||
|
pickle VARCHAR NOT NULL
|
||
|
);
|
||
|
""")
|
||
|
|
||
|
# Create device_keys table
|
||
|
cursor.execute("""
|
||
|
CREATE TABLE IF NOT EXISTS device_keys (
|
||
|
device_id TEXT PRIMARY KEY,
|
||
|
account_id INTEGER NOT NULL,
|
||
|
user_id TEXT NOT NULL,
|
||
|
display_name TEXT,
|
||
|
deleted BOOLEAN NOT NULL DEFAULT 0,
|
||
|
UNIQUE (account_id, user_id, device_id),
|
||
|
FOREIGN KEY (account_id) REFERENCES accounts(id) ON DELETE CASCADE
|
||
|
);
|
||
|
|
||
|
CREATE TABLE IF NOT EXISTS keys (
|
||
|
key_type TEXT NOT NULL,
|
||
|
key TEXT NOT NULL,
|
||
|
device_id VARCHAR NOT NULL,
|
||
|
UNIQUE (key_type, device_id),
|
||
|
FOREIGN KEY (device_id) REFERENCES device_keys(device_id) ON DELETE CASCADE
|
||
|
);
|
||
|
""")
|
||
|
|
||
|
# Create device_trust_state table
|
||
|
cursor.execute("""
|
||
|
CREATE TABLE IF NOT EXISTS device_trust_state (
|
||
|
device_id VARCHAR PRIMARY KEY,
|
||
|
state INTEGER NOT NULL,
|
||
|
FOREIGN KEY(device_id) REFERENCES device_keys(device_id) ON DELETE CASCADE
|
||
|
);
|
||
|
""")
|
||
|
|
||
|
# Create olm_sessions table
|
||
|
cursor.execute("""
|
||
|
CREATE SEQUENCE IF NOT EXISTS olm_sessions_id_seq START 1;
|
||
|
|
||
|
CREATE TABLE IF NOT EXISTS olm_sessions (
|
||
|
id INTEGER PRIMARY KEY DEFAULT nextval('olm_sessions_id_seq'),
|
||
|
account_id INTEGER NOT NULL,
|
||
|
sender_key TEXT NOT NULL,
|
||
|
session BLOB NOT NULL,
|
||
|
session_id VARCHAR NOT NULL,
|
||
|
creation_time TIMESTAMP NOT NULL,
|
||
|
last_usage_date TIMESTAMP NOT NULL,
|
||
|
FOREIGN KEY (account_id) REFERENCES accounts (id) ON DELETE CASCADE
|
||
|
);
|
||
|
""")
|
||
|
|
||
|
# Create inbound_group_sessions table
|
||
|
cursor.execute("""
|
||
|
CREATE SEQUENCE IF NOT EXISTS inbound_group_sessions_id_seq START 1;
|
||
|
|
||
|
CREATE TABLE IF NOT EXISTS inbound_group_sessions (
|
||
|
id INTEGER PRIMARY KEY DEFAULT nextval('inbound_group_sessions_id_seq'),
|
||
|
account_id INTEGER NOT NULL,
|
||
|
session TEXT NOT NULL,
|
||
|
fp_key TEXT NOT NULL,
|
||
|
sender_key TEXT NOT NULL,
|
||
|
room_id TEXT NOT NULL,
|
||
|
UNIQUE (account_id, sender_key, fp_key, room_id),
|
||
|
FOREIGN KEY (account_id) REFERENCES accounts(id) ON DELETE CASCADE
|
||
|
);
|
||
|
|
||
|
CREATE TABLE IF NOT EXISTS forwarded_chains (
|
||
|
id INTEGER PRIMARY KEY,
|
||
|
session_id INTEGER NOT NULL,
|
||
|
sender_key TEXT NOT NULL,
|
||
|
FOREIGN KEY (session_id) REFERENCES inbound_group_sessions(id) ON DELETE CASCADE
|
||
|
);
|
||
|
""")
|
||
|
|
||
|
# Create outbound_group_sessions table
|
||
|
cursor.execute("""
|
||
|
CREATE TABLE IF NOT EXISTS outbound_group_sessions (
|
||
|
id INTEGER PRIMARY KEY,
|
||
|
account_id INTEGER NOT NULL,
|
||
|
room_id VARCHAR NOT NULL,
|
||
|
session_id VARCHAR NOT NULL UNIQUE,
|
||
|
session BLOB NOT NULL,
|
||
|
FOREIGN KEY(account_id) REFERENCES accounts(id) ON DELETE CASCADE
|
||
|
);
|
||
|
""")
|
||
|
|
||
|
# Create outgoing_key_requests table
|
||
|
cursor.execute("""
|
||
|
CREATE TABLE IF NOT EXISTS outgoing_key_requests (
|
||
|
id INTEGER PRIMARY KEY,
|
||
|
account_id INTEGER NOT NULL,
|
||
|
request_id TEXT NOT NULL,
|
||
|
session_id TEXT NOT NULL,
|
||
|
room_id TEXT NOT NULL,
|
||
|
algorithm TEXT NOT NULL,
|
||
|
FOREIGN KEY (account_id) REFERENCES accounts(id) ON DELETE CASCADE,
|
||
|
UNIQUE (account_id, request_id)
|
||
|
);
|
||
|
|
||
|
""")
|
||
|
|
||
|
# Create encrypted_rooms table
|
||
|
cursor.execute("""
|
||
|
CREATE TABLE IF NOT EXISTS encrypted_rooms (
|
||
|
room_id TEXT NOT NULL,
|
||
|
account_id INTEGER NOT NULL,
|
||
|
PRIMARY KEY (room_id, account_id),
|
||
|
FOREIGN KEY (account_id) REFERENCES accounts(id) ON DELETE CASCADE
|
||
|
);
|
||
|
""")
|
||
|
|
||
|
# Create sync_tokens table
|
||
|
cursor.execute("""
|
||
|
CREATE TABLE IF NOT EXISTS sync_tokens (
|
||
|
account_id INTEGER PRIMARY KEY,
|
||
|
token TEXT NOT NULL,
|
||
|
FOREIGN KEY (account_id) REFERENCES accounts(id) ON DELETE CASCADE
|
||
|
);
|
||
|
""")
|
||
|
|
||
|
cursor.execute(
|
||
|
"INSERT INTO migrations (id, timestamp) VALUES (2, ?)",
|
||
|
(datetime.now(),)
|
||
|
)
|
||
|
|
||
|
conn.commit()
|