mirror of
https://github.com/launchbadge/sqlx.git
synced 2026-03-23 18:40:24 +00:00
Support the sqlite auto_vacuum pragma
This commit is contained in:
committed by
Ryan Leckey
parent
62e58f5b1c
commit
c96bcd9f6b
25
sqlx-core/src/sqlite/options/auto_vacuum.rs
Normal file
25
sqlx-core/src/sqlite/options/auto_vacuum.rs
Normal 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
|
||||
}
|
||||
}
|
||||
@@ -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?;
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user