00-latest-revision.sql 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. -- v0 -> v3: Latest revision
  2. CREATE TABLE guild (
  3. dcid TEXT PRIMARY KEY,
  4. mxid TEXT UNIQUE,
  5. name TEXT NOT NULL,
  6. name_set BOOLEAN NOT NULL,
  7. avatar TEXT NOT NULL,
  8. avatar_url TEXT NOT NULL,
  9. avatar_set BOOLEAN NOT NULL,
  10. auto_bridge_channels BOOLEAN NOT NULL
  11. );
  12. CREATE TABLE portal (
  13. dcid TEXT,
  14. receiver TEXT,
  15. other_user_id TEXT,
  16. type INTEGER NOT NULL,
  17. dc_guild_id TEXT,
  18. dc_parent_id TEXT,
  19. -- This is not accessed by the bridge, it's only used for the portal parent foreign key.
  20. -- Only guild channels have parents, but only DMs have a receiver field.
  21. dc_parent_receiver TEXT NOT NULL DEFAULT '',
  22. mxid TEXT UNIQUE,
  23. name TEXT NOT NULL,
  24. name_set BOOLEAN NOT NULL,
  25. topic TEXT NOT NULL,
  26. topic_set BOOLEAN NOT NULL,
  27. avatar TEXT NOT NULL,
  28. avatar_url TEXT NOT NULL,
  29. avatar_set BOOLEAN NOT NULL,
  30. encrypted BOOLEAN NOT NULL,
  31. in_space TEXT NOT NULL,
  32. first_event_id TEXT NOT NULL,
  33. PRIMARY KEY (dcid, receiver),
  34. CONSTRAINT portal_parent_fkey FOREIGN KEY (dc_parent_id, dc_parent_receiver) REFERENCES portal (dcid, receiver) ON DELETE CASCADE,
  35. CONSTRAINT portal_guild_fkey FOREIGN KEY (dc_guild_id) REFERENCES guild(dcid) ON DELETE CASCADE
  36. );
  37. CREATE TABLE thread (
  38. dcid TEXT PRIMARY KEY,
  39. parent_chan_id TEXT NOT NULL,
  40. root_msg_dcid TEXT NOT NULL,
  41. root_msg_mxid TEXT NOT NULL,
  42. -- This is also not accessed by the bridge.
  43. receiver TEXT NOT NULL DEFAULT '',
  44. CONSTRAINT thread_parent_fkey FOREIGN KEY (parent_chan_id, receiver) REFERENCES portal(dcid, receiver) ON DELETE CASCADE ON UPDATE CASCADE
  45. );
  46. CREATE TABLE puppet (
  47. id TEXT PRIMARY KEY,
  48. name TEXT NOT NULL,
  49. name_set BOOLEAN NOT NULL,
  50. avatar TEXT NOT NULL,
  51. avatar_url TEXT NOT NULL,
  52. avatar_set BOOLEAN NOT NULL,
  53. custom_mxid TEXT,
  54. access_token TEXT,
  55. next_batch TEXT
  56. );
  57. CREATE TABLE "user" (
  58. mxid TEXT PRIMARY KEY,
  59. dcid TEXT UNIQUE,
  60. discord_token TEXT,
  61. management_room TEXT,
  62. space_room TEXT,
  63. dm_space_room TEXT
  64. );
  65. CREATE TABLE user_portal (
  66. discord_id TEXT,
  67. user_mxid TEXT,
  68. type TEXT NOT NULL,
  69. in_space BOOLEAN NOT NULL,
  70. timestamp BIGINT NOT NULL,
  71. PRIMARY KEY (discord_id, user_mxid),
  72. CONSTRAINT up_user_fkey FOREIGN KEY (user_mxid) REFERENCES "user" (mxid) ON DELETE CASCADE
  73. );
  74. CREATE TABLE message (
  75. dcid TEXT,
  76. dc_chan_id TEXT,
  77. dc_chan_receiver TEXT,
  78. dc_sender TEXT NOT NULL,
  79. timestamp BIGINT NOT NULL,
  80. dc_thread_id TEXT,
  81. mxid TEXT NOT NULL UNIQUE,
  82. PRIMARY KEY (dcid, dc_chan_id, dc_chan_receiver),
  83. CONSTRAINT message_portal_fkey FOREIGN KEY (dc_chan_id, dc_chan_receiver) REFERENCES portal (dcid, receiver) ON DELETE CASCADE
  84. );
  85. CREATE TABLE reaction (
  86. dc_chan_id TEXT,
  87. dc_chan_receiver TEXT,
  88. dc_msg_id TEXT,
  89. dc_sender TEXT,
  90. dc_emoji_name TEXT,
  91. dc_thread_id TEXT,
  92. mxid TEXT NOT NULL UNIQUE,
  93. PRIMARY KEY (dc_chan_id, dc_chan_receiver, dc_msg_id, dc_sender, dc_emoji_name),
  94. CONSTRAINT reaction_message_fkey FOREIGN KEY (dc_msg_id, dc_chan_id, dc_chan_receiver) REFERENCES message (dcid, dc_chan_id, dc_chan_receiver) ON DELETE CASCADE
  95. );
  96. CREATE TABLE attachment (
  97. dcid TEXT,
  98. dc_msg_id TEXT,
  99. dc_chan_id TEXT,
  100. dc_chan_receiver TEXT,
  101. dc_thread_id TEXT,
  102. mxid TEXT NOT NULL UNIQUE,
  103. PRIMARY KEY (dcid, dc_msg_id, dc_chan_id, dc_chan_receiver),
  104. CONSTRAINT attachment_message_fkey FOREIGN KEY (dc_msg_id, dc_chan_id, dc_chan_receiver) REFERENCES message (dcid, dc_chan_id, dc_chan_receiver) ON DELETE CASCADE
  105. );
  106. CREATE TABLE emoji (
  107. discord_id TEXT PRIMARY KEY,
  108. discord_name TEXT,
  109. matrix_url TEXT
  110. );