migration_2.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. # Migration for Matrix Store
  2. from datetime import datetime
  3. def migration(conn):
  4. with conn.cursor() as cursor:
  5. # Create accounts table
  6. cursor.execute("""
  7. CREATE TABLE IF NOT EXISTS accounts (
  8. id INTEGER PRIMARY KEY,
  9. user_id VARCHAR NOT NULL,
  10. device_id VARCHAR NOT NULL,
  11. shared_account INTEGER NOT NULL,
  12. pickle VARCHAR NOT NULL
  13. );
  14. """)
  15. # Create device_keys table
  16. cursor.execute("""
  17. CREATE TABLE IF NOT EXISTS device_keys (
  18. device_id TEXT PRIMARY KEY,
  19. account_id INTEGER NOT NULL,
  20. user_id TEXT NOT NULL,
  21. display_name TEXT,
  22. deleted BOOLEAN NOT NULL DEFAULT 0,
  23. UNIQUE (account_id, user_id, device_id),
  24. FOREIGN KEY (account_id) REFERENCES accounts(id) ON DELETE CASCADE
  25. );
  26. CREATE TABLE IF NOT EXISTS keys (
  27. key_type TEXT NOT NULL,
  28. key TEXT NOT NULL,
  29. device_id VARCHAR NOT NULL,
  30. UNIQUE (key_type, device_id),
  31. FOREIGN KEY (device_id) REFERENCES device_keys(device_id) ON DELETE CASCADE
  32. );
  33. """)
  34. # Create device_trust_state table
  35. cursor.execute("""
  36. CREATE TABLE IF NOT EXISTS device_trust_state (
  37. device_id VARCHAR PRIMARY KEY,
  38. state INTEGER NOT NULL,
  39. FOREIGN KEY(device_id) REFERENCES device_keys(device_id) ON DELETE CASCADE
  40. );
  41. """)
  42. # Create olm_sessions table
  43. cursor.execute("""
  44. CREATE SEQUENCE IF NOT EXISTS olm_sessions_id_seq START 1;
  45. CREATE TABLE IF NOT EXISTS olm_sessions (
  46. id INTEGER PRIMARY KEY DEFAULT nextval('olm_sessions_id_seq'),
  47. account_id INTEGER NOT NULL,
  48. sender_key TEXT NOT NULL,
  49. session BLOB NOT NULL,
  50. session_id VARCHAR NOT NULL,
  51. creation_time TIMESTAMP NOT NULL,
  52. last_usage_date TIMESTAMP NOT NULL,
  53. FOREIGN KEY (account_id) REFERENCES accounts (id) ON DELETE CASCADE
  54. );
  55. """)
  56. # Create inbound_group_sessions table
  57. cursor.execute("""
  58. CREATE SEQUENCE IF NOT EXISTS inbound_group_sessions_id_seq START 1;
  59. CREATE TABLE IF NOT EXISTS inbound_group_sessions (
  60. id INTEGER PRIMARY KEY DEFAULT nextval('inbound_group_sessions_id_seq'),
  61. account_id INTEGER NOT NULL,
  62. session TEXT NOT NULL,
  63. fp_key TEXT NOT NULL,
  64. sender_key TEXT NOT NULL,
  65. room_id TEXT NOT NULL,
  66. UNIQUE (account_id, sender_key, fp_key, room_id),
  67. FOREIGN KEY (account_id) REFERENCES accounts(id) ON DELETE CASCADE
  68. );
  69. CREATE TABLE IF NOT EXISTS forwarded_chains (
  70. id INTEGER PRIMARY KEY,
  71. session_id INTEGER NOT NULL,
  72. sender_key TEXT NOT NULL,
  73. FOREIGN KEY (session_id) REFERENCES inbound_group_sessions(id) ON DELETE CASCADE
  74. );
  75. """)
  76. # Create outbound_group_sessions table
  77. cursor.execute("""
  78. CREATE TABLE IF NOT EXISTS outbound_group_sessions (
  79. id INTEGER PRIMARY KEY,
  80. account_id INTEGER NOT NULL,
  81. room_id VARCHAR NOT NULL,
  82. session_id VARCHAR NOT NULL UNIQUE,
  83. session BLOB NOT NULL,
  84. FOREIGN KEY(account_id) REFERENCES accounts(id) ON DELETE CASCADE
  85. );
  86. """)
  87. # Create outgoing_key_requests table
  88. cursor.execute("""
  89. CREATE TABLE IF NOT EXISTS outgoing_key_requests (
  90. id INTEGER PRIMARY KEY,
  91. account_id INTEGER NOT NULL,
  92. request_id TEXT NOT NULL,
  93. session_id TEXT NOT NULL,
  94. room_id TEXT NOT NULL,
  95. algorithm TEXT NOT NULL,
  96. FOREIGN KEY (account_id) REFERENCES accounts(id) ON DELETE CASCADE,
  97. UNIQUE (account_id, request_id)
  98. );
  99. """)
  100. # Create encrypted_rooms table
  101. cursor.execute("""
  102. CREATE TABLE IF NOT EXISTS encrypted_rooms (
  103. room_id TEXT NOT NULL,
  104. account_id INTEGER NOT NULL,
  105. PRIMARY KEY (room_id, account_id),
  106. FOREIGN KEY (account_id) REFERENCES accounts(id) ON DELETE CASCADE
  107. );
  108. """)
  109. # Create sync_tokens table
  110. cursor.execute("""
  111. CREATE TABLE IF NOT EXISTS sync_tokens (
  112. account_id INTEGER PRIMARY KEY,
  113. token TEXT NOT NULL,
  114. FOREIGN KEY (account_id) REFERENCES accounts(id) ON DELETE CASCADE
  115. );
  116. """)
  117. cursor.execute(
  118. "INSERT INTO migrations (id, timestamp) VALUES (2, ?)",
  119. (datetime.now(),)
  120. )
  121. conn.commit()