000001_initial.up.sql 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. -- Sessions
  2. CREATE TABLE IF NOT EXISTS sessions (
  3. id TEXT PRIMARY KEY,
  4. parent_session_id TEXT,
  5. title TEXT NOT NULL,
  6. message_count INTEGER NOT NULL DEFAULT 0 CHECK (message_count >= 0),
  7. prompt_tokens INTEGER NOT NULL DEFAULT 0 CHECK (prompt_tokens >= 0),
  8. completion_tokens INTEGER NOT NULL DEFAULT 0 CHECK (completion_tokens>= 0),
  9. cost REAL NOT NULL DEFAULT 0.0 CHECK (cost >= 0.0),
  10. updated_at INTEGER NOT NULL, -- Unix timestamp in milliseconds
  11. created_at INTEGER NOT NULL -- Unix timestamp in milliseconds
  12. );
  13. CREATE TRIGGER IF NOT EXISTS update_sessions_updated_at
  14. AFTER UPDATE ON sessions
  15. BEGIN
  16. UPDATE sessions SET updated_at = strftime('%s', 'now')
  17. WHERE id = new.id;
  18. END;
  19. -- Messages
  20. CREATE TABLE IF NOT EXISTS messages (
  21. id TEXT PRIMARY KEY,
  22. session_id TEXT NOT NULL,
  23. role TEXT NOT NULL,
  24. parts TEXT NOT NULL default '[]',
  25. created_at INTEGER NOT NULL, -- Unix timestamp in milliseconds
  26. updated_at INTEGER NOT NULL, -- Unix timestamp in milliseconds
  27. FOREIGN KEY (session_id) REFERENCES sessions (id) ON DELETE CASCADE
  28. );
  29. CREATE INDEX IF NOT EXISTS idx_messages_session_id ON messages (session_id);
  30. CREATE TRIGGER IF NOT EXISTS update_messages_updated_at
  31. AFTER UPDATE ON messages
  32. BEGIN
  33. UPDATE messages SET updated_at = strftime('%s', 'now')
  34. WHERE id = new.id;
  35. END;
  36. CREATE TRIGGER IF NOT EXISTS update_session_message_count_on_insert
  37. AFTER INSERT ON messages
  38. BEGIN
  39. UPDATE sessions SET
  40. message_count = message_count + 1
  41. WHERE id = new.session_id;
  42. END;
  43. CREATE TRIGGER IF NOT EXISTS update_session_message_count_on_delete
  44. AFTER DELETE ON messages
  45. BEGIN
  46. UPDATE sessions SET
  47. message_count = message_count - 1
  48. WHERE id = old.session_id;
  49. END;