#![allow(unsafe_code)]
use super::report::{report_bool, report_i32};
use crate::panic_guard::FfiBoundary;
use crate::runtime::EngineContext;
use crate::sys;
#[doc(hidden)]
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rust__handler__check_if_supported_inplace_alter(
ctx: *mut EngineContext,
altered_table: *const sys::TABLE,
alter_info: *const sys::AlterInplaceInfo,
out: *mut i32,
) -> bool {
FfiBoundary::run_default(false, || {
let engine = unsafe { &mut *ctx }.engine_mut();
let (table, info) = unsafe { (altered_table.as_ref(), alter_info.as_ref()) };
report_i32(out, engine.check_if_supported_inplace_alter(table, info))
})
}
#[doc(hidden)]
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rust__handler__prepare_inplace_alter_table(
ctx: *mut EngineContext,
altered_table: *const sys::TABLE,
alter_info: *const sys::AlterInplaceInfo,
old_table_def: *const sys::DdTable,
new_table_def: *const sys::DdTable,
out: *mut bool,
) -> bool {
FfiBoundary::run_default(false, || {
let engine = unsafe { &mut *ctx }.engine_mut();
let (table, info, old, new) = unsafe {
(
altered_table.as_ref(),
alter_info.as_ref(),
old_table_def.as_ref(),
new_table_def.as_ref(),
)
};
report_bool(
out,
engine.prepare_inplace_alter_table(table, info, old, new),
)
})
}
#[doc(hidden)]
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rust__handler__inplace_alter_table(
ctx: *mut EngineContext,
altered_table: *const sys::TABLE,
alter_info: *const sys::AlterInplaceInfo,
old_table_def: *const sys::DdTable,
new_table_def: *const sys::DdTable,
out: *mut bool,
) -> bool {
FfiBoundary::run_default(false, || {
let engine = unsafe { &mut *ctx }.engine_mut();
let (table, info, old, new) = unsafe {
(
altered_table.as_ref(),
alter_info.as_ref(),
old_table_def.as_ref(),
new_table_def.as_ref(),
)
};
report_bool(out, engine.inplace_alter_table(table, info, old, new))
})
}
#[doc(hidden)]
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rust__handler__commit_inplace_alter_table(
ctx: *mut EngineContext,
altered_table: *const sys::TABLE,
alter_info: *const sys::AlterInplaceInfo,
commit: bool,
old_table_def: *const sys::DdTable,
new_table_def: *const sys::DdTable,
out: *mut bool,
) -> bool {
FfiBoundary::run_default(false, || {
let engine = unsafe { &mut *ctx }.engine_mut();
let (table, info, old, new) = unsafe {
(
altered_table.as_ref(),
alter_info.as_ref(),
old_table_def.as_ref(),
new_table_def.as_ref(),
)
};
report_bool(
out,
engine.commit_inplace_alter_table(table, info, commit, old, new),
)
})
}
#[doc(hidden)]
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rust__handler__notify_table_changed(
ctx: *mut EngineContext,
alter_info: *const sys::AlterInplaceInfo,
) {
FfiBoundary::run_void(|| {
let engine = unsafe { &mut *ctx }.engine_mut();
engine.notify_table_changed(unsafe { alter_info.as_ref() });
});
}
#[doc(hidden)]
#[unsafe(no_mangle)]
pub unsafe extern "C" fn rust__handler__check_if_incompatible_data(
ctx: *mut EngineContext,
create_info: *const sys::HA_CREATE_INFO,
table_changes: u32,
out: *mut bool,
) -> bool {
FfiBoundary::run_default(false, || {
let engine = unsafe { &mut *ctx }.engine_mut();
let create_info = unsafe { create_info.as_ref() };
report_bool(
out,
engine.check_if_incompatible_data(create_info, table_changes),
)
})
}