Expand description
Session - Prepared Statement Execution Context
Provides a session-based API for prepared statement execution, offering significant performance benefits for repeated query patterns by caching parsed SQL and performing AST-level parameter binding.
§Performance Benefits
For repeated queries, prepared statements can provide 10-100x speedup by:
- Parsing SQL once and caching the AST
- Binding parameters at the AST level (no re-parsing)
- Reusing the same cached statement for different parameter values
§Usage
use vibesql_executor::Session;
use vibesql_storage::Database;
use vibesql_types::SqlValue;
let mut db = Database::new();
// ... create tables and insert data ...
// Create a session for prepared statement execution
let session = Session::new(&db);
// Prepare a statement (parses SQL once)
let stmt = session.prepare("SELECT * FROM users WHERE id = ?")?;
// Execute with different parameters (reuses parsed AST - no re-parsing!)
let result1 = session.execute_prepared(&stmt, &[SqlValue::Integer(1)])?;
let result2 = session.execute_prepared(&stmt, &[SqlValue::Integer(2)])?;
// For DML statements that modify data, use execute_prepared_mut
let mut session = Session::new(&mut db);
let insert_stmt = session.prepare("INSERT INTO users (id, name) VALUES (?, ?)")?;
session.execute_prepared_mut(&insert_stmt, &[SqlValue::Integer(3), SqlValue::Varchar(arcstr::ArcStr::from("Alice"))])?;§Thread Safety
PreparedStatement is Clone and can be shared across threads via Arc.
The PreparedStatementCache uses internal locking for thread-safe access.
Structs§
- Session
- Session for executing prepared statements
- Session
Mut - Mutable session for executing prepared statements that modify data
Enums§
- Prepared
Execution Result - Execution result for prepared statements
- Session
Error - Error type for session operations