pub const SCHEMA_SQL: &str = "
-- Sessions table
CREATE TABLE IF NOT EXISTS sessions (
id TEXT PRIMARY KEY,
created_at TIMESTAMP NOT NULL,
last_accessed TIMESTAMP NOT NULL,
metadata TEXT NOT NULL
);
-- Messages table
CREATE TABLE IF NOT EXISTS messages (
id INTEGER PRIMARY KEY AUTOINCREMENT,
session_id TEXT NOT NULL,
message_index INTEGER NOT NULL,
role TEXT NOT NULL,
content TEXT NOT NULL,
tokens INTEGER NOT NULL,
timestamp TIMESTAMP NOT NULL,
importance_score REAL NOT NULL DEFAULT 0.5,
embedding_generated BOOLEAN NOT NULL DEFAULT FALSE,
FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE,
UNIQUE(session_id, message_index)
);
-- Summaries table
CREATE TABLE IF NOT EXISTS summaries (
id INTEGER PRIMARY KEY AUTOINCREMENT,
session_id TEXT NOT NULL,
message_range_start INTEGER NOT NULL,
message_range_end INTEGER NOT NULL,
summary_text TEXT NOT NULL,
compression_ratio REAL NOT NULL,
key_topics TEXT NOT NULL,
generated_at TIMESTAMP NOT NULL,
FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE,
UNIQUE(session_id, message_range_start, message_range_end)
);
-- Details table
CREATE TABLE IF NOT EXISTS details (
id INTEGER PRIMARY KEY AUTOINCREMENT,
session_id TEXT NOT NULL,
message_id INTEGER NOT NULL,
detail_type TEXT NOT NULL,
content TEXT NOT NULL,
context TEXT NOT NULL,
importance_score REAL NOT NULL,
accessed_count INTEGER NOT NULL DEFAULT 0,
last_accessed TIMESTAMP NOT NULL,
FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE,
FOREIGN KEY (message_id) REFERENCES messages(id) ON DELETE CASCADE
);
-- Embeddings table
CREATE TABLE IF NOT EXISTS embeddings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
message_id INTEGER NOT NULL,
embedding BLOB NOT NULL,
embedding_model TEXT NOT NULL,
generated_at TIMESTAMP NOT NULL,
FOREIGN KEY (message_id) REFERENCES messages(id) ON DELETE CASCADE,
UNIQUE(message_id, embedding_model)
);
-- Indexes for performance
CREATE INDEX IF NOT EXISTS idx_messages_session ON messages (session_id);
CREATE INDEX IF NOT EXISTS idx_messages_timestamp ON messages (timestamp);
CREATE INDEX IF NOT EXISTS idx_summaries_session ON summaries (session_id);
CREATE INDEX IF NOT EXISTS idx_details_session ON details (session_id);
CREATE INDEX IF NOT EXISTS idx_details_type ON details (detail_type);
CREATE INDEX IF NOT EXISTS idx_embeddings_message ON embeddings (message_id);
";Expand description
SQL statements for table creation