diff options
| author | Kujtim Hoxha <[email protected]> | 2025-04-24 22:11:39 +0200 |
|---|---|---|
| committer | Kujtim Hoxha <[email protected]> | 2025-04-24 22:27:51 +0200 |
| commit | de41703e207bb31aa25268547e30024041ab7fff (patch) | |
| tree | 591ff6bec950b8f48ec08a234f8d713ae6788bd9 /internal/db/migrations/20250424200609_initial.sql | |
| parent | 2c24bfb7b3839233dea2842dd6607e845a3d1494 (diff) | |
| download | opencode-de41703e207bb31aa25268547e30024041ab7fff.tar.gz opencode-de41703e207bb31aa25268547e30024041ab7fff.zip | |
change db driver
Diffstat (limited to 'internal/db/migrations/20250424200609_initial.sql')
| -rw-r--r-- | internal/db/migrations/20250424200609_initial.sql | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/internal/db/migrations/20250424200609_initial.sql b/internal/db/migrations/20250424200609_initial.sql new file mode 100644 index 000000000..02caecf0c --- /dev/null +++ b/internal/db/migrations/20250424200609_initial.sql @@ -0,0 +1,98 @@ +-- +goose Up +-- +goose StatementBegin +-- Sessions +CREATE TABLE IF NOT EXISTS sessions ( + id TEXT PRIMARY KEY, + parent_session_id TEXT, + title TEXT NOT NULL, + message_count INTEGER NOT NULL DEFAULT 0 CHECK (message_count >= 0), + prompt_tokens INTEGER NOT NULL DEFAULT 0 CHECK (prompt_tokens >= 0), + completion_tokens INTEGER NOT NULL DEFAULT 0 CHECK (completion_tokens>= 0), + cost REAL NOT NULL DEFAULT 0.0 CHECK (cost >= 0.0), + updated_at INTEGER NOT NULL, -- Unix timestamp in milliseconds + created_at INTEGER NOT NULL -- Unix timestamp in milliseconds +); + +CREATE TRIGGER IF NOT EXISTS update_sessions_updated_at +AFTER UPDATE ON sessions +BEGIN +UPDATE sessions SET updated_at = strftime('%s', 'now') +WHERE id = new.id; +END; + +-- Files +CREATE TABLE IF NOT EXISTS files ( + id TEXT PRIMARY KEY, + session_id TEXT NOT NULL, + path TEXT NOT NULL, + content TEXT NOT NULL, + version TEXT NOT NULL, + created_at INTEGER NOT NULL, -- Unix timestamp in milliseconds + updated_at INTEGER NOT NULL, -- Unix timestamp in milliseconds + FOREIGN KEY (session_id) REFERENCES sessions (id) ON DELETE CASCADE, + UNIQUE(path, session_id, version) +); + +CREATE INDEX IF NOT EXISTS idx_files_session_id ON files (session_id); +CREATE INDEX IF NOT EXISTS idx_files_path ON files (path); + +CREATE TRIGGER IF NOT EXISTS update_files_updated_at +AFTER UPDATE ON files +BEGIN +UPDATE files SET updated_at = strftime('%s', 'now') +WHERE id = new.id; +END; + +-- Messages +CREATE TABLE IF NOT EXISTS messages ( + id TEXT PRIMARY KEY, + session_id TEXT NOT NULL, + role TEXT NOT NULL, + parts TEXT NOT NULL default '[]', + model TEXT, + created_at INTEGER NOT NULL, -- Unix timestamp in milliseconds + updated_at INTEGER NOT NULL, -- Unix timestamp in milliseconds + finished_at INTEGER, -- Unix timestamp in milliseconds + FOREIGN KEY (session_id) REFERENCES sessions (id) ON DELETE CASCADE +); + +CREATE INDEX IF NOT EXISTS idx_messages_session_id ON messages (session_id); + +CREATE TRIGGER IF NOT EXISTS update_messages_updated_at +AFTER UPDATE ON messages +BEGIN +UPDATE messages SET updated_at = strftime('%s', 'now') +WHERE id = new.id; +END; + +CREATE TRIGGER IF NOT EXISTS update_session_message_count_on_insert +AFTER INSERT ON messages +BEGIN +UPDATE sessions SET + message_count = message_count + 1 +WHERE id = new.session_id; +END; + +CREATE TRIGGER IF NOT EXISTS update_session_message_count_on_delete +AFTER DELETE ON messages +BEGIN +UPDATE sessions SET + message_count = message_count - 1 +WHERE id = old.session_id; +END; + +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DROP TRIGGER IF EXISTS update_sessions_updated_at; +DROP TRIGGER IF EXISTS update_messages_updated_at; +DROP TRIGGER IF EXISTS update_files_updated_at; + +DROP TRIGGER IF EXISTS update_session_message_count_on_delete; +DROP TRIGGER IF EXISTS update_session_message_count_on_insert; + +DROP TABLE IF EXISTS sessions; +DROP TABLE IF EXISTS messages; +DROP TABLE IF EXISTS files; +-- +goose StatementEnd |
