Expand description
Read-only query execution for concurrent access.
This module provides:
ReadOnlyQuerytrait: Aquery(&self)method that enables read-only SQL queries on an immutable database referenceSharedDatabasewrapper: A thread-safe wrapper aroundDatabasethat 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§
- Shared
Database - Thread-safe database wrapper enabling concurrent read queries.
Enums§
- Read
Only Error - Error type for read-only query operations.
Traits§
- Read
Only Query - Extension trait for read-only query execution on
Database.