Skip to content

Commit 3a02f51

Browse files
committed
f Make constructor fallible
1 parent 3de60f9 commit 3a02f51

File tree

2 files changed

+24
-13
lines changed

2 files changed

+24
-13
lines changed

lightning-persister/src/sqlite_store/migrations.rs

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,30 @@
11
use rusqlite::Connection;
22

3-
pub(super) fn migrate_schema(connection: &Connection, kv_table_name: &str, from_version: u16, to_version: u16) {
3+
use lightning::io;
4+
5+
pub(super) fn migrate_schema(connection: &Connection, kv_table_name: &str, from_version: u16, to_version: u16) -> io::Result<()> {
46
assert!(from_version < to_version);
57
if from_version == 1 && to_version == 2 {
68
let sql = format!(
79
"ALTER TABLE {}
810
ADD sub_namespace TEXT DEFAULT \"\" NOT NULL;",
911
kv_table_name);
10-
connection
11-
.execute(&sql, [])
12-
.unwrap_or_else(|e|
13-
panic!("Failed to migrate table {} from user_version {} to {}: {}",
14-
kv_table_name, from_version, to_version, e));
15-
connection
16-
.pragma(Some(rusqlite::DatabaseName::Main), "user_version", to_version, |_| { Ok(()) })
17-
.unwrap_or_else(|e| panic!("Failed to upgrade user_version from {} to {}: {}",
18-
from_version, to_version, e));
12+
connection .execute(&sql, []).map_err(|e| {
13+
let msg = format!("Failed to migrate table {} from user_version {} to {}: {}",
14+
kv_table_name, from_version, to_version, e);
15+
io::Error::new(io::ErrorKind::Other, msg)
16+
})?;
17+
18+
connection.pragma(Some(rusqlite::DatabaseName::Main),
19+
"user_version", to_version, |_| {
20+
Ok(())
21+
}).map_err(|e| {
22+
let msg = format!("Failed to upgrade user_version from {} to {}: {}",
23+
from_version, to_version, e);
24+
io::Error::new(io::ErrorKind::Other, msg)
25+
})?;
1926
}
27+
Ok(())
2028
}
2129

2230
#[cfg(test)]
@@ -100,7 +108,7 @@ mod tests {
100108
}
101109

102110
// Check we migrate the db just fine without losing our written data.
103-
let store = SqliteStore::new(temp_path, Some(db_file_name), Some(kv_table_name));
111+
let store = SqliteStore::new(temp_path, Some(db_file_name), Some(kv_table_name)).unwrap();
104112
let res = store.read(&test_namespace, "", &test_key).unwrap();
105113
assert_eq!(res, test_data);
106114

lightning-persister/src/sqlite_store/mod.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,12 @@ impl SqliteStore {
6969
io::Error::new(io::ErrorKind::Other, msg)
7070
})?;
7171
} else if version_res < SCHEMA_USER_VERSION {
72-
migrations::migrate_schema(&connection, &kv_table_name, version_res, SCHEMA_USER_VERSION);
72+
migrations::migrate_schema(&connection, &kv_table_name, version_res,
73+
SCHEMA_USER_VERSION)?;
7374
} else if version_res > SCHEMA_USER_VERSION {
74-
panic!("Failed to open database: incompatible schema version {}. Expected: {}", version_res, SCHEMA_USER_VERSION);
75+
let msg = format!("Failed to open database: incompatible schema version {}. Expected: {}",
76+
version_res, SCHEMA_USER_VERSION);
77+
return Err(io::Error::new(io::ErrorKind::Other, msg));
7578
}
7679

7780
let sql = format!(

0 commit comments

Comments
 (0)