Files
matrix-rust-sdk/crates/matrix-sdk-sqlite/migrations/state_store/001_init.sql
Kévin Commaille 6ca6a9a84a Implement SQLite state store
Co-authored-by: Jonas Platte <jplatte@matrix.org>
Signed-off-by: Kévin Commaille <zecakeh@tedomum.fr>
2023-04-26 17:51:11 +02:00

99 lines
2.5 KiB
SQL

-- basic kv data like the database version and store cipher
CREATE TABLE "kv" (
"key" TEXT PRIMARY KEY NOT NULL,
"value" BLOB NOT NULL
);
-- another general-purpose kv table, but with blob keys
-- used for sync token, filters and other things
--
-- in theory, we could use one table for both since sqlite has dynamic typing
-- (column types are basically meaningless), but this is a cleaner solution
CREATE TABLE "kv_blob" (
"key" BLOB PRIMARY KEY NOT NULL,
"value" BLOB NOT NULL
);
CREATE TABLE "room_info" (
"room_id" BLOB PRIMARY KEY NOT NULL,
"stripped" BOOLEAN NOT NULL,
"data" BLOB NOT NULL
);
CREATE INDEX "room_info_room_id_stripped"
ON "room_info" ("room_id", "stripped");
CREATE TABLE "state_event" (
"room_id" BLOB NOT NULL,
"event_type" BLOB NOT NULL,
"state_key" BLOB NOT NULL,
"stripped" BOOLEAN NOT NULL,
"event_id" BLOB,
"data" BLOB NOT NULL,
PRIMARY KEY ("room_id", "event_type", "state_key")
);
CREATE INDEX "state_event_room_id_event_type_stripped_event_id"
ON "state_event" ("room_id", "event_type", "stripped", "event_id");
CREATE TABLE "global_account_data" (
"event_type" BLOB PRIMARY KEY NOT NULL,
"data" BLOB NOT NULL
);
CREATE TABLE "room_account_data" (
"room_id" BLOB NOT NULL,
"event_type" BLOB NOT NULL,
"data" BLOB NOT NULL,
PRIMARY KEY ("room_id", "event_type")
);
CREATE TABLE "member" (
"room_id" BLOB NOT NULL,
"user_id" BLOB NOT NULL,
"membership" BLOB NOT NULL,
"stripped" BOOLEAN NOT NULL,
"data" BLOB NOT NULL,
PRIMARY KEY ("room_id", "user_id")
);
CREATE INDEX "member_room_id_membership"
ON "member" ("room_id", "membership");
CREATE TABLE "profile" (
"room_id" BLOB NOT NULL,
"user_id" BLOB NOT NULL,
"data" BLOB NOT NULL,
PRIMARY KEY ("room_id", "user_id")
);
CREATE TABLE "receipt" (
"room_id" BLOB NOT NULL,
"user_id" BLOB NOT NULL,
"receipt_type" BLOB NOT NULL,
"thread" BLOB NOT NULL,
"event_id" BLOB NOT NULL,
"data" BLOB NOT NULL,
PRIMARY KEY ("room_id", "user_id", "receipt_type", "thread")
);
CREATE INDEX "receipt_room_id_receipt_type_thread_id_event_id"
ON "receipt" ("room_id", "receipt_type", "thread", "event_id");
CREATE TABLE "display_name" (
"room_id" BLOB NOT NULL,
"name" BLOB NOT NULL,
"data" BLOB NOT NULL,
PRIMARY KEY ("room_id", "name")
);
CREATE TABLE "media" (
"uri" BLOB NOT NULL,
"format" BLOB NOT NULL,
"data" BLOB NOT NULL,
PRIMARY KEY ("uri", "format")
);