pub const CREATE_EVENTS_TABLE: &str = r#"
CREATE TABLE IF NOT EXISTS events (
id INTEGER PRIMARY KEY AUTOINCREMENT,
agent_id TEXT NOT NULL,
event_type TEXT NOT NULL,
severity TEXT NOT NULL DEFAULT 'info',
timestamp INTEGER NOT NULL,
metadata TEXT NOT NULL DEFAULT '{}',
created_at INTEGER NOT NULL DEFAULT (unixepoch())
);
"#;
pub const CREATE_INDEXES: &str = r#"
CREATE INDEX IF NOT EXISTS idx_events_agent ON events(agent_id);
CREATE INDEX IF NOT EXISTS idx_events_type ON events(event_type);
CREATE INDEX IF NOT EXISTS idx_events_ts ON events(timestamp);
CREATE INDEX IF NOT EXISTS idx_events_created ON events(created_at);
"#;
pub const MIGRATION_SQL: &str = r#"
PRAGMA journal_mode=WAL;
PRAGMA busy_timeout=5000;
"#;
pub fn setup_sql() -> String {
format!(
"{}\n{}\n{}",
MIGRATION_SQL, CREATE_EVENTS_TABLE, CREATE_INDEXES
)
}
pub const INSERT_EVENT: &str = r#"
INSERT INTO events (agent_id, event_type, severity, timestamp, metadata)
VALUES (?1, ?2, ?3, ?4, ?5)
"#;
pub const INSERT_EVENT_RETURNING: &str = r#"
INSERT INTO events (agent_id, event_type, severity, timestamp, metadata)
VALUES (?1, ?2, ?3, ?4, ?5) RETURNING id
"#;
pub const COUNT_EVENTS: &str = "SELECT COUNT(*) FROM events";
pub const DELETE_EXPIRED: &str = "DELETE FROM events WHERE timestamp < ?1";
pub const SELECT_EVENTS_BASE: &str = r#"
SELECT id, agent_id, event_type, severity, timestamp, metadata
FROM events WHERE 1=1
"#;
pub const INSERT_OR_IGNORE_EVENT: &str = r#"
INSERT OR IGNORE INTO events (agent_id, event_type, severity, timestamp, metadata)
VALUES (?1, ?2, ?3, ?4, ?5)
"#;