a love letter to tangled (android, iOS, and a search API)
at main 68 lines 2.0 kB view raw
1CREATE TABLE IF NOT EXISTS documents ( 2 id TEXT PRIMARY KEY, 3 did TEXT NOT NULL, 4 collection TEXT NOT NULL, 5 rkey TEXT NOT NULL, 6 at_uri TEXT NOT NULL, 7 cid TEXT NOT NULL, 8 record_type TEXT NOT NULL, 9 title TEXT, 10 body TEXT, 11 summary TEXT, 12 repo_did TEXT, 13 repo_name TEXT, 14 author_handle TEXT, 15 tags_json TEXT, 16 language TEXT, 17 created_at TEXT, 18 updated_at TEXT, 19 indexed_at TEXT NOT NULL, 20 deleted_at TEXT 21); 22 23CREATE INDEX IF NOT EXISTS idx_documents_did ON documents(did); 24 25CREATE INDEX IF NOT EXISTS idx_documents_collection ON documents(collection); 26 27CREATE INDEX IF NOT EXISTS idx_documents_record_type ON documents(record_type); 28 29CREATE INDEX IF NOT EXISTS idx_documents_repo_did ON documents(repo_did); 30 31CREATE INDEX IF NOT EXISTS idx_documents_created_at ON documents(created_at); 32 33CREATE INDEX IF NOT EXISTS idx_documents_deleted_at ON documents(deleted_at); 34 35CREATE TABLE IF NOT EXISTS sync_state ( 36 consumer_name TEXT PRIMARY KEY, 37 cursor TEXT NOT NULL, 38 high_water_mark TEXT, 39 updated_at TEXT NOT NULL 40); 41 42CREATE TABLE IF NOT EXISTS document_embeddings ( 43 document_id TEXT PRIMARY KEY REFERENCES documents(id), 44 embedding F32_BLOB(768), 45 embedding_model TEXT NOT NULL, 46 embedded_at TEXT NOT NULL 47); 48 49CREATE INDEX IF NOT EXISTS idx_embeddings_vec ON document_embeddings( 50 libsql_vector_idx(embedding, 'metric=cosine') 51); 52 53CREATE TABLE IF NOT EXISTS embedding_jobs ( 54 document_id TEXT PRIMARY KEY REFERENCES documents(id), 55 status TEXT NOT NULL, 56 attempts INTEGER NOT NULL DEFAULT 0, 57 last_error TEXT, 58 scheduled_at TEXT NOT NULL, 59 updated_at TEXT NOT NULL 60); 61 62CREATE INDEX IF NOT EXISTS idx_embedding_jobs_status ON embedding_jobs(status); 63 64CREATE TABLE IF NOT EXISTS record_state ( 65 subject_uri TEXT PRIMARY KEY, 66 state TEXT NOT NULL, 67 updated_at TEXT NOT NULL 68);