20230819154600_add_channel_buffers.sql

 1CREATE TABLE "buffers" (
 2    "id" SERIAL PRIMARY KEY,
 3    "channel_id" INTEGER NOT NULL REFERENCES channels (id) ON DELETE CASCADE,
 4    "epoch" INTEGER NOT NULL DEFAULT 0
 5);
 6
 7CREATE INDEX "index_buffers_on_channel_id" ON "buffers" ("channel_id");
 8
 9CREATE TABLE "buffer_operations" (
10    "buffer_id" INTEGER NOT NULL REFERENCES buffers (id) ON DELETE CASCADE,
11    "epoch" INTEGER NOT NULL,
12    "replica_id" INTEGER NOT NULL,
13    "lamport_timestamp" INTEGER NOT NULL,
14    "value" BYTEA NOT NULL,
15    PRIMARY KEY(buffer_id, epoch, lamport_timestamp, replica_id)
16);
17
18CREATE TABLE "buffer_snapshots" (
19    "buffer_id" INTEGER NOT NULL REFERENCES buffers (id) ON DELETE CASCADE,
20    "epoch" INTEGER NOT NULL,
21    "text" TEXT NOT NULL,
22    "operation_serialization_version" INTEGER NOT NULL,
23    PRIMARY KEY(buffer_id, epoch)
24);
25
26CREATE TABLE "channel_buffer_collaborators" (
27    "id" SERIAL PRIMARY KEY,
28    "channel_id" INTEGER NOT NULL REFERENCES channels (id) ON DELETE CASCADE,
29    "connection_id" INTEGER NOT NULL,
30    "connection_server_id" INTEGER NOT NULL REFERENCES servers (id) ON DELETE CASCADE,
31    "connection_lost" BOOLEAN NOT NULL DEFAULT FALSE,
32    "user_id" INTEGER NOT NULL REFERENCES users (id) ON DELETE CASCADE,
33    "replica_id" INTEGER NOT NULL
34);
35
36CREATE INDEX "index_channel_buffer_collaborators_on_channel_id" ON "channel_buffer_collaborators" ("channel_id");
37CREATE UNIQUE INDEX "index_channel_buffer_collaborators_on_channel_id_and_replica_id" ON "channel_buffer_collaborators" ("channel_id", "replica_id");
38CREATE INDEX "index_channel_buffer_collaborators_on_connection_server_id" ON "channel_buffer_collaborators" ("connection_server_id");
39CREATE INDEX "index_channel_buffer_collaborators_on_connection_id" ON "channel_buffer_collaborators" ("connection_id");
40CREATE UNIQUE INDEX "index_channel_buffer_collaborators_on_channel_id_connection_id_and_server_id" ON "channel_buffer_collaborators" ("channel_id", "connection_id", "connection_server_id");