pub const COMPACT_DEVICE_HISTORY: &str = r#" DELETE FROM readings WHERE id IN ( SELECT id FROM ( SELECT id, ROW_NUMBER() OVER ( PARTITION BY device_id, CAST(unixepoch(timestamp)/?1 AS INTEGER) ORDER BY timestamp DESC, id DESC ) AS rn FROM readings WHERE timestamp < ?2 AND timestamp >= ?3 ) WHERE rn > 1 ) "#; pub const COMPACT_ZONE_HISTORY: &str = r#" DELETE FROM zone_readings WHERE id IN ( SELECT id FROM ( SELECT id, ROW_NUMBER() OVER ( PARTITION BY zone_id, CAST(unixepoch(timestamp)/?1 AS INTEGER) ORDER BY timestamp DESC, id DESC ) AS rn FROM zone_readings WHERE timestamp < ?2 AND timestamp >= ?3 ) WHERE rn > 1 ) "#; pub const COMPACT_HA_HISTORY: &str = r#" DELETE FROM ha_readings WHERE id IN ( SELECT id FROM ( SELECT id, ROW_NUMBER() OVER ( PARTITION BY entity_id, COALESCE(zone_id,''), kind, CAST(unixepoch(timestamp)/?1 AS INTEGER) ORDER BY timestamp DESC, id DESC ) AS rn FROM ha_readings WHERE timestamp < ?2 AND timestamp >= ?3 ) WHERE rn > 1 ) "#; pub const CLEAR_CONFIGURATION: &str = r#" DELETE FROM schedules; DELETE FROM automations; DELETE FROM flows; DELETE FROM climate_groups; DELETE FROM zones; DELETE FROM devices; "#; pub const HISTORY_COUNTS: &str = r#" SELECT (SELECT COUNT(*) FROM readings), (SELECT COUNT(*) FROM zone_readings), (SELECT COUNT(*) FROM ha_readings) "#; pub const INSERT_EVENT: &str = "INSERT INTO event_log(timestamp,level,kind,message,metadata) VALUES(?1,?2,?3,?4,?5)"; pub const LIST_EVENTS: &str = "SELECT id,timestamp,level,kind,message,metadata FROM event_log ORDER BY id DESC LIMIT ?1"; pub const PRUNE_EVENTS: &str = "DELETE FROM event_log WHERE timestamp < ?1"; pub const LIST_API_TOKENS: &str = "SELECT id,name,token_prefix,created_at FROM api_tokens ORDER BY created_at DESC"; pub const INSERT_API_TOKEN: &str = "INSERT INTO api_tokens(id,name,token_hash,token_prefix,created_at) VALUES(?1,?2,?3,?4,?5)"; pub const API_TOKEN_EXISTS: &str = "SELECT 1 FROM api_tokens WHERE token_hash=?1 LIMIT 1"; pub const DELETE_API_TOKEN: &str = "DELETE FROM api_tokens WHERE id=?1"; pub const LOAD_RUNTIME_SETTINGS: &str = "SELECT value FROM settings WHERE key='runtime'"; pub const UPSERT_RUNTIME_SETTINGS: &str = r#" INSERT INTO settings(key,value,updated_at) VALUES('runtime',?1,?2) ON CONFLICT(key) DO UPDATE SET value=excluded.value, updated_at=excluded.updated_at "#;