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");