Module session

Module session 

Source
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
SessionMut
Mutable session for executing prepared statements that modify data

Enums§

PreparedExecutionResult
Execution result for prepared statements
SessionError
Error type for session operations