pub struct UpdateExecutor;Expand description
Executor for UPDATE statements
Implementations§
Source§impl UpdateExecutor
impl UpdateExecutor
Sourcepub fn execute(
stmt: &UpdateStmt,
database: &mut Database,
) -> Result<usize, ExecutorError>
pub fn execute( stmt: &UpdateStmt, database: &mut Database, ) -> Result<usize, ExecutorError>
Execute an UPDATE statement
§Arguments
stmt- The UPDATE statement AST nodedatabase- The database to update
§Returns
Number of rows updated or error
§Examples
use vibesql_ast::{Assignment, Expression, UpdateStmt};
use vibesql_catalog::{ColumnSchema, TableSchema};
use vibesql_executor::UpdateExecutor;
use vibesql_storage::Database;
use vibesql_types::{DataType, SqlValue};
let mut db = Database::new();
// Create table
let schema = TableSchema::new(
"employees".to_string(),
vec![
ColumnSchema::new("id".to_string(), DataType::Integer, false),
ColumnSchema::new("salary".to_string(), DataType::Integer, false),
],
);
db.create_table(schema).unwrap();
// Insert a row
db.insert_row(
"employees",
vibesql_storage::Row::new(vec![SqlValue::Integer(1), SqlValue::Integer(50000)]),
)
.unwrap();
// Update salary
let stmt = UpdateStmt {
with_clause: None,
table_name: "employees".to_string(),
quoted: false,
alias: None,
assignments: vec![Assignment {
column: "salary".to_string(),
value: Expression::Literal(SqlValue::Integer(60000)),
}],
from_clause: None,
where_clause: None,
conflict_clause: None,
};
let count = UpdateExecutor::execute(&stmt, &mut db).unwrap();
assert_eq!(count, 1);Sourcepub fn execute_with_procedural_context(
stmt: &UpdateStmt,
database: &mut Database,
procedural_context: &ExecutionContext,
) -> Result<usize, ExecutorError>
pub fn execute_with_procedural_context( stmt: &UpdateStmt, database: &mut Database, procedural_context: &ExecutionContext, ) -> Result<usize, ExecutorError>
Execute an UPDATE statement with procedural context Supports procedural variables in SET and WHERE clauses
Sourcepub fn execute_with_trigger_context(
stmt: &UpdateStmt,
database: &mut Database,
trigger_context: &TriggerContext<'_>,
) -> Result<usize, ExecutorError>
pub fn execute_with_trigger_context( stmt: &UpdateStmt, database: &mut Database, trigger_context: &TriggerContext<'_>, ) -> Result<usize, ExecutorError>
Execute an UPDATE statement with trigger context This allows UPDATE statements within trigger bodies to reference OLD/NEW pseudo-variables
Sourcepub fn execute_with_schema(
stmt: &UpdateStmt,
database: &mut Database,
schema: Option<&TableSchema>,
) -> Result<usize, ExecutorError>
pub fn execute_with_schema( stmt: &UpdateStmt, database: &mut Database, schema: Option<&TableSchema>, ) -> Result<usize, ExecutorError>
Execute an UPDATE statement with optional pre-fetched schema
This method allows cursor-level schema caching to reduce redundant catalog lookups. If schema is provided, skips the catalog lookup step.
§Arguments
stmt- The UPDATE statement AST nodedatabase- The database to updateschema- Optional pre-fetched schema (from cursor cache)
§Returns
Number of rows updated or error
Auto Trait Implementations§
impl Freeze for UpdateExecutor
impl RefUnwindSafe for UpdateExecutor
impl Send for UpdateExecutor
impl Sync for UpdateExecutor
impl Unpin for UpdateExecutor
impl UnwindSafe for UpdateExecutor
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more