00-latest-revision.sql 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. -- v0 -> v50: Latest revision
  2. CREATE TABLE "user" (
  3. mxid TEXT PRIMARY KEY,
  4. username TEXT UNIQUE,
  5. agent SMALLINT,
  6. device SMALLINT,
  7. management_room TEXT,
  8. space_room TEXT,
  9. phone_last_seen BIGINT,
  10. phone_last_pinged BIGINT,
  11. timezone TEXT
  12. );
  13. CREATE TABLE portal (
  14. jid TEXT,
  15. receiver TEXT,
  16. mxid TEXT UNIQUE,
  17. name TEXT NOT NULL,
  18. name_set BOOLEAN NOT NULL DEFAULT false,
  19. topic TEXT NOT NULL,
  20. topic_set BOOLEAN NOT NULL DEFAULT false,
  21. avatar TEXT NOT NULL,
  22. avatar_url TEXT,
  23. avatar_set BOOLEAN NOT NULL DEFAULT false,
  24. encrypted BOOLEAN NOT NULL DEFAULT false,
  25. first_event_id TEXT,
  26. next_batch_id TEXT,
  27. relay_user_id TEXT,
  28. expiration_time BIGINT NOT NULL DEFAULT 0 CHECK (expiration_time >= 0 AND expiration_time < 4294967296),
  29. PRIMARY KEY (jid, receiver)
  30. );
  31. CREATE TABLE puppet (
  32. username TEXT PRIMARY KEY,
  33. displayname TEXT,
  34. name_quality SMALLINT,
  35. avatar TEXT,
  36. avatar_url TEXT,
  37. name_set BOOLEAN NOT NULL DEFAULT false,
  38. avatar_set BOOLEAN NOT NULL DEFAULT false,
  39. last_sync BIGINT NOT NULL DEFAULT 0,
  40. custom_mxid TEXT,
  41. access_token TEXT,
  42. next_batch TEXT,
  43. enable_presence BOOLEAN NOT NULL DEFAULT true,
  44. enable_receipts BOOLEAN NOT NULL DEFAULT true
  45. );
  46. -- only: postgres
  47. CREATE TYPE error_type AS ENUM ('', 'decryption_failed', 'media_not_found');
  48. CREATE TABLE message (
  49. chat_jid TEXT,
  50. chat_receiver TEXT,
  51. jid TEXT,
  52. mxid TEXT UNIQUE,
  53. sender TEXT,
  54. timestamp BIGINT,
  55. sent BOOLEAN,
  56. error error_type,
  57. type TEXT,
  58. broadcast_list_jid TEXT,
  59. PRIMARY KEY (chat_jid, chat_receiver, jid),
  60. FOREIGN KEY (chat_jid, chat_receiver) REFERENCES portal(jid, receiver) ON DELETE CASCADE
  61. );
  62. CREATE TABLE reaction (
  63. chat_jid TEXT,
  64. chat_receiver TEXT,
  65. target_jid TEXT,
  66. sender TEXT,
  67. mxid TEXT NOT NULL,
  68. jid TEXT NOT NULL,
  69. PRIMARY KEY (chat_jid, chat_receiver, target_jid, sender),
  70. FOREIGN KEY (chat_jid, chat_receiver, target_jid) REFERENCES message(chat_jid, chat_receiver, jid)
  71. ON DELETE CASCADE ON UPDATE CASCADE
  72. );
  73. CREATE TABLE disappearing_message (
  74. room_id TEXT,
  75. event_id TEXT,
  76. expire_in BIGINT NOT NULL,
  77. expire_at BIGINT,
  78. PRIMARY KEY (room_id, event_id)
  79. );
  80. CREATE TABLE user_portal (
  81. user_mxid TEXT,
  82. portal_jid TEXT,
  83. portal_receiver TEXT,
  84. last_read_ts BIGINT NOT NULL DEFAULT 0,
  85. in_space BOOLEAN NOT NULL DEFAULT false,
  86. PRIMARY KEY (user_mxid, portal_jid, portal_receiver),
  87. FOREIGN KEY (user_mxid) REFERENCES "user"(mxid) ON UPDATE CASCADE ON DELETE CASCADE,
  88. FOREIGN KEY (portal_jid, portal_receiver) REFERENCES portal(jid, receiver) ON UPDATE CASCADE ON DELETE CASCADE
  89. );
  90. CREATE TABLE backfill_queue (
  91. queue_id INTEGER PRIMARY KEY
  92. -- only: postgres
  93. GENERATED ALWAYS AS IDENTITY
  94. ,
  95. user_mxid TEXT,
  96. type INTEGER NOT NULL,
  97. priority INTEGER NOT NULL,
  98. portal_jid TEXT,
  99. portal_receiver TEXT,
  100. time_start TIMESTAMP,
  101. dispatch_time TIMESTAMP,
  102. completed_at TIMESTAMP,
  103. batch_delay INTEGER,
  104. max_batch_events INTEGER NOT NULL,
  105. max_total_events INTEGER,
  106. FOREIGN KEY (user_mxid) REFERENCES "user" (mxid) ON DELETE CASCADE ON UPDATE CASCADE,
  107. FOREIGN KEY (portal_jid, portal_receiver) REFERENCES portal(jid, receiver) ON DELETE CASCADE
  108. );
  109. CREATE TABLE backfill_state (
  110. user_mxid TEXT,
  111. portal_jid TEXT,
  112. portal_receiver TEXT,
  113. processing_batch BOOLEAN,
  114. backfill_complete BOOLEAN,
  115. first_expected_ts BIGINT,
  116. PRIMARY KEY (user_mxid, portal_jid, portal_receiver),
  117. FOREIGN KEY (user_mxid) REFERENCES "user" (mxid) ON DELETE CASCADE ON UPDATE CASCADE,
  118. FOREIGN KEY (portal_jid, portal_receiver) REFERENCES portal (jid, receiver) ON DELETE CASCADE
  119. );
  120. CREATE TABLE media_backfill_requests (
  121. user_mxid TEXT,
  122. portal_jid TEXT,
  123. portal_receiver TEXT,
  124. event_id TEXT,
  125. media_key bytea,
  126. status INTEGER,
  127. error TEXT,
  128. PRIMARY KEY (user_mxid, portal_jid, portal_receiver, event_id),
  129. FOREIGN KEY (user_mxid) REFERENCES "user"(mxid) ON UPDATE CASCADE ON DELETE CASCADE,
  130. FOREIGN KEY (portal_jid, portal_receiver) REFERENCES portal(jid, receiver) ON UPDATE CASCADE ON DELETE CASCADE
  131. );
  132. CREATE TABLE history_sync_conversation (
  133. user_mxid TEXT,
  134. conversation_id TEXT,
  135. portal_jid TEXT,
  136. portal_receiver TEXT,
  137. last_message_timestamp TIMESTAMP,
  138. archived BOOLEAN,
  139. pinned INTEGER,
  140. mute_end_time TIMESTAMP,
  141. disappearing_mode INTEGER,
  142. end_of_history_transfer_type INTEGER,
  143. ephemeral_Expiration INTEGER,
  144. marked_as_unread BOOLEAN,
  145. unread_count INTEGER,
  146. PRIMARY KEY (user_mxid, conversation_id),
  147. FOREIGN KEY (user_mxid) REFERENCES "user"(mxid) ON UPDATE CASCADE ON DELETE CASCADE,
  148. FOREIGN KEY (portal_jid, portal_receiver) REFERENCES portal(jid, receiver) ON UPDATE CASCADE ON DELETE CASCADE
  149. );
  150. CREATE TABLE history_sync_message (
  151. user_mxid TEXT,
  152. conversation_id TEXT,
  153. message_id TEXT,
  154. timestamp TIMESTAMP,
  155. data bytea,
  156. inserted_time TIMESTAMP,
  157. PRIMARY KEY (user_mxid, conversation_id, message_id),
  158. FOREIGN KEY (user_mxid) REFERENCES "user"(mxid) ON UPDATE CASCADE ON DELETE CASCADE,
  159. FOREIGN KEY (user_mxid, conversation_id) REFERENCES history_sync_conversation(user_mxid, conversation_id) ON DELETE CASCADE
  160. );