Support the sqlite auto_vacuum pragma

This commit is contained in:
Josh Triplett
2021-02-24 13:32:31 -08:00
committed by Ryan Leckey
parent 62e58f5b1c
commit c96bcd9f6b
3 changed files with 39 additions and 1 deletions

View File

@@ -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
}
}

View File

@@ -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?;

View File

@@ -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
}
}