deno/tests/sqlite_extension_test/src/lib.rs
Nathan Whitaker 9379a74e08
Some checks are pending
ci / publish canary (push) Blocked by required conditions
ci / pre-build (push) Waiting to run
ci / test debug linux-aarch64 (push) Blocked by required conditions
ci / test release linux-aarch64 (push) Blocked by required conditions
ci / test debug macos-aarch64 (push) Blocked by required conditions
ci / test release macos-aarch64 (push) Blocked by required conditions
ci / bench release linux-x86_64 (push) Blocked by required conditions
ci / lint debug linux-x86_64 (push) Blocked by required conditions
ci / lint debug macos-x86_64 (push) Blocked by required conditions
ci / lint debug windows-x86_64 (push) Blocked by required conditions
ci / test debug linux-x86_64 (push) Blocked by required conditions
ci / test release linux-x86_64 (push) Blocked by required conditions
ci / test debug macos-x86_64 (push) Blocked by required conditions
ci / test release macos-x86_64 (push) Blocked by required conditions
ci / test debug windows-x86_64 (push) Blocked by required conditions
ci / test release windows-x86_64 (push) Blocked by required conditions
ci / build libs (push) Blocked by required conditions
chore: update to edition 2024 (#29923)
2025-07-02 17:59:39 -07:00

67 lines
1.4 KiB
Rust

// Copyright 2018-2025 the Deno authors. MIT license.
#![allow(clippy::undocumented_unsafe_blocks)]
#![allow(clippy::missing_safety_doc)]
#![allow(clippy::macro_metavars_in_unsafe)]
use std::os::raw::c_char;
use std::os::raw::c_int;
use rusqlite::ffi::*;
#[unsafe(no_mangle)]
#[allow(non_upper_case_globals)]
pub static mut sqlite3_api: *const sqlite3_api_routines = std::ptr::null();
#[macro_export]
macro_rules! SQLITE3_EXTENSION_INIT2 {
($api:expr) => {
#[allow(unused_unsafe)]
unsafe {
sqlite3_api = $api;
}
};
}
unsafe extern "C" fn test_func(
context: *mut sqlite3_context,
argc: c_int,
argv: *mut *mut sqlite3_value,
) {
unsafe {
if argc != 1 {
sqlite3_result_error(
context,
c"test_func() requires exactly 1 argument".as_ptr() as *const c_char,
-1,
);
return;
}
let arg = *argv;
sqlite3_result_value(context, arg);
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn sqlite3_extension_init(
db: *mut sqlite3,
_pz_err_msg: *mut *mut c_char,
p_api: *const sqlite3_api_routines,
) -> c_int {
unsafe {
SQLITE3_EXTENSION_INIT2!(p_api);
sqlite3_create_function_v2(
db,
c"test_func".as_ptr() as *const c_char,
1,
SQLITE_UTF8 | SQLITE_DETERMINISTIC,
std::ptr::null_mut(),
Some(test_func),
None,
None,
None,
)
}
}