use crate::exec::write_stmt::ExecutionContext;
use crate::exec::ExecutionError;
use crate::txn::state::OperationType;
use async_trait::async_trait;
#[async_trait]
pub trait StatementExecutor: Send + Sync {
fn operation_type(&self) -> OperationType;
fn operation_description(&self, context: &ExecutionContext) -> String;
#[allow(dead_code)] fn requires_write_permission(&self) -> bool {
true }
fn pre_execute(&self, context: &ExecutionContext) -> Result<(), ExecutionError> {
let description = self.operation_description(context);
context.log_operation_to_wal(self.operation_type(), description)?;
Ok(())
}
fn post_execute(
&self,
_context: &ExecutionContext,
_rows_affected: usize,
) -> Result<(), ExecutionError> {
Ok(())
}
}