rust-web-server 17.48.0

An HTTP web framework, reverse proxy, and server for Rust supporting HTTP/1.1, HTTP/2, and HTTP/3. Config-driven proxy mode (rws.config.toml with [[route]] / [[upstream]]) or library crate. No third-party HTTP dependencies.
Documentation
---
title: In-memory SQLite
description: Use DbPool::memory() for zero-config isolated SQLite databases ideal for tests and prototyping.
---

The `model-sqlite` feature ships an ergonomic constructor that opens a SQLite `":memory:"` database without a file path, hostname, or credentials. All operations are `async fn`.

## DbPool::memory() — isolated in-memory database

`DbPool::memory().await` creates a `sqlx::Pool` with `max_connections = 1` connected to `sqlite::memory:`. Each call returns a **separate, independent** in-memory database — ideal for tests that must not share state.

```rust
use rust_web_server::model::{DbPool, Value};

let pool = DbPool::memory().await.unwrap();

pool.execute(
    "CREATE TABLE items (id INTEGER PRIMARY KEY, name TEXT)",
    &[],
).await.unwrap();

pool.execute(
    "INSERT INTO items (name) VALUES (?)",
    &[Value::Text("apple".into())],
).await.unwrap();

let rows = pool.query_rows("SELECT name FROM items", &[]).await.unwrap();
assert_eq!(1, rows.len());
let name: String = rows[0].get("name").unwrap();
assert_eq!("apple", name);
```

## Test isolation

Each `DbPool::memory().await` call is a new, empty database. Two pools have no shared state:

```rust
async fn test_db() -> DbPool {
    let pool = DbPool::memory().await.unwrap();
    pool.execute("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)", &[]).await.unwrap();
    pool
}

// Test A
let pool_a = test_db().await;
pool_a.execute("INSERT INTO users (name) VALUES (?)", &[Value::Text("Alice".into())]).await.unwrap();

// Test B — completely isolated
let pool_b = test_db().await;
let rows = pool_b.query_rows("SELECT * FROM users", &[]).await.unwrap();
assert!(rows.is_empty());  // Alice is only in pool_a's database
```

Use `#[tokio::test]` for async tests:

```rust
#[tokio::test]
async fn test_example() {
    let pool = DbPool::memory().await.unwrap();
    pool.execute("CREATE TABLE t (v TEXT)", &[]).await.unwrap();
    let rows = pool.query_rows("SELECT * FROM t", &[]).await.unwrap();
    assert!(rows.is_empty());
}
```

## Feature requirement

`DbPool::memory()` requires the `model-sqlite` feature, which also implies `http2` (tokio runtime):

```toml
[dependencies]
rust-web-server = { version = "17", features = ["model-sqlite"] }
```