00-latest-revision.sql 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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. avatar TEXT NOT NULL,
  27. avatar_url TEXT NOT NULL,
  28. avatar_set BOOLEAN NOT NULL,
  29. encrypted BOOLEAN NOT NULL,
  30. in_space TEXT NOT NULL,
  31. first_event_id TEXT NOT NULL,
  32. PRIMARY KEY (dcid, receiver),
  33. CONSTRAINT portal_parent_fkey FOREIGN KEY (dc_parent_id, dc_parent_receiver) REFERENCES portal (dcid, receiver) ON DELETE CASCADE,
  34. CONSTRAINT portal_guild_fkey FOREIGN KEY (dc_guild_id) REFERENCES guild(dcid) ON DELETE CASCADE
  35. );
  36. CREATE TABLE thread (
  37. dcid TEXT PRIMARY KEY,
  38. parent_chan_id TEXT NOT NULL,
  39. root_msg_dcid TEXT NOT NULL,
  40. root_msg_mxid TEXT NOT NULL,
  41. -- This is also not accessed by the bridge.
  42. receiver TEXT NOT NULL DEFAULT '',
  43. CONSTRAINT thread_parent_fkey FOREIGN KEY (parent_chan_id, receiver) REFERENCES portal(dcid, receiver) ON DELETE CASCADE ON UPDATE CASCADE
  44. );
  45. CREATE TABLE puppet (
  46. id TEXT PRIMARY KEY,
  47. name TEXT NOT NULL,
  48. name_set BOOLEAN NOT NULL,
  49. avatar TEXT NOT NULL,
  50. avatar_url TEXT NOT NULL,
  51. avatar_set BOOLEAN NOT NULL,
  52. custom_mxid TEXT,
  53. access_token TEXT,
  54. next_batch TEXT
  55. );
  56. CREATE TABLE "user" (
  57. mxid TEXT PRIMARY KEY,
  58. dcid TEXT UNIQUE,
  59. discord_token TEXT,
  60. management_room TEXT,
  61. space_room TEXT
  62. );
  63. CREATE TABLE user_guild (
  64. guild_id TEXT,
  65. user_mxid TEXT,
  66. in_space BOOLEAN NOT NULL,
  67. timestamp BIGINT NOT NULL,
  68. PRIMARY KEY (guild_id, user_mxid),
  69. CONSTRAINT ug_guild_fkey FOREIGN KEY (guild_id) REFERENCES guild (dcid) ON DELETE CASCADE,
  70. CONSTRAINT ug_user_fkey FOREIGN KEY (user_mxid) REFERENCES "user" (mxid) ON DELETE CASCADE
  71. );
  72. CREATE TABLE message (
  73. dcid TEXT,
  74. dc_chan_id TEXT,
  75. dc_chan_receiver TEXT,
  76. dc_sender TEXT NOT NULL,
  77. timestamp BIGINT NOT NULL,
  78. dc_thread_id TEXT,
  79. mxid TEXT NOT NULL UNIQUE,
  80. PRIMARY KEY (dcid, dc_chan_id, dc_chan_receiver),
  81. CONSTRAINT message_portal_fkey FOREIGN KEY (dc_chan_id, dc_chan_receiver) REFERENCES portal (dcid, receiver) ON DELETE CASCADE
  82. );
  83. CREATE TABLE reaction (
  84. dc_chan_id TEXT,
  85. dc_chan_receiver TEXT,
  86. dc_msg_id TEXT,
  87. dc_sender TEXT,
  88. dc_emoji_name TEXT,
  89. dc_thread_id TEXT,
  90. mxid TEXT NOT NULL UNIQUE,
  91. PRIMARY KEY (dc_chan_id, dc_chan_receiver, dc_msg_id, dc_sender, dc_emoji_name),
  92. 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
  93. );
  94. CREATE TABLE attachment (
  95. dcid TEXT,
  96. dc_msg_id TEXT,
  97. dc_chan_id TEXT,
  98. dc_chan_receiver TEXT,
  99. dc_thread_id TEXT,
  100. mxid TEXT NOT NULL UNIQUE,
  101. PRIMARY KEY (dcid, dc_msg_id, dc_chan_id, dc_chan_receiver),
  102. 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
  103. );
  104. CREATE TABLE emoji (
  105. discord_id TEXT PRIMARY KEY,
  106. discord_name TEXT,
  107. matrix_url TEXT
  108. );