|
1 | 1 | use rusqlite::Connection;
|
2 | 2 |
|
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<()> { |
4 | 6 | assert!(from_version < to_version);
|
5 | 7 | if from_version == 1 && to_version == 2 {
|
6 | 8 | let sql = format!(
|
7 | 9 | "ALTER TABLE {}
|
8 | 10 | ADD sub_namespace TEXT DEFAULT \"\" NOT NULL;",
|
9 | 11 | 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 | + })?; |
19 | 26 | }
|
| 27 | + Ok(()) |
20 | 28 | }
|
21 | 29 |
|
22 | 30 | #[cfg(test)]
|
@@ -100,7 +108,7 @@ mod tests {
|
100 | 108 | }
|
101 | 109 |
|
102 | 110 | // 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(); |
104 | 112 | let res = store.read(&test_namespace, "", &test_key).unwrap();
|
105 | 113 | assert_eq!(res, test_data);
|
106 | 114 |
|
|
0 commit comments