000001_initial.up.sql 1.7 KB

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