mirror of
https://github.com/denoland/deno.git
synced 2025-12-23 08:48:24 +00:00
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
67 lines
1.4 KiB
Rust
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,
|
|
)
|
|
}
|
|
}
|