1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
use crate::prelude::*;
use rusqlite::Connection;
pub fn migrate(db: &Connection) -> Result<()> {
db.execute_batch(
r#"
CREATE TABLE IF NOT EXISTS sensors (
pk INTEGER PRIMARY KEY NOT NULL,
sensor_id TEXT UNIQUE NOT NULL,
timestamp DATETIME NOT NULL
);
-- Stores all sensor readings.
CREATE TABLE IF NOT EXISTS readings (
sensor_fk INTEGER NOT NULL REFERENCES sensors(pk) ON UPDATE CASCADE ON DELETE CASCADE,
timestamp DATETIME NOT NULL,
value BLOB NOT NULL
);
-- Descending index on `timestamp` is needed to speed up the select last queries.
CREATE UNIQUE INDEX IF NOT EXISTS readings_sensor_fk_timestamp ON readings (sensor_fk, timestamp DESC);
"#,
)?;
Ok(())
}