pub struct TruncateTableExecutor;Expand description
Executor for TRUNCATE TABLE statements
Implementations§
Source§impl TruncateTableExecutor
impl TruncateTableExecutor
Sourcepub fn execute(
stmt: &TruncateTableStmt,
database: &mut Database,
) -> Result<usize, ExecutorError>
pub fn execute( stmt: &TruncateTableStmt, database: &mut Database, ) -> Result<usize, ExecutorError>
Execute a TRUNCATE TABLE statement
§Arguments
stmt- The TRUNCATE TABLE statement AST nodedatabase- The database to truncate the table(s) in
§Returns
Total number of rows deleted from all tables or error
§Behavior
Supports truncating multiple tables in a single statement with all-or-nothing semantics:
- Validates all tables first (existence, privileges, constraints)
- Only truncates if all validations pass
- IF EXISTS: skips non-existent tables, continues with existing ones
§Examples
use vibesql_ast::{ColumnDef, CreateTableStmt, TruncateTableStmt};
use vibesql_executor::{CreateTableExecutor, TruncateTableExecutor};
use vibesql_storage::{Database, Row};
use vibesql_types::{DataType, SqlValue};
let mut db = Database::new();
let create_stmt = CreateTableStmt {
if_not_exists: false,
temporary: false,
table_name: "users".to_string(),
columns: vec![ColumnDef {
name: "id".to_string(),
data_type: DataType::Integer,
nullable: false,
constraints: vec![],
default_value: None,
comment: None,
generated_expr: None, is_exact_integer_type: false,
}],
table_constraints: vec![],
table_options: vec![],
quoted: false,
name_source: None,
as_query: None, without_rowid: false,
};
CreateTableExecutor::execute(&create_stmt, &mut db).unwrap();
// Insert some rows
db.insert_row("users", Row::new(vec![SqlValue::Integer(1)])).unwrap();
db.insert_row("users", Row::new(vec![SqlValue::Integer(2)])).unwrap();
let stmt = TruncateTableStmt {
table_names: vec!["users".to_string()],
if_exists: false,
cascade: None,
};
let result = TruncateTableExecutor::execute(&stmt, &mut db);
assert_eq!(result.unwrap(), 2); // 2 rows deleted
assert_eq!(db.get_table("users").unwrap().row_count(), 0);Auto Trait Implementations§
impl Freeze for TruncateTableExecutor
impl RefUnwindSafe for TruncateTableExecutor
impl Send for TruncateTableExecutor
impl Sync for TruncateTableExecutor
impl Unpin for TruncateTableExecutor
impl UnsafeUnpin for TruncateTableExecutor
impl UnwindSafe for TruncateTableExecutor
Blanket Implementations§
impl<T> Allocation for T
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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