mirror of
https://github.com/scottlamb/moonfire-nvr.git
synced 2025-04-24 12:30:35 -04:00
make v1->v3 upgrade work with --features=bundled
--features=bundled enables -DSQLITE_DEFAULT_FOREIGN_KEYS=1, and so some operations have to be done in the proper order. * enable foreign key enforcement all the time, so I test this more reliably. * reorder some parts of the v1->v3 order. foreign key enforcement is immediate (rather than deferred) by default. and ensure old_recording_playback isn't left with a dangling reference to old_recording at the v2 stage. Instead, wait until v3 to delete tables it depends on.
This commit is contained in:
parent
c46c50af8f
commit
c0da1ef880
@ -89,6 +89,12 @@ pub fn run(args: &Args, conn: &mut rusqlite::Connection) -> Result<(), Error> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Enforce foreign keys. This is on by default with --features=bundled (as rusqlite
|
||||||
|
// compiles the SQLite3 amalgamation with -DSQLITE_DEFAULT_FOREIGN_KEYS=1). Ensure it's
|
||||||
|
// always on. Note that our foreign keys are immediate rather than deferred, so we have to
|
||||||
|
// be careful about the order of operations during the upgrade.
|
||||||
|
conn.execute("pragma foreign_keys = on", &[])?;
|
||||||
|
|
||||||
// WAL is the preferred journal mode for normal operation; it reduces the number of syncs
|
// WAL is the preferred journal mode for normal operation; it reduces the number of syncs
|
||||||
// without compromising safety.
|
// without compromising safety.
|
||||||
set_journal_mode(&conn, "wal").unwrap();
|
set_journal_mode(&conn, "wal").unwrap();
|
||||||
|
@ -244,7 +244,12 @@ pub fn run(args: &super::Args, tx: &rusqlite::Transaction) -> Result<(), Error>
|
|||||||
old_camera cross join sample_file_dir
|
old_camera cross join sample_file_dir
|
||||||
where
|
where
|
||||||
old_camera.sub_rtsp_path != '';
|
old_camera.sub_rtsp_path != '';
|
||||||
|
"#)?;
|
||||||
|
|
||||||
|
// Add the new video_sample_entry rows, before inserting the recordings referencing them.
|
||||||
|
fix_video_sample_entry(tx)?;
|
||||||
|
|
||||||
|
tx.execute_batch(r#"
|
||||||
insert into recording
|
insert into recording
|
||||||
select
|
select
|
||||||
r.composite_id,
|
r.composite_id,
|
||||||
@ -270,14 +275,6 @@ pub fn run(args: &super::Args, tx: &rusqlite::Transaction) -> Result<(), Error>
|
|||||||
old_recording r join recording_playback p on (r.composite_id = p.composite_id);
|
old_recording r join recording_playback p on (r.composite_id = p.composite_id);
|
||||||
"#)?;
|
"#)?;
|
||||||
|
|
||||||
fix_video_sample_entry(tx)?;
|
|
||||||
|
|
||||||
tx.execute_batch(r#"
|
|
||||||
drop table old_camera;
|
|
||||||
drop table old_recording;
|
|
||||||
drop table old_video_sample_entry;
|
|
||||||
"#)?;
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,6 +114,9 @@ pub fn run(_args: &super::Args, tx: &rusqlite::Transaction) -> Result<(), Error>
|
|||||||
from
|
from
|
||||||
old_recording_playback;
|
old_recording_playback;
|
||||||
drop table old_recording_playback;
|
drop table old_recording_playback;
|
||||||
|
drop table old_recording;
|
||||||
|
drop table old_camera;
|
||||||
|
drop table old_video_sample_entry;
|
||||||
"#)?;
|
"#)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user