libsqlite3_hotbundle/
lib.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#[cfg(test)]
mod test {
    #[test]
    fn test_bundled_version() {
        assert_eq!(effective_sqlite_version(), Ok(bundled_sqlite_version()));
    }

    fn effective_sqlite_version() -> rusqlite::Result<String> {
        Ok(rusqlite::Connection::open_in_memory()?.query_row(
            "SELECT sqlite_version();",
            [],
            |row| Ok(row.get(0)?),
        )?)
    }

    fn bundled_sqlite_version() -> String {
        let header_text = include_str!("../sqlite3/sqlite3.h");
        let mut expected_version = None;
        for line in header_text.lines() {
            let words: Vec<&str> = line.trim().split_ascii_whitespace().collect();
            match words.as_slice() {
                ["#define", "SQLITE_VERSION", version_str] => {
                    let Some(version_str) = version_str
                        .strip_prefix('"')
                        .and_then(|s| s.strip_suffix('"'))
                    else {
                        panic!("couldn't unwrap SQLITE_VERSION #define value {version_str:?}");
                    };
                    expected_version = Some(version_str.to_owned());
                    break;
                }
                _ => {}
            }
        }
        expected_version.expect("couldn't find SQLITE_VERSION in the header")
    }
}