mithril_persistence/sqlite/
mod.rs

1//! SQLite module.
2//! This module provides a minimal yet useful Entity framework on top of SQLite
3//! with ability to perform any SQL query possible and hydrate results in Rust
4//! structs.
5mod cleaner;
6mod condition;
7mod connection_builder;
8mod connection_extensions;
9mod connection_pool;
10mod cursor;
11mod entity;
12mod projection;
13mod query;
14mod source_alias;
15mod transaction;
16
17pub use cleaner::{SqliteCleaner, SqliteCleaningTask};
18pub use condition::{GetAllCondition, WhereCondition};
19pub use connection_builder::{ConnectionBuilder, ConnectionOptions};
20pub use connection_extensions::ConnectionExtensions;
21pub use connection_pool::{SqliteConnectionPool, SqlitePooledConnection};
22pub use cursor::EntityCursor;
23pub use entity::{HydrationError, SqLiteEntity};
24pub use projection::{Projection, ProjectionField};
25pub use query::Query;
26pub use source_alias::SourceAlias;
27pub use transaction::Transaction;
28
29/// Type of the connection used in Mithril
30pub type SqliteConnection = sqlite::ConnectionThreadSafe;
31
32/// Helpers to handle SQLite errors
33pub mod error {
34    /// Sqlite error type used in Mithril
35    pub type SqliteError = sqlite::Error;
36
37    /// SQLITE_BUSY error code
38    ///
39    /// see: <https://www.sqlite.org/rescode.html#busy>
40    pub const SQLITE_BUSY: isize = 5;
41}
42
43#[cfg(test)]
44mod test {
45    use sqlite::Connection;
46
47    #[test]
48    fn sqlite_version_should_be_3_42_or_more() {
49        let connection = Connection::open_thread_safe(":memory:").unwrap();
50        let mut statement = connection.prepare("select sqlite_version()").unwrap();
51        let cursor = statement.iter().next().unwrap().unwrap();
52        let db_version = cursor.read::<&str, _>(0);
53        let version = semver::Version::parse(db_version)
54            .expect("Sqlite version should be parsable to semver");
55        let requirement = semver::VersionReq::parse(">=3.42.0").unwrap();
56
57        assert!(
58            requirement.matches(&version),
59            "Sqlite version {} is lower than 3.42.0",
60            version
61        )
62    }
63}