libsqlite3_hotbundle/
lib.rs

1#[cfg(test)]
2mod test {
3    #[test]
4    fn test_bundled_version() {
5        assert_eq!(effective_sqlite_version(), Ok(bundled_sqlite_version()));
6    }
7
8    fn effective_sqlite_version() -> rusqlite::Result<String> {
9        Ok(rusqlite::Connection::open_in_memory()?.query_row(
10            "SELECT sqlite_version();",
11            [],
12            |row| Ok(row.get(0)?),
13        )?)
14    }
15
16    fn bundled_sqlite_version() -> String {
17        let header_text = include_str!("../sqlite3/sqlite3.h");
18        let mut expected_version = None;
19        for line in header_text.lines() {
20            let words: Vec<&str> = line.trim().split_ascii_whitespace().collect();
21            match words.as_slice() {
22                ["#define", "SQLITE_VERSION", version_str] => {
23                    let Some(version_str) = version_str
24                        .strip_prefix('"')
25                        .and_then(|s| s.strip_suffix('"'))
26                    else {
27                        panic!("couldn't unwrap SQLITE_VERSION #define value {version_str:?}");
28                    };
29                    expected_version = Some(version_str.to_owned());
30                    break;
31                }
32                _ => {}
33            }
34        }
35        expected_version.expect("couldn't find SQLITE_VERSION in the header")
36    }
37}