#![allow(unsafe_code)]
use core::ffi::c_void;
use super::report::{report_bool, report_i32};
use crate::panic_guard::FfiBoundary;
use crate::runtime::{EngineContext, FfiPtr};
use crate::sys;
unsafe extern "C" {
fn mysql__mysql_string__append(packet: *mut c_void, bytes: *const u8, len: usize);
}
#[doc(hidden)]
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rust__handler__update_create_info(
ctx: *mut EngineContext,
create_info: *const sys::HA_CREATE_INFO,
) {
FfiBoundary::run_void(|| {
let engine = unsafe { &mut *ctx }.engine_mut();
engine.update_create_info(unsafe { create_info.as_ref() });
});
}
#[doc(hidden)]
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rust__handler__append_create_info(
ctx: *mut EngineContext,
packet: *mut c_void,
) {
FfiBoundary::run_void(|| {
if let Some(text) = unsafe { &mut *ctx }.engine_mut().append_create_info() {
unsafe { mysql__mysql_string__append(packet, text.as_ptr(), text.len()) };
}
});
}
#[doc(hidden)]
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rust__handler__use_hidden_primary_key(ctx: *mut EngineContext) {
FfiBoundary::run_void(|| {
unsafe { &mut *ctx }.engine_mut().use_hidden_primary_key();
});
}
#[doc(hidden)]
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rust__handler__set_ha_share_ref(
ctx: *mut EngineContext,
arg: *mut c_void,
out: *mut bool,
) -> bool {
FfiBoundary::run_default(false, || {
report_bool(out, unsafe { &mut *ctx }.engine_mut().set_ha_share_ref(arg))
})
}
#[doc(hidden)]
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rust__handler__cmp_ref(
ctx: *mut EngineContext,
ref1: *const u8,
ref2: *const u8,
len: usize,
out: *mut i32,
) -> bool {
FfiBoundary::run_default(false, || {
let engine = unsafe { &mut *ctx }.engine_mut();
let (a, b) = unsafe {
(
FfiPtr::slice_const(ref1, len),
FfiPtr::slice_const(ref2, len),
)
};
report_i32(out, engine.cmp_ref(a, b).map(|ord| ord as i32))
})
}