gemini_adk_rs/session/
db_schema.rs

1//! SQL schema definitions for database-backed session persistence.
2//!
3//! These are always available (not feature-gated) so that tooling, migrations,
4//! and documentation can reference them regardless of runtime backend.
5
6/// SQL migration for PostgreSQL.
7pub const POSTGRES_SCHEMA: &str = r#"
8CREATE TABLE IF NOT EXISTS sessions (
9    id TEXT PRIMARY KEY,
10    app_name TEXT NOT NULL,
11    user_id TEXT NOT NULL,
12    state JSONB NOT NULL DEFAULT '{}',
13    create_time TIMESTAMPTZ NOT NULL DEFAULT NOW(),
14    update_time TIMESTAMPTZ NOT NULL DEFAULT NOW()
15);
16
17CREATE TABLE IF NOT EXISTS events (
18    id TEXT PRIMARY KEY,
19    session_id TEXT NOT NULL REFERENCES sessions(id) ON DELETE CASCADE,
20    invocation_id TEXT NOT NULL,
21    author TEXT NOT NULL,
22    content TEXT,
23    actions JSONB NOT NULL DEFAULT '{}',
24    timestamp BIGINT NOT NULL,
25    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
26);
27
28CREATE INDEX IF NOT EXISTS idx_events_session ON events(session_id);
29CREATE INDEX IF NOT EXISTS idx_sessions_app_user ON sessions(app_name, user_id);
30"#;
31
32/// SQL migration for SQLite.
33pub const SQLITE_SCHEMA: &str = r#"
34CREATE TABLE IF NOT EXISTS sessions (
35    id TEXT PRIMARY KEY,
36    app_name TEXT NOT NULL,
37    user_id TEXT NOT NULL,
38    state TEXT NOT NULL DEFAULT '{}',
39    create_time TEXT NOT NULL DEFAULT (datetime('now')),
40    update_time TEXT NOT NULL DEFAULT (datetime('now'))
41);
42
43CREATE TABLE IF NOT EXISTS events (
44    id TEXT PRIMARY KEY,
45    session_id TEXT NOT NULL REFERENCES sessions(id) ON DELETE CASCADE,
46    invocation_id TEXT NOT NULL,
47    author TEXT NOT NULL,
48    content TEXT,
49    actions TEXT NOT NULL DEFAULT '{}',
50    timestamp INTEGER NOT NULL,
51    created_at TEXT NOT NULL DEFAULT (datetime('now'))
52);
53
54CREATE INDEX IF NOT EXISTS idx_events_session ON events(session_id);
55CREATE INDEX IF NOT EXISTS idx_sessions_app_user ON sessions(app_name, user_id);
56"#;