diff --git a/sqlx-core/src/sqlite/options/auto_vacuum.rs b/sqlx-core/src/sqlite/options/auto_vacuum.rs new file mode 100644 index 000000000..677059b08 --- /dev/null +++ b/sqlx-core/src/sqlite/options/auto_vacuum.rs @@ -0,0 +1,25 @@ +use crate::error::Error; +use std::str::FromStr; + +#[derive(Debug, Clone)] +pub enum SqliteAutoVacuum { + None, + Full, + Incremental, +} + +impl SqliteAutoVacuum { + pub(crate) fn as_str(&self) -> &'static str { + match self { + SqliteAutoVacuum::None => "NONE", + SqliteAutoVacuum::Full => "FULL", + SqliteAutoVacuum::Incremental => "INCREMENTAL", + } + } +} + +impl Default for SqliteAutoVacuum { + fn default() -> Self { + SqliteAutoVacuum::None + } +} diff --git a/sqlx-core/src/sqlite/options/connect.rs b/sqlx-core/src/sqlite/options/connect.rs index 26df1592c..ad8b708b4 100644 --- a/sqlx-core/src/sqlite/options/connect.rs +++ b/sqlx-core/src/sqlite/options/connect.rs @@ -22,11 +22,12 @@ impl ConnectOptions for SqliteConnectOptions { // Note that locking_mode should be set before journal_mode; see // https://www.sqlite.org/wal.html#use_of_wal_without_shared_memory . let init = format!( - "PRAGMA locking_mode = {}; PRAGMA journal_mode = {}; PRAGMA foreign_keys = {}; PRAGMA synchronous = {}", + "PRAGMA locking_mode = {}; PRAGMA journal_mode = {}; PRAGMA foreign_keys = {}; PRAGMA synchronous = {}; PRAGMA auto_vacuum = {}", self.locking_mode.as_str(), self.journal_mode.as_str(), if self.foreign_keys { "ON" } else { "OFF" }, self.synchronous.as_str(), + self.auto_vacuum.as_str(), ); conn.execute(&*init).await?; diff --git a/sqlx-core/src/sqlite/options/mod.rs b/sqlx-core/src/sqlite/options/mod.rs index 0d2a38735..4175498ca 100644 --- a/sqlx-core/src/sqlite/options/mod.rs +++ b/sqlx-core/src/sqlite/options/mod.rs @@ -1,5 +1,6 @@ use std::path::Path; +mod auto_vacuum; mod connect; mod journal_mode; mod locking_mode; @@ -7,6 +8,7 @@ mod parse; mod synchronous; use crate::connection::LogSettings; +pub use auto_vacuum::SqliteAutoVacuum; pub use journal_mode::SqliteJournalMode; pub use locking_mode::SqliteLockingMode; use std::{borrow::Cow, time::Duration}; @@ -59,6 +61,7 @@ pub struct SqliteConnectOptions { pub(crate) busy_timeout: Duration, pub(crate) log_settings: LogSettings, pub(crate) synchronous: SqliteSynchronous, + pub(crate) auto_vacuum: SqliteAutoVacuum, } impl Default for SqliteConnectOptions { @@ -82,6 +85,7 @@ impl SqliteConnectOptions { busy_timeout: Duration::from_secs(5), log_settings: Default::default(), synchronous: SqliteSynchronous::Full, + auto_vacuum: Default::default(), } } @@ -160,4 +164,12 @@ impl SqliteConnectOptions { self.synchronous = synchronous; self } + + /// Sets the [auto_vacuum](https://www.sqlite.org/pragma.html#pragma_auto_vacuum) setting for the database connection. + /// + /// The default auto_vacuum setting is NONE. + pub fn auto_vacuum(mut self, auto_vacuum: SqliteAutoVacuum) -> Self { + self.auto_vacuum = auto_vacuum; + self + } }