CREATE TYPE IF NOT EXISTS drive_file ( "id" ascii, "type" ascii, "createdAt" timestamp, "name" text, "comment" text, "blurhash" text, "url" text, "thumbnailUrl" text, "isSensitive" boolean, "isLink" boolean, "md5" ascii, "size" int ); CREATE TYPE IF NOT EXISTS note_edit_history ( "content" text, "cw" text, "files" set>, "updatedAt" timestamp, ); CREATE TYPE IF NOT EXISTS emoji ( "name" text, "url" text, "width" int, "height" int, ); CREATE TABLE IF NOT EXISTS note ( -- Models timeline "createdAtDate" date, -- For partitioning "createdAt" timestamp, "id" ascii, -- Post "visibility" ascii, "content" text, "name" text, "cw" text, "localOnly" boolean, "renoteCount" int, "repliesCount" int, "uri" text, "url" text, "score" int, "files" set>, "visibleUsersId" set, "mentions" set, "emojis" set>, "tags" set, "hasPoll" boolean, "threadId" ascii, "channelId" ascii, -- Channel "channelName" text, "userId" ascii, -- User "replyId" ascii, -- Reply "renoteId" ascii, -- Boost "reactions" map, "reactionEmojis" map>, "noteEdit" set>, -- Edit History "updatedAt" timestamp, PRIMARY KEY ("createdAtDate", "createdAt") ) WITH CLUSTERING ORDER BY ("createdAt" DESC); CREATE INDEX IF NOT EXISTS note_by_id ON note (id); CREATE INDEX IF NOT EXISTS note_by_uri ON note (uri); CREATE INDEX IF NOT EXISTS note_by_url ON note (url); CREATE MATERIALIZED VIEW IF NOT EXISTS note_by_userid AS SELECT * FROM note WHERE "userId" IS NOT NULL AND "createdAt" IS NOT NULL AND "createdAtDate" IS NOT NULL PRIMARY KEY ("userId", "createdAt", "createdAtDate") WITH CLUSTERING ORDER BY ("createdAt" DESC); CREATE TABLE IF NOT EXISTS reaction ( "noteId" ascii, "createdAt" timestamp, "userId" ascii, "reaction" frozen, PRIMARY KEY ("noteId", "createdAt", "userId") ) WITH CLUSTERING ORDER BY ("createdAt" DESC);