000001_initial.up.sql 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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. -- Files
  20. CREATE TABLE IF NOT EXISTS files (
  21. id TEXT PRIMARY KEY,
  22. session_id TEXT NOT NULL,
  23. path TEXT NOT NULL,
  24. content TEXT NOT NULL,
  25. version TEXT NOT NULL,
  26. created_at INTEGER NOT NULL, -- Unix timestamp in milliseconds
  27. updated_at INTEGER NOT NULL, -- Unix timestamp in milliseconds
  28. FOREIGN KEY (session_id) REFERENCES sessions (id) ON DELETE CASCADE,
  29. UNIQUE(path, session_id, version)
  30. );
  31. CREATE INDEX IF NOT EXISTS idx_files_session_id ON files (session_id);
  32. CREATE INDEX IF NOT EXISTS idx_files_path ON files (path);
  33. CREATE TRIGGER IF NOT EXISTS update_files_updated_at
  34. AFTER UPDATE ON files
  35. BEGIN
  36. UPDATE files SET updated_at = strftime('%s', 'now')
  37. WHERE id = new.id;
  38. END;
  39. -- Messages
  40. CREATE TABLE IF NOT EXISTS messages (
  41. id TEXT PRIMARY KEY,
  42. session_id TEXT NOT NULL,
  43. role TEXT NOT NULL,
  44. parts TEXT NOT NULL default '[]',
  45. model TEXT,
  46. created_at INTEGER NOT NULL, -- Unix timestamp in milliseconds
  47. updated_at INTEGER NOT NULL, -- Unix timestamp in milliseconds
  48. finished_at INTEGER, -- Unix timestamp in milliseconds
  49. FOREIGN KEY (session_id) REFERENCES sessions (id) ON DELETE CASCADE
  50. );
  51. CREATE INDEX IF NOT EXISTS idx_messages_session_id ON messages (session_id);
  52. CREATE TRIGGER IF NOT EXISTS update_messages_updated_at
  53. AFTER UPDATE ON messages
  54. BEGIN
  55. UPDATE messages SET updated_at = strftime('%s', 'now')
  56. WHERE id = new.id;
  57. END;
  58. CREATE TRIGGER IF NOT EXISTS update_session_message_count_on_insert
  59. AFTER INSERT ON messages
  60. BEGIN
  61. UPDATE sessions SET
  62. message_count = message_count + 1
  63. WHERE id = new.session_id;
  64. END;
  65. CREATE TRIGGER IF NOT EXISTS update_session_message_count_on_delete
  66. AFTER DELETE ON messages
  67. BEGIN
  68. UPDATE sessions SET
  69. message_count = message_count - 1
  70. WHERE id = old.session_id;
  71. END;