#![allow(unsafe_code)]
use crate::engine::EngineError;
use crate::panic_guard::FfiBoundary;
use crate::runtime::{EngineContext, FfiPtr};
#[doc(hidden)]
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rust__handler__start_bulk_insert(ctx: *mut EngineContext, rows: u64) {
FfiBoundary::run_void(|| {
unsafe { &mut *ctx }.engine_mut().start_bulk_insert(rows);
});
}
#[doc(hidden)]
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rust__handler__end_bulk_insert(ctx: *mut EngineContext) -> i32 {
FfiBoundary::run(|| {
unsafe { &mut *ctx }.engine_mut().end_bulk_insert()
})
}
#[doc(hidden)]
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rust__handler__start_bulk_update(ctx: *mut EngineContext) -> bool {
FfiBoundary::run_default(true, || {
let engine = unsafe { &mut *ctx }.engine_mut();
engine.start_bulk_update().to_mysql_bool()
})
}
#[doc(hidden)]
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rust__handler__exec_bulk_update(
ctx: *mut EngineContext,
dup_key_found: *mut u32,
) -> i32 {
FfiBoundary::run_default(EngineError::Internal.to_mysql_errno(), || {
let engine = unsafe { &mut *ctx }.engine_mut();
match engine.exec_bulk_update() {
Ok(dups) => {
if !dup_key_found.is_null() {
unsafe { *dup_key_found = dups };
}
0
}
Err(e) => e.to_mysql_errno(),
}
})
}
#[doc(hidden)]
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rust__handler__end_bulk_update(ctx: *mut EngineContext) {
FfiBoundary::run_void(|| {
unsafe { &mut *ctx }.engine_mut().end_bulk_update();
});
}
#[doc(hidden)]
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rust__handler__bulk_update_row(
ctx: *mut EngineContext,
old: *const u8,
old_len: usize,
new_row: *const u8,
new_len: usize,
dup_key_found: *mut u32,
) -> i32 {
FfiBoundary::run_default(EngineError::Internal.to_mysql_errno(), || {
let engine = unsafe { &mut *ctx }.engine_mut();
let old = unsafe { FfiPtr::slice_const(old, old_len) };
let new_row = unsafe { FfiPtr::slice_const(new_row, new_len) };
match engine.bulk_update_row(old, new_row) {
Ok(dups) => {
if !dup_key_found.is_null() {
unsafe { *dup_key_found = dups };
}
0
}
Err(e) => e.to_mysql_errno(),
}
})
}
#[doc(hidden)]
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rust__handler__start_bulk_delete(ctx: *mut EngineContext) -> bool {
FfiBoundary::run_default(true, || {
let engine = unsafe { &mut *ctx }.engine_mut();
engine.start_bulk_delete().to_mysql_bool()
})
}
#[doc(hidden)]
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rust__handler__end_bulk_delete(ctx: *mut EngineContext) -> i32 {
FfiBoundary::run(|| {
unsafe { &mut *ctx }.engine_mut().end_bulk_delete()
})
}