Module readonly

Module readonly 

Source
Expand description

Read-only query execution for concurrent access.

This module provides:

  • ReadOnlyQuery trait: A query(&self) method that enables read-only SQL queries on an immutable database reference
  • SharedDatabase wrapper: A thread-safe wrapper around Database that manages concurrent read/write access

§Usage

§Using ReadOnlyQuery trait directly

use vibesql_executor::readonly::ReadOnlyQuery;
use vibesql_storage::Database;

let db = Database::new();
// ... set up tables and data ...

// Execute read-only query without requiring &mut self
let result = db.query("SELECT * FROM users WHERE id = 1")?;
println!("Found {} rows", result.rows.len());

§Using SharedDatabase for concurrent access

use vibesql_executor::SharedDatabase;
use vibesql_storage::Database;

let db = SharedDatabase::new(Database::new());

// Concurrent read queries - multiple can execute simultaneously
let result = db.query("SELECT * FROM users WHERE id = 1").await?;

// Write operations - exclusive access
db.write().await.insert_row("users", row)?;

§Thread Safety

The query() method takes &self, enabling concurrent access. Multiple readers can execute SELECT queries simultaneously using the read lock, while writers acquire exclusive access via write lock.

§Error Handling

The query() method only accepts SELECT statements. Any other statement type (INSERT, UPDATE, DELETE, DDL) returns a ReadOnlyError::NotReadOnly error.

Structs§

SharedDatabase
Thread-safe database wrapper enabling concurrent read queries.

Enums§

ReadOnlyError
Error type for read-only query operations.

Traits§

ReadOnlyQuery
Extension trait for read-only query execution on Database.