mirror of
https://github.com/scottlamb/moonfire-nvr.git
synced 2025-11-09 21:49:46 -05:00
update rusqlite
The big difference here is query_named and execute_named have gone away. Fair number of lines changes but straightforward.
This commit is contained in:
@@ -34,7 +34,7 @@ pretty-hex = "0.2.1"
|
||||
prettydiff = "0.4.0"
|
||||
protobuf = { git = "https://github.com/stepancheg/rust-protobuf" }
|
||||
ring = "0.16.2"
|
||||
rusqlite = "0.24.1"
|
||||
rusqlite = "0.25.3"
|
||||
smallvec = "1.0"
|
||||
tempdir = "0.3"
|
||||
time = "0.1"
|
||||
|
||||
@@ -14,7 +14,7 @@ use log::info;
|
||||
use parking_lot::Mutex;
|
||||
use protobuf::Message;
|
||||
use ring::rand::{SecureRandom, SystemRandom};
|
||||
use rusqlite::{params, Connection, Transaction};
|
||||
use rusqlite::{named_params, params, Connection, Transaction};
|
||||
use std::collections::BTreeMap;
|
||||
use std::fmt;
|
||||
use std::net::IpAddr;
|
||||
@@ -374,7 +374,7 @@ impl State {
|
||||
let id = row.get(0)?;
|
||||
let name: String = row.get(1)?;
|
||||
let mut permissions = Permissions::new();
|
||||
permissions.merge_from_bytes(row.get_raw_checked(7)?.as_blob()?)?;
|
||||
permissions.merge_from_bytes(row.get_ref(7)?.as_blob()?)?;
|
||||
state.users_by_id.insert(
|
||||
id,
|
||||
User {
|
||||
@@ -444,16 +444,16 @@ impl State {
|
||||
.permissions
|
||||
.write_to_bytes()
|
||||
.expect("proto3->vec is infallible");
|
||||
stmt.execute_named(&[
|
||||
(":username", &&change.username[..]),
|
||||
(":password_hash", phash),
|
||||
(":password_id", &pid),
|
||||
(":password_failure_count", &pcount),
|
||||
(":flags", &change.flags),
|
||||
(":unix_uid", &change.unix_uid),
|
||||
(":id", &id),
|
||||
(":permissions", &permissions),
|
||||
])?;
|
||||
stmt.execute(named_params! {
|
||||
":username": &change.username[..],
|
||||
":password_hash": phash,
|
||||
":password_id": &pid,
|
||||
":password_failure_count": &pcount,
|
||||
":flags": &change.flags,
|
||||
":unix_uid": &change.unix_uid,
|
||||
":id": &id,
|
||||
":permissions": &permissions,
|
||||
})?;
|
||||
}
|
||||
let u = e.into_mut();
|
||||
u.username = change.username;
|
||||
@@ -480,13 +480,13 @@ impl State {
|
||||
.permissions
|
||||
.write_to_bytes()
|
||||
.expect("proto3->vec is infallible");
|
||||
stmt.execute_named(&[
|
||||
(":username", &&change.username[..]),
|
||||
(":password_hash", &password_hash),
|
||||
(":flags", &change.flags),
|
||||
(":unix_uid", &change.unix_uid),
|
||||
(":permissions", &permissions),
|
||||
])?;
|
||||
stmt.execute(named_params! {
|
||||
":username": &change.username[..],
|
||||
":password_hash": &password_hash,
|
||||
":flags": &change.flags,
|
||||
":unix_uid": &change.unix_uid,
|
||||
":permissions": &permissions,
|
||||
})?;
|
||||
let id = conn.last_insert_rowid() as i32;
|
||||
self.users_by_name.insert(change.username.clone(), id);
|
||||
let e = self.users_by_id.entry(id);
|
||||
@@ -647,18 +647,18 @@ impl State {
|
||||
let permissions_blob = permissions
|
||||
.write_to_bytes()
|
||||
.expect("proto3->vec is infallible");
|
||||
stmt.execute_named(&[
|
||||
(":session_id_hash", &&hash.0[..]),
|
||||
(":user_id", &user.id),
|
||||
(":seed", &&seed[..]),
|
||||
(":flags", &flags),
|
||||
(":domain", &domain),
|
||||
(":creation_password_id", &creation_password_id),
|
||||
(":creation_time_sec", &creation.when_sec),
|
||||
(":creation_user_agent", &creation.user_agent),
|
||||
(":creation_peer_addr", &addr),
|
||||
(":permissions", &permissions_blob),
|
||||
])?;
|
||||
stmt.execute(named_params! {
|
||||
":session_id_hash": &hash.0[..],
|
||||
":user_id": &user.id,
|
||||
":seed": &seed[..],
|
||||
":flags": &flags,
|
||||
":domain": &domain,
|
||||
":creation_password_id": &creation_password_id,
|
||||
":creation_time_sec": &creation.when_sec,
|
||||
":creation_user_agent": &creation.user_agent,
|
||||
":creation_peer_addr": &addr,
|
||||
":permissions": &permissions_blob,
|
||||
})?;
|
||||
let e = match sessions.entry(hash) {
|
||||
::std::collections::hash_map::Entry::Occupied(_) => panic!("duplicate session hash!"),
|
||||
::std::collections::hash_map::Entry::Vacant(e) => e,
|
||||
@@ -787,11 +787,11 @@ impl State {
|
||||
"flushing user with hash: {}",
|
||||
u.password_hash.as_ref().unwrap()
|
||||
);
|
||||
u_stmt.execute_named(&[
|
||||
(":password_failure_count", &u.password_failure_count),
|
||||
(":password_hash", &u.password_hash),
|
||||
(":id", &id),
|
||||
])?;
|
||||
u_stmt.execute(named_params! {
|
||||
":password_failure_count": &u.password_failure_count,
|
||||
":password_hash": &u.password_hash,
|
||||
":id": &id,
|
||||
})?;
|
||||
}
|
||||
for (_, s) in &self.sessions {
|
||||
if !s.dirty {
|
||||
@@ -799,12 +799,12 @@ impl State {
|
||||
}
|
||||
let addr = s.last_use.addr_buf();
|
||||
let addr: Option<&[u8]> = addr.as_ref().map(|a| a.as_ref());
|
||||
s_stmt.execute_named(&[
|
||||
(":last_use_time_sec", &s.last_use.when_sec),
|
||||
(":last_use_user_agent", &s.last_use.user_agent),
|
||||
(":last_use_peer_addr", &addr),
|
||||
(":use_count", &s.use_count),
|
||||
])?;
|
||||
s_stmt.execute(named_params! {
|
||||
":last_use_time_sec": &s.last_use.when_sec,
|
||||
":last_use_user_agent": &s.last_use.user_agent,
|
||||
":last_use_peer_addr": &addr,
|
||||
":use_count": &s.use_count,
|
||||
})?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
@@ -866,7 +866,7 @@ fn lookup_session(conn: &Connection, hash: &SessionHash) -> Result<Session, base
|
||||
let mut permissions = Permissions::new();
|
||||
permissions
|
||||
.merge_from_bytes(
|
||||
row.get_raw_checked(18)
|
||||
row.get_ref(18)
|
||||
.err_kind(ErrorKind::Internal)?
|
||||
.as_blob()
|
||||
.err_kind(ErrorKind::Internal)?,
|
||||
|
||||
@@ -558,7 +558,7 @@ fn init_recordings(
|
||||
stream_id = :stream_id
|
||||
"#,
|
||||
)?;
|
||||
let mut rows = stmt.query_named(named_params! {":stream_id": stream_id})?;
|
||||
let mut rows = stmt.query(named_params! {":stream_id": stream_id})?;
|
||||
let mut i = 0;
|
||||
while let Some(row) = rows.next()? {
|
||||
let start = recording::Time(row.get(0)?);
|
||||
@@ -697,7 +697,7 @@ impl StreamStateChanger {
|
||||
id = :id
|
||||
"#,
|
||||
)?;
|
||||
let rows = stmt.execute_named(named_params! {
|
||||
let rows = stmt.execute(named_params! {
|
||||
":rtsp_url": &sc.rtsp_url,
|
||||
":record": sc.record,
|
||||
":flush_if_sec": sc.flush_if_sec,
|
||||
@@ -727,7 +727,7 @@ impl StreamStateChanger {
|
||||
0, 0)
|
||||
"#,
|
||||
)?;
|
||||
stmt.execute_named(named_params! {
|
||||
stmt.execute(named_params! {
|
||||
":camera_id": camera_id,
|
||||
":sample_file_dir_id": sc.sample_file_dir_id,
|
||||
":type": type_.as_str(),
|
||||
@@ -974,7 +974,7 @@ impl LockedDatabase {
|
||||
}
|
||||
if s.synced_recordings > 0 {
|
||||
new_ranges.entry(stream_id).or_insert(None);
|
||||
stmt.execute_named(named_params! {
|
||||
stmt.execute(named_params! {
|
||||
":stream_id": stream_id,
|
||||
":cum_recordings": s.cum_recordings + s.synced_recordings as i32,
|
||||
":cum_media_duration_90k": s.cum_media_duration.0 + new_duration,
|
||||
@@ -1444,7 +1444,7 @@ impl LockedDatabase {
|
||||
RawEntryMut::Vacant(vacant) => {
|
||||
trace!("cache miss for recording {}", id);
|
||||
let mut stmt = self.conn.prepare_cached(GET_RECORDING_PLAYBACK_SQL)?;
|
||||
let mut rows = stmt.query_named(named_params! {":composite_id": id.0})?;
|
||||
let mut rows = stmt.query(named_params! {":composite_id": id.0})?;
|
||||
if let Some(row) = rows.next()? {
|
||||
let video_index: VideoIndex = row.get(0)?;
|
||||
let result = f(&RecordingPlayback {
|
||||
@@ -1715,7 +1715,7 @@ impl LockedDatabase {
|
||||
}
|
||||
|
||||
let mut stmt = self.conn.prepare_cached(INSERT_VIDEO_SAMPLE_ENTRY_SQL)?;
|
||||
stmt.execute_named(named_params! {
|
||||
stmt.execute(named_params! {
|
||||
":width": i32::from(entry.width),
|
||||
":height": i32::from(entry.height),
|
||||
":pasp_h_spacing": i32::from(entry.pasp_h_spacing),
|
||||
@@ -1851,7 +1851,7 @@ impl LockedDatabase {
|
||||
:password)
|
||||
"#,
|
||||
)?;
|
||||
stmt.execute_named(named_params! {
|
||||
stmt.execute(named_params! {
|
||||
":uuid": uuid_bytes,
|
||||
":short_name": &camera.short_name,
|
||||
":description": &camera.description,
|
||||
@@ -1905,7 +1905,7 @@ impl LockedDatabase {
|
||||
id = :id
|
||||
"#,
|
||||
)?;
|
||||
let rows = stmt.execute_named(named_params! {
|
||||
let rows = stmt.execute(named_params! {
|
||||
":id": camera_id,
|
||||
":short_name": &camera.short_name,
|
||||
":description": &camera.description,
|
||||
@@ -1945,14 +1945,14 @@ impl LockedDatabase {
|
||||
if stream.range.is_some() {
|
||||
bail!("Can't remove camera {}; has recordings.", id);
|
||||
}
|
||||
let rows = stream_stmt.execute_named(named_params! {":id": stream_id})?;
|
||||
let rows = stream_stmt.execute(named_params! {":id": stream_id})?;
|
||||
if rows != 1 {
|
||||
bail!("Stream {} missing from database", id);
|
||||
}
|
||||
streams_to_delete.push(*stream_id);
|
||||
}
|
||||
let mut cam_stmt = tx.prepare_cached(r"delete from camera where id = :id")?;
|
||||
let rows = cam_stmt.execute_named(named_params! {":id": id})?;
|
||||
let rows = cam_stmt.execute(named_params! {":id": id})?;
|
||||
if rows != 1 {
|
||||
bail!("Camera {} missing from database", id);
|
||||
}
|
||||
@@ -1987,7 +1987,7 @@ impl LockedDatabase {
|
||||
c.new_limit
|
||||
);
|
||||
}
|
||||
let rows = stmt.execute_named(named_params! {
|
||||
let rows = stmt.execute(named_params! {
|
||||
":record": c.new_record,
|
||||
":retain": c.new_limit,
|
||||
":id": c.stream_id,
|
||||
|
||||
@@ -106,7 +106,7 @@ pub(crate) fn list_recordings_by_time(
|
||||
f: &mut dyn FnMut(db::ListRecordingsRow) -> Result<(), Error>,
|
||||
) -> Result<(), Error> {
|
||||
let mut stmt = conn.prepare_cached(LIST_RECORDINGS_BY_TIME_SQL)?;
|
||||
let rows = stmt.query_named(named_params! {
|
||||
let rows = stmt.query(named_params! {
|
||||
":stream_id": stream_id,
|
||||
":start_time_90k": desired_time.start.0,
|
||||
":end_time_90k": desired_time.end.0,
|
||||
@@ -122,7 +122,7 @@ pub(crate) fn list_recordings_by_id(
|
||||
f: &mut dyn FnMut(db::ListRecordingsRow) -> Result<(), Error>,
|
||||
) -> Result<(), Error> {
|
||||
let mut stmt = conn.prepare_cached(LIST_RECORDINGS_BY_ID_SQL)?;
|
||||
let rows = stmt.query_named(named_params! {
|
||||
let rows = stmt.query(named_params! {
|
||||
":start": CompositeId::new(stream_id, desired_ids.start).0,
|
||||
":end": CompositeId::new(stream_id, desired_ids.end).0,
|
||||
})?;
|
||||
@@ -190,7 +190,7 @@ pub(crate) fn insert_recording(
|
||||
"#,
|
||||
)
|
||||
.with_context(|e| format!("can't prepare recording insert: {}", e))?;
|
||||
stmt.execute_named(named_params! {
|
||||
stmt.execute(named_params! {
|
||||
":composite_id": id.0,
|
||||
":stream_id": i64::from(id.stream()),
|
||||
":open_id": o.id,
|
||||
@@ -228,7 +228,7 @@ pub(crate) fn insert_recording(
|
||||
0 => None,
|
||||
_ => Some(r.local_time_delta.0),
|
||||
};
|
||||
stmt.execute_named(named_params! {
|
||||
stmt.execute(named_params! {
|
||||
":composite_id": id.0,
|
||||
":local_time_delta_90k": delta,
|
||||
":sample_file_blake3": blake3,
|
||||
@@ -243,7 +243,7 @@ pub(crate) fn insert_recording(
|
||||
"#,
|
||||
)
|
||||
.with_context(|e| format!("can't prepare recording_playback insert: {}", e))?;
|
||||
stmt.execute_named(named_params! {
|
||||
stmt.execute(named_params! {
|
||||
":composite_id": id.0,
|
||||
":video_index": &r.video_index,
|
||||
})
|
||||
@@ -298,7 +298,7 @@ pub(crate) fn delete_recordings(
|
||||
composite_id < :end
|
||||
"#,
|
||||
)?;
|
||||
let n = insert.execute_named(named_params! {
|
||||
let n = insert.execute(named_params! {
|
||||
":sample_file_dir_id": sample_file_dir_id,
|
||||
":start": ids.start.0,
|
||||
":end": ids.end.0,
|
||||
@@ -307,7 +307,7 @@ pub(crate) fn delete_recordings(
|
||||
":start": ids.start.0,
|
||||
":end": ids.end.0,
|
||||
};
|
||||
let n_playback = del_playback.execute_named(p)?;
|
||||
let n_playback = del_playback.execute(p)?;
|
||||
if n_playback != n {
|
||||
bail!(
|
||||
"inserted {} garbage rows but deleted {} recording_playback rows!",
|
||||
@@ -315,7 +315,7 @@ pub(crate) fn delete_recordings(
|
||||
n_playback
|
||||
);
|
||||
}
|
||||
let n_integrity = del_integrity.execute_named(p)?;
|
||||
let n_integrity = del_integrity.execute(p)?;
|
||||
if n_integrity > n {
|
||||
// fewer is okay; recording_integrity is optional.
|
||||
bail!(
|
||||
@@ -324,7 +324,7 @@ pub(crate) fn delete_recordings(
|
||||
n_integrity
|
||||
);
|
||||
}
|
||||
let n_main = del_main.execute_named(p)?;
|
||||
let n_main = del_main.execute(p)?;
|
||||
if n_main != n {
|
||||
bail!(
|
||||
"inserted {} garbage rows but deleted {} recording rows!",
|
||||
@@ -367,7 +367,7 @@ pub(crate) fn get_range(
|
||||
) -> Result<Option<Range<recording::Time>>, Error> {
|
||||
// The minimum is straightforward, taking advantage of the start_time_90k index.
|
||||
let mut stmt = conn.prepare_cached(STREAM_MIN_START_SQL)?;
|
||||
let mut rows = stmt.query_named(named_params! {":stream_id": stream_id})?;
|
||||
let mut rows = stmt.query(named_params! {":stream_id": stream_id})?;
|
||||
let min_start = match rows.next()? {
|
||||
Some(row) => recording::Time(row.get(0)?),
|
||||
None => return Ok(None),
|
||||
@@ -378,7 +378,7 @@ pub(crate) fn get_range(
|
||||
// last MAX_RECORDING_DURATION must be examined in order to take advantage of the
|
||||
// start_time_90k index.
|
||||
let mut stmt = conn.prepare_cached(STREAM_MAX_START_SQL)?;
|
||||
let mut rows = stmt.query_named(named_params! {":stream_id": stream_id})?;
|
||||
let mut rows = stmt.query(named_params! {":stream_id": stream_id})?;
|
||||
let mut maxes_opt = None;
|
||||
while let Some(row) = rows.next()? {
|
||||
let row_start = recording::Time(row.get(0)?);
|
||||
@@ -427,7 +427,7 @@ pub(crate) fn list_oldest_recordings(
|
||||
f: &mut dyn FnMut(db::ListOldestRecordingsRow) -> bool,
|
||||
) -> Result<(), Error> {
|
||||
let mut stmt = conn.prepare_cached(LIST_OLDEST_RECORDINGS_SQL)?;
|
||||
let mut rows = stmt.query_named(named_params! {
|
||||
let mut rows = stmt.query(named_params! {
|
||||
":start": start.0,
|
||||
":end": CompositeId::new(start.stream() + 1, 0).0,
|
||||
})?;
|
||||
|
||||
@@ -722,7 +722,7 @@ impl State {
|
||||
while let Some(row) = rows.next()? {
|
||||
let time_90k = recording::Time(row.get(0)?);
|
||||
|
||||
let changes = row.get_raw_checked(1)?.as_blob()?;
|
||||
let changes = row.get_ref(1)?.as_blob()?;
|
||||
let before = cur.clone();
|
||||
let mut it = PointDataIterator::new(changes);
|
||||
while let Some((signal, state)) = it.next()? {
|
||||
|
||||
@@ -7,7 +7,7 @@ use crate::db;
|
||||
use crate::recording;
|
||||
use failure::Error;
|
||||
use log::warn;
|
||||
use rusqlite::params;
|
||||
use rusqlite::{named_params, params};
|
||||
use std::collections::HashMap;
|
||||
|
||||
pub fn run(_args: &super::Args, tx: &rusqlite::Transaction) -> Result<(), Error> {
|
||||
@@ -179,32 +179,30 @@ fn fill_recording(tx: &rusqlite::Transaction) -> Result<HashMap<i32, CameraState
|
||||
Some((run_id, expected_start)) if expected_start == start_time_90k => run_id,
|
||||
_ => composite_id,
|
||||
};
|
||||
insert1.execute_named(&[
|
||||
(":composite_id", &composite_id),
|
||||
(":camera_id", &camera_id),
|
||||
(":run_offset", &(composite_id - run_id)),
|
||||
(
|
||||
":flags",
|
||||
&(if trailing_zero {
|
||||
insert1.execute(named_params! {
|
||||
":composite_id": &composite_id,
|
||||
":camera_id": &camera_id,
|
||||
":run_offset": &(composite_id - run_id),
|
||||
":flags": &(
|
||||
if trailing_zero {
|
||||
db::RecordingFlags::TrailingZero as i32
|
||||
} else {
|
||||
0
|
||||
}),
|
||||
),
|
||||
(":sample_file_bytes", &sample_file_bytes),
|
||||
(":start_time_90k", &start_time_90k),
|
||||
(":duration_90k", &duration_90k),
|
||||
(":local_time_delta_90k", &local_time_delta_90k),
|
||||
(":video_samples", &video_samples),
|
||||
(":video_sync_samples", &video_sync_samples),
|
||||
(":video_sample_entry_id", &video_sample_entry_id),
|
||||
])?;
|
||||
insert2.execute_named(&[
|
||||
(":composite_id", &composite_id),
|
||||
(":sample_file_uuid", &&sample_file_uuid.0.as_bytes()[..]),
|
||||
(":sample_file_sha1", &sample_file_sha1),
|
||||
(":video_index", &video_index),
|
||||
])?;
|
||||
":sample_file_bytes": &sample_file_bytes,
|
||||
":start_time_90k": &start_time_90k,
|
||||
":duration_90k": &duration_90k,
|
||||
":local_time_delta_90k": &local_time_delta_90k,
|
||||
":video_samples": &video_samples,
|
||||
":video_sync_samples": &video_sync_samples,
|
||||
":video_sample_entry_id": &video_sample_entry_id,
|
||||
})?;
|
||||
insert2.execute(named_params! {
|
||||
":composite_id": &composite_id,
|
||||
":sample_file_uuid": &sample_file_uuid.0.as_bytes()[..],
|
||||
":sample_file_sha1": &sample_file_sha1,
|
||||
":video_index": &video_index,
|
||||
})?;
|
||||
camera_state.current_run = if trailing_zero {
|
||||
None
|
||||
} else {
|
||||
@@ -224,10 +222,10 @@ fn update_camera(
|
||||
"#,
|
||||
)?;
|
||||
for (ref id, ref state) in &camera_state {
|
||||
stmt.execute_named(&[
|
||||
(":id", &id),
|
||||
(":next_recording_id", &state.next_recording_id),
|
||||
])?;
|
||||
stmt.execute(named_params! {
|
||||
":id": &id,
|
||||
":next_recording_id": &state.next_recording_id,
|
||||
})?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ use crate::schema::DirMeta;
|
||||
use failure::{bail, format_err, Error};
|
||||
use nix::fcntl::{FlockArg, OFlag};
|
||||
use nix::sys::stat::Mode;
|
||||
use rusqlite::params;
|
||||
use rusqlite::{named_params, params};
|
||||
use std::os::unix::io::AsRawFd;
|
||||
use uuid::Uuid;
|
||||
|
||||
@@ -397,14 +397,14 @@ fn fix_video_sample_entry(tx: &rusqlite::Transaction) -> Result<(), Error> {
|
||||
let mut rows = select.query(params![])?;
|
||||
while let Some(row) = rows.next()? {
|
||||
let data: Vec<u8> = row.get(4)?;
|
||||
insert.execute_named(&[
|
||||
(":id", &row.get::<_, i32>(0)?),
|
||||
(":sha1", &row.get::<_, Vec<u8>>(1)?),
|
||||
(":width", &row.get::<_, i32>(2)?),
|
||||
(":height", &row.get::<_, i32>(3)?),
|
||||
(":rfc6381_codec", &rfc6381_codec_from_sample_entry(&data)?),
|
||||
(":data", &data),
|
||||
])?;
|
||||
insert.execute(named_params! {
|
||||
":id": &row.get::<_, i32>(0)?,
|
||||
":sha1": &row.get::<_, Vec<u8>>(1)?,
|
||||
":width": &row.get::<_, i32>(2)?,
|
||||
":height": &row.get::<_, i32>(3)?,
|
||||
":rfc6381_codec": &rfc6381_codec_from_sample_entry(&data)?,
|
||||
":data": &data,
|
||||
})?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -126,7 +126,7 @@ pub fn run(_args: &super::Args, tx: &rusqlite::Transaction) -> Result<(), Error>
|
||||
)?;
|
||||
let mut rows = stmt.query(params![])?;
|
||||
while let Some(row) = rows.next()? {
|
||||
let path = row.get_raw_checked(0)?.as_str()?;
|
||||
let path = row.get_ref(0)?.as_str()?;
|
||||
info!("path: {}", path);
|
||||
let dir_uuid: FromSqlUuid = row.get(1)?;
|
||||
let open_id: Option<u32> = row.get(2)?;
|
||||
|
||||
@@ -102,7 +102,7 @@ pub fn run(_args: &super::Args, tx: &rusqlite::Transaction) -> Result<(), Error>
|
||||
let id: i32 = row.get(0)?;
|
||||
let width: u16 = row.get::<_, i32>(1)?.try_into()?;
|
||||
let height: u16 = row.get::<_, i32>(2)?.try_into()?;
|
||||
let rfc6381_codec: &str = row.get_raw_checked(3)?.as_str()?;
|
||||
let rfc6381_codec: &str = row.get_ref(3)?.as_str()?;
|
||||
let mut data: Vec<u8> = row.get(4)?;
|
||||
let avcc = parse(&data)?;
|
||||
if avcc.num_of_sequence_parameter_sets() != 1 {
|
||||
@@ -132,7 +132,7 @@ pub fn run(_args: &super::Args, tx: &rusqlite::Transaction) -> Result<(), Error>
|
||||
BigEndian::write_u32(&mut data[0..4], u32::try_from(len)?);
|
||||
}
|
||||
|
||||
insert.execute_named(named_params! {
|
||||
insert.execute(named_params! {
|
||||
":id": id,
|
||||
":width": width,
|
||||
":height": height,
|
||||
@@ -253,7 +253,7 @@ pub fn run(_args: &super::Args, tx: &rusqlite::Transaction) -> Result<(), Error>
|
||||
cur_stream_id = Some(stream_id);
|
||||
}
|
||||
insert
|
||||
.execute_named(named_params! {
|
||||
.execute(named_params! {
|
||||
":composite_id": composite_id,
|
||||
":open_id": open_id,
|
||||
":stream_id": stream_id,
|
||||
|
||||
Reference in New Issue
Block a user