mirror of
https://github.com/scottlamb/moonfire-nvr.git
synced 2024-12-27 07:35:56 -05:00
7dd98bb76a
This is a definite work in progress. In particular, * there's no src/web.rs support yet so it can't be used, * the code is surprisingly complex, and there's almost no tests so far. I want to at least get complete branch coverage. * I may still go back to time_sec rather than time_90k to save RAM and flash. I simplified the approach a bit from the earlier goal in design/api.md. In particular, there's no longer the separate concept of "observation" vs "prediction". Now the predictions are just observations that extend a bit beyond now. They may be flushed prematurely and I'll try living with that to avoid making things even more complex.
68 lines
2.7 KiB
Rust
68 lines
2.7 KiB
Rust
// This file is part of Moonfire NVR, a security camera digital video recorder.
|
|
// Copyright (C) 2018 Scott Lamb <slamb@slamb.org>
|
|
//
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// In addition, as a special exception, the copyright holders give
|
|
// permission to link the code of portions of this program with the
|
|
// OpenSSL library under certain conditions as described in each
|
|
// individual source file, and distribute linked combinations including
|
|
// the two.
|
|
//
|
|
// You must obey the GNU General Public License in all respects for all
|
|
// of the code used other than OpenSSL. If you modify file(s) with this
|
|
// exception, you may extend this exception to your version of the
|
|
// file(s), but you are not obligated to do so. If you do not wish to do
|
|
// so, delete this exception statement from your version. If you delete
|
|
// this exception statement from all source files in the program, then
|
|
// also delete it here.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
/// Upgrades a version 3 schema to a version 4 schema.
|
|
|
|
use failure::Error;
|
|
|
|
pub fn run(_args: &super::Args, tx: &rusqlite::Transaction) -> Result<(), Error> {
|
|
// These create statements match the schema.sql when version 4 was the latest.
|
|
tx.execute_batch(r#"
|
|
create table signal (
|
|
id integer primary key,
|
|
source_uuid blob not null check (length(source_uuid) = 16),
|
|
type_uuid blob not null check (length(type_uuid) = 16),
|
|
short_name not null,
|
|
unique (source_uuid, type_uuid)
|
|
);
|
|
|
|
create table signal_type_enum (
|
|
type_uuid blob not null check (length(type_uuid) = 16),
|
|
value integer not null check (value > 0 and value < 16),
|
|
name text not null,
|
|
motion int not null check (motion in (0, 1)) default 0,
|
|
color text
|
|
);
|
|
|
|
create table signal_camera (
|
|
signal_id integer references signal (id),
|
|
camera_id integer references camera (id),
|
|
type integer not null,
|
|
primary key (signal_id, camera_id)
|
|
) without rowid;
|
|
|
|
create table signal_state (
|
|
time_90k integer primary key,
|
|
changes blob
|
|
);
|
|
"#)?;
|
|
Ok(())
|
|
}
|