diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 240e51e..c187b06 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -64,7 +64,6 @@ jobs: cd rusqlite printf "[patch.crates-io]\n" >> Cargo.toml printf "sqlite-wasm-rs = { path = \"..\" }\n" >> Cargo.toml - printf "libsqlite3-sys = { path = \"libsqlite3-sys\"}\n" >> Cargo.toml WASM_BINDGEN_TEST_TIMEOUT=60 wasm-pack test --node --features modern-full test_clippy: diff --git a/Cargo.toml b/Cargo.toml index 77ce0af..38cd0bb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -64,7 +64,6 @@ include = [ 'LICENSE', ] - [patch.crates-io] sqlite-wasm-rs = { path = "./" } sqlite-wasm-vfs = { path = "./crates/sqlite-wasm-vfs" } diff --git a/crates/rsqlite-vfs/Cargo.toml b/crates/rsqlite-vfs/Cargo.toml index 3b5f52a..f51fa75 100644 --- a/crates/rsqlite-vfs/Cargo.toml +++ b/crates/rsqlite-vfs/Cargo.toml @@ -11,13 +11,5 @@ include.workspace = true hashbrown = { version = "0.16.1", default-features = false, features = ["default-hasher"] } thiserror = { version = "2.0.12", default-features = false } -[target.'cfg(not(all(target_family = "wasm", target_os = "unknown")))'.dependencies] -# libsqlite3-sys doesn't compile without features -# see https://github.com/rusqlite/rusqlite/issues/1205 -libsqlite3-sys = { version = "0.36.0", default-features = false, features = ["vcpkg", "pkg-config"] } - -[target.'cfg(all(target_family = "wasm", target_os = "unknown"))'.dependencies] -wsqlite3-sys = { default-features = false, path = "../wsqlite3-sys" } - [dev-dependencies] rand = { version = "0.9" } diff --git a/crates/rsqlite-vfs/src/ffi.rs b/crates/rsqlite-vfs/src/ffi.rs new file mode 100644 index 0000000..1c64206 --- /dev/null +++ b/crates/rsqlite-vfs/src/ffi.rs @@ -0,0 +1,274 @@ +pub type sqlite3_int64 = ::core::ffi::c_longlong; +pub type sqlite3_filename = *const ::core::ffi::c_char; +pub type sqlite3_syscall_ptr = ::core::option::Option; + +pub const SQLITE_CANTOPEN: i32 = 14; +pub const SQLITE_ERROR: i32 = 1; +pub const SQLITE_IOERR: i32 = 10; +pub const SQLITE_IOERR_SHORT_READ: i32 = 522; +pub const SQLITE_IOERR_DELETE: i32 = 2570; +pub const SQLITE_OK: i32 = 0; +pub const SQLITE_OPEN_DELETEONCLOSE: i32 = 8; +pub const SQLITE_OPEN_MAIN_DB: i32 = 256; +pub const SQLITE_OPEN_READWRITE: i32 = 2; +pub const SQLITE_OPEN_CREATE: i32 = 4; +pub const SQLITE_NOTFOUND: i32 = 12; + +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct sqlite3_file { + pub pMethods: *const sqlite3_io_methods, +} + +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct sqlite3_io_methods { + pub iVersion: ::core::ffi::c_int, + pub xClose: ::core::option::Option< + unsafe extern "C" fn(arg1: *mut sqlite3_file) -> ::core::ffi::c_int, + >, + pub xRead: ::core::option::Option< + unsafe extern "C" fn( + arg1: *mut sqlite3_file, + arg2: *mut ::core::ffi::c_void, + iAmt: ::core::ffi::c_int, + iOfst: sqlite3_int64, + ) -> ::core::ffi::c_int, + >, + pub xWrite: ::core::option::Option< + unsafe extern "C" fn( + arg1: *mut sqlite3_file, + arg2: *const ::core::ffi::c_void, + iAmt: ::core::ffi::c_int, + iOfst: sqlite3_int64, + ) -> ::core::ffi::c_int, + >, + pub xTruncate: ::core::option::Option< + unsafe extern "C" fn( + arg1: *mut sqlite3_file, + size: sqlite3_int64, + ) -> ::core::ffi::c_int, + >, + pub xSync: ::core::option::Option< + unsafe extern "C" fn( + arg1: *mut sqlite3_file, + flags: ::core::ffi::c_int, + ) -> ::core::ffi::c_int, + >, + pub xFileSize: ::core::option::Option< + unsafe extern "C" fn( + arg1: *mut sqlite3_file, + pSize: *mut sqlite3_int64, + ) -> ::core::ffi::c_int, + >, + pub xLock: ::core::option::Option< + unsafe extern "C" fn( + arg1: *mut sqlite3_file, + arg2: ::core::ffi::c_int, + ) -> ::core::ffi::c_int, + >, + pub xUnlock: ::core::option::Option< + unsafe extern "C" fn( + arg1: *mut sqlite3_file, + arg2: ::core::ffi::c_int, + ) -> ::core::ffi::c_int, + >, + pub xCheckReservedLock: ::core::option::Option< + unsafe extern "C" fn( + arg1: *mut sqlite3_file, + pResOut: *mut ::core::ffi::c_int, + ) -> ::core::ffi::c_int, + >, + pub xFileControl: ::core::option::Option< + unsafe extern "C" fn( + arg1: *mut sqlite3_file, + op: ::core::ffi::c_int, + pArg: *mut ::core::ffi::c_void, + ) -> ::core::ffi::c_int, + >, + pub xSectorSize: ::core::option::Option< + unsafe extern "C" fn(arg1: *mut sqlite3_file) -> ::core::ffi::c_int, + >, + pub xDeviceCharacteristics: ::core::option::Option< + unsafe extern "C" fn(arg1: *mut sqlite3_file) -> ::core::ffi::c_int, + >, + pub xShmMap: ::core::option::Option< + unsafe extern "C" fn( + arg1: *mut sqlite3_file, + iPg: ::core::ffi::c_int, + pgsz: ::core::ffi::c_int, + arg2: ::core::ffi::c_int, + arg3: *mut *mut ::core::ffi::c_void, + ) -> ::core::ffi::c_int, + >, + pub xShmLock: ::core::option::Option< + unsafe extern "C" fn( + arg1: *mut sqlite3_file, + offset: ::core::ffi::c_int, + n: ::core::ffi::c_int, + flags: ::core::ffi::c_int, + ) -> ::core::ffi::c_int, + >, + pub xShmBarrier: ::core::option::Option< + unsafe extern "C" fn(arg1: *mut sqlite3_file), + >, + pub xShmUnmap: ::core::option::Option< + unsafe extern "C" fn( + arg1: *mut sqlite3_file, + deleteFlag: ::core::ffi::c_int, + ) -> ::core::ffi::c_int, + >, + pub xFetch: ::core::option::Option< + unsafe extern "C" fn( + arg1: *mut sqlite3_file, + iOfst: sqlite3_int64, + iAmt: ::core::ffi::c_int, + pp: *mut *mut ::core::ffi::c_void, + ) -> ::core::ffi::c_int, + >, + pub xUnfetch: ::core::option::Option< + unsafe extern "C" fn( + arg1: *mut sqlite3_file, + iOfst: sqlite3_int64, + p: *mut ::core::ffi::c_void, + ) -> ::core::ffi::c_int, + >, +} + +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct sqlite3_vfs { + pub iVersion: ::core::ffi::c_int, + pub szOsFile: ::core::ffi::c_int, + pub mxPathname: ::core::ffi::c_int, + pub pNext: *mut sqlite3_vfs, + pub zName: *const ::core::ffi::c_char, + pub pAppData: *mut ::core::ffi::c_void, + pub xOpen: ::core::option::Option< + unsafe extern "C" fn( + arg1: *mut sqlite3_vfs, + zName: sqlite3_filename, + arg2: *mut sqlite3_file, + flags: ::core::ffi::c_int, + pOutFlags: *mut ::core::ffi::c_int, + ) -> ::core::ffi::c_int, + >, + pub xDelete: ::core::option::Option< + unsafe extern "C" fn( + arg1: *mut sqlite3_vfs, + zName: *const ::core::ffi::c_char, + syncDir: ::core::ffi::c_int, + ) -> ::core::ffi::c_int, + >, + pub xAccess: ::core::option::Option< + unsafe extern "C" fn( + arg1: *mut sqlite3_vfs, + zName: *const ::core::ffi::c_char, + flags: ::core::ffi::c_int, + pResOut: *mut ::core::ffi::c_int, + ) -> ::core::ffi::c_int, + >, + pub xFullPathname: ::core::option::Option< + unsafe extern "C" fn( + arg1: *mut sqlite3_vfs, + zName: *const ::core::ffi::c_char, + nOut: ::core::ffi::c_int, + zOut: *mut ::core::ffi::c_char, + ) -> ::core::ffi::c_int, + >, + pub xDlOpen: ::core::option::Option< + unsafe extern "C" fn( + arg1: *mut sqlite3_vfs, + zFilename: *const ::core::ffi::c_char, + ) -> *mut ::core::ffi::c_void, + >, + pub xDlError: ::core::option::Option< + unsafe extern "C" fn( + arg1: *mut sqlite3_vfs, + nByte: ::core::ffi::c_int, + zErrMsg: *mut ::core::ffi::c_char, + ), + >, + pub xDlSym: ::core::option::Option< + unsafe extern "C" fn( + arg1: *mut sqlite3_vfs, + arg2: *mut ::core::ffi::c_void, + zSymbol: *const ::core::ffi::c_char, + ) -> ::core::option::Option< + unsafe extern "C" fn( + arg1: *mut sqlite3_vfs, + arg2: *mut ::core::ffi::c_void, + zSymbol: *const ::core::ffi::c_char, + ), + >, + >, + pub xDlClose: ::core::option::Option< + unsafe extern "C" fn(arg1: *mut sqlite3_vfs, arg2: *mut ::core::ffi::c_void), + >, + pub xRandomness: ::core::option::Option< + unsafe extern "C" fn( + arg1: *mut sqlite3_vfs, + nByte: ::core::ffi::c_int, + zOut: *mut ::core::ffi::c_char, + ) -> ::core::ffi::c_int, + >, + pub xSleep: ::core::option::Option< + unsafe extern "C" fn( + arg1: *mut sqlite3_vfs, + microseconds: ::core::ffi::c_int, + ) -> ::core::ffi::c_int, + >, + pub xCurrentTime: ::core::option::Option< + unsafe extern "C" fn( + arg1: *mut sqlite3_vfs, + arg2: *mut f64, + ) -> ::core::ffi::c_int, + >, + pub xGetLastError: ::core::option::Option< + unsafe extern "C" fn( + arg1: *mut sqlite3_vfs, + arg2: ::core::ffi::c_int, + arg3: *mut ::core::ffi::c_char, + ) -> ::core::ffi::c_int, + >, + pub xCurrentTimeInt64: ::core::option::Option< + unsafe extern "C" fn( + arg1: *mut sqlite3_vfs, + arg2: *mut sqlite3_int64, + ) -> ::core::ffi::c_int, + >, + pub xSetSystemCall: ::core::option::Option< + unsafe extern "C" fn( + arg1: *mut sqlite3_vfs, + zName: *const ::core::ffi::c_char, + arg2: sqlite3_syscall_ptr, + ) -> ::core::ffi::c_int, + >, + pub xGetSystemCall: ::core::option::Option< + unsafe extern "C" fn( + arg1: *mut sqlite3_vfs, + zName: *const ::core::ffi::c_char, + ) -> sqlite3_syscall_ptr, + >, + pub xNextSystemCall: ::core::option::Option< + unsafe extern "C" fn( + arg1: *mut sqlite3_vfs, + zName: *const ::core::ffi::c_char, + ) -> *const ::core::ffi::c_char, + >, +} + +unsafe extern "C" { + pub fn sqlite3_vfs_find(zVfsName: *const ::core::ffi::c_char) -> *mut sqlite3_vfs; +} + +unsafe extern "C" { + pub fn sqlite3_vfs_register( + arg1: *mut sqlite3_vfs, + makeDflt: ::core::ffi::c_int, + ) -> ::core::ffi::c_int; +} + +unsafe extern "C" { + pub fn sqlite3_vfs_unregister(arg1: *mut sqlite3_vfs) -> ::core::ffi::c_int; +} diff --git a/crates/rsqlite-vfs/src/lib.rs b/crates/rsqlite-vfs/src/lib.rs index b74f27e..a56021e 100644 --- a/crates/rsqlite-vfs/src/lib.rs +++ b/crates/rsqlite-vfs/src/lib.rs @@ -3,20 +3,14 @@ //! This crate also contains a simple operating system independent memvfs implementation #![no_std] #![allow(non_snake_case)] +#![allow(non_camel_case_types)] extern crate alloc; -#[cfg(not(all(target_family = "wasm", target_os = "unknown")))] -extern crate libsqlite3_sys as bindings; -#[cfg(all(target_family = "wasm", target_os = "unknown"))] -extern crate wsqlite3_sys as bindings; - -use self::bindings::*; - -// libsqlite3-sys misses this type -#[cfg(not(all(target_family = "wasm", target_os = "unknown")))] -#[allow(non_camel_case_types)] -type sqlite3_filename = *const ::core::ffi::c_char; +/// sqlite3 types to implement VFS. +#[rustfmt::skip] +pub mod ffi; +pub mod memvfs; use alloc::string::String; use alloc::vec::Vec; @@ -24,8 +18,7 @@ use alloc::{boxed::Box, ffi::CString}; use alloc::{format, vec}; use core::time::Duration; use core::{cell::RefCell, ffi::CStr, ops::Deref}; - -pub mod memvfs; +use ffi::*; /// A macro to return a specific SQLite error code if a condition is true. /// @@ -456,6 +449,13 @@ pub trait VfsStore { ) -> VfsResult; } +/// Platform implementation +pub trait OsCallback { + fn sleep(dur: Duration); + fn random(buf: &mut [u8]); + fn epoch_timestamp_in_ms() -> i64; +} + /// A trait that abstracts the `sqlite3_vfs` struct, allowing for a more idiomatic Rust implementation. #[allow(clippy::missing_safety_doc)] pub trait SQLiteVfs { @@ -1056,12 +1056,12 @@ pub mod test_suite { } } -#[cfg(all(test, target_arch = "wasm32"))] +#[cfg(test)] mod tests { - use super::{MemChunksFile, VfsFile}; - use wasm_bindgen_test::wasm_bindgen_test; + use crate::random_name; + use crate::{MemChunksFile, VfsFile}; - #[wasm_bindgen_test] + #[test] fn test_chunks_file() { let mut file = MemChunksFile::new(512); file.write(&[], 0).unwrap(); @@ -1109,17 +1109,16 @@ mod tests { assert!(file.size().unwrap() == 0); assert!(file.chunks.len() == 0); } -} -#[cfg(not(all(test, target_arch = "wasm32")))] -#[test] -fn random_name_is_valid() { - fn random(buf: &mut [u8]) { - rand::fill(buf); + #[test] + fn random_name_is_valid() { + fn random(buf: &mut [u8]) { + rand::fill(buf); + } + let name_1 = random_name(random); + let name_2 = random_name(random); + assert!(name_1.is_ascii(), "Expected an ascii-name: `{name_1}`"); + assert!(name_2.is_ascii(), "Expected an ascii-name: `{name_2}`"); + assert_ne!(name_1, name_2); } - let name_1 = random_name(random); - let name_2 = random_name(random); - assert!(name_1.is_ascii(), "Expected an ascii-name: `{name_1}`"); - assert!(name_2.is_ascii(), "Expected an ascii-name: `{name_2}`"); - assert_ne!(name_1, name_2); } diff --git a/crates/rsqlite-vfs/src/memvfs.rs b/crates/rsqlite-vfs/src/memvfs.rs index c90bf3a..45d9d48 100644 --- a/crates/rsqlite-vfs/src/memvfs.rs +++ b/crates/rsqlite-vfs/src/memvfs.rs @@ -1,11 +1,6 @@ //! memory vfs, used as the default VFS //! -//! ```rust -//! # #[cfg(not(all(target_family = "wasm", target_os = "unknown")))] -//! # extern crate libsqlite3_sys as ffi; -//! # #[cfg(all(target_family = "wasm", target_os = "unknown"))] -//! # extern crate wsqlite3_sys as ffi; -//! +//! ```ignore //! fn open_db() { //! // open with memory vfs //! let mut db = core::ptr::null_mut(); @@ -26,14 +21,12 @@ //! //! Refresh the page and data will be lost, and you also need to //! pay attention to the memory size limit of the browser page. -#[cfg(not(all(target_family = "wasm", target_os = "unknown")))] -extern crate libsqlite3_sys as bindings; -#[cfg(all(target_family = "wasm", target_os = "unknown"))] -extern crate wsqlite3_sys as bindings; + +use crate::ffi as bindings; use crate::{ - check_import_db, ImportDbError, MemChunksFile, SQLiteIoMethods, SQLiteVfs, SQLiteVfsFile, - VfsAppData, VfsError, VfsFile, VfsResult, VfsStore, + check_import_db, ImportDbError, MemChunksFile, OsCallback, SQLiteIoMethods, SQLiteVfs, + SQLiteVfsFile, VfsAppData, VfsError, VfsFile, VfsResult, VfsStore, }; use alloc::boxed::Box; @@ -99,12 +92,6 @@ impl VfsFile for MemFile { type MemAppData = RefCell>; -pub trait OsCallback { - fn sleep(dur: Duration); - fn random(buf: &mut [u8]); - fn epoch_timestamp_in_ms() -> i64; -} - #[derive(Copy, Clone, Default)] struct MemStore; diff --git a/crates/sqlite-wasm-vfs/src/relaxed_idb.rs b/crates/sqlite-wasm-vfs/src/relaxed_idb.rs index 870b22c..5655654 100644 --- a/crates/sqlite-wasm-vfs/src/relaxed_idb.rs +++ b/crates/sqlite-wasm-vfs/src/relaxed_idb.rs @@ -44,16 +44,16 @@ //! It is particularly important to note that using it on multiple pages may cause DB corruption. //! It is recommended to use it in SharedWorker. -use sqlite_wasm_rs::memvfs::OsCallback; -use sqlite_wasm_rs::utils::{ - check_db_and_page_size, check_import_db, register_vfs, registered_vfs, ImportDbError, - MemChunksFile, RegisterVfsError, SQLiteIoMethods, SQLiteVfs, SQLiteVfsFile, VfsAppData, - VfsError, VfsFile, VfsResult, VfsStore, -}; use sqlite_wasm_rs::{ - bail, check_option, check_result, sqlite3_file, sqlite3_vfs, WasmOsCallback, SQLITE_ERROR, - SQLITE_FCNTL_COMMIT_PHASETWO, SQLITE_FCNTL_PRAGMA, SQLITE_FCNTL_SYNC, SQLITE_IOERR, - SQLITE_IOERR_DELETE, SQLITE_NOTFOUND, SQLITE_OK, SQLITE_OPEN_MAIN_DB, + utils::{ + bail, check_db_and_page_size, check_import_db, check_option, check_result, register_vfs, + registered_vfs, sqlite3_file, sqlite3_vfs, ImportDbError, MemChunksFile, OsCallback, + RegisterVfsError, SQLiteIoMethods, SQLiteVfs, SQLiteVfsFile, VfsAppData, VfsError, VfsFile, + VfsResult, VfsStore, + }, + WasmOsCallback, SQLITE_ERROR, SQLITE_FCNTL_COMMIT_PHASETWO, SQLITE_FCNTL_PRAGMA, + SQLITE_FCNTL_SYNC, SQLITE_IOERR, SQLITE_IOERR_DELETE, SQLITE_NOTFOUND, SQLITE_OK, + SQLITE_OPEN_MAIN_DB, }; use std::cell::RefCell; use std::time::Duration; diff --git a/crates/sqlite-wasm-vfs/src/sahpool.rs b/crates/sqlite-wasm-vfs/src/sahpool.rs index 3f4c9c2..2939b7f 100644 --- a/crates/sqlite-wasm-vfs/src/sahpool.rs +++ b/crates/sqlite-wasm-vfs/src/sahpool.rs @@ -32,13 +32,13 @@ //! [`opfs-explorer`](https://chromewebstore.google.com/detail/opfs-explorer/acndjpgkpaclldomagafnognkcgjignd) //! plugin to browse files. -use sqlite_wasm_rs::memvfs::OsCallback; -use sqlite_wasm_rs::utils::{ - check_import_db, register_vfs, registered_vfs, ImportDbError, RegisterVfsError, - SQLiteIoMethods, SQLiteVfs, SQLiteVfsFile, VfsAppData, VfsError, VfsFile, VfsResult, VfsStore, -}; use sqlite_wasm_rs::{ - sqlite3_file, sqlite3_filename, sqlite3_vfs, sqlite3_vfs_register, sqlite3_vfs_unregister, + utils::{ + check_import_db, register_vfs, registered_vfs, sqlite3_file, sqlite3_filename, sqlite3_vfs, + sqlite3_vfs_register, sqlite3_vfs_unregister, ImportDbError, OsCallback, RegisterVfsError, + SQLiteIoMethods, SQLiteVfs, SQLiteVfsFile, VfsAppData, VfsError, VfsFile, VfsResult, + VfsStore, + }, WasmOsCallback, SQLITE_CANTOPEN, SQLITE_ERROR, SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN, SQLITE_IOERR, SQLITE_IOERR_DELETE, SQLITE_OK, SQLITE_OPEN_DELETEONCLOSE, SQLITE_OPEN_MAIN_DB, SQLITE_OPEN_MAIN_JOURNAL, SQLITE_OPEN_SUPER_JOURNAL, SQLITE_OPEN_WAL, diff --git a/examples/implement-a-vfs/src/lib.rs b/examples/implement-a-vfs/src/lib.rs index f8522c7..f37235d 100644 --- a/examples/implement-a-vfs/src/lib.rs +++ b/examples/implement-a-vfs/src/lib.rs @@ -2,11 +2,11 @@ //! //! We want to implement a simple memory VFS -use sqlite_wasm_rs::memvfs::OsCallback; use sqlite_wasm_rs::{ - sqlite3_close, sqlite3_exec, sqlite3_file, sqlite3_open_v2, sqlite3_vfs, + sqlite3_close, sqlite3_exec, sqlite3_open_v2, utils::{ - register_vfs, SQLiteIoMethods, SQLiteVfs, SQLiteVfsFile, VfsFile, VfsResult, VfsStore, + register_vfs, sqlite3_file, sqlite3_vfs, OsCallback, SQLiteIoMethods, SQLiteVfs, + SQLiteVfsFile, VfsFile, VfsResult, VfsStore, }, SQLITE_OK, SQLITE_OPEN_CREATE, SQLITE_OPEN_READWRITE, }; diff --git a/src/lib.rs b/src/lib.rs index 9a8ddfe..17bebc4 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,8 +4,6 @@ extern crate alloc; -pub use rsqlite_vfs::memvfs; -pub use wsqlite3_sys as bindings; mod shim; /// Low-level utilities, traits, and macros for implementing custom SQLite Virtual File Systems (VFS) @@ -13,11 +11,13 @@ pub mod utils { #[doc(inline)] pub use rsqlite_vfs::{ bail, check_db_and_page_size, check_import_db, check_option, check_result, random_name, - register_vfs, registered_vfs, ImportDbError, MemChunksFile, RegisterVfsError, + register_vfs, registered_vfs, ImportDbError, MemChunksFile, OsCallback, RegisterVfsError, SQLiteIoMethods, SQLiteVfs, SQLiteVfsFile, VfsAppData, VfsError, VfsFile, VfsResult, VfsStore, SQLITE3_HEADER, }; + pub use rsqlite_vfs::ffi::*; + #[doc(hidden)] pub use rsqlite_vfs::test_suite; } @@ -26,8 +26,8 @@ pub mod utils { pub use self::utils::{bail, check_option, check_result}; /// Raw C-style bindings to the underlying `libsqlite3` library. -pub use bindings::*; +pub use wsqlite3_sys::*; pub use self::shim::WasmOsCallback; /// In-memory VFS implementation. -pub use memvfs::{MemVfsError, MemVfsUtil}; +pub use rsqlite_vfs::memvfs::{MemVfsError, MemVfsUtil}; diff --git a/src/shim.rs b/src/shim.rs index 04c5b25..52a96bd 100644 --- a/src/shim.rs +++ b/src/shim.rs @@ -5,7 +5,7 @@ use core::ptr; use core::time::Duration; use js_sys::{Date, Math, Number}; -use rsqlite_vfs::memvfs::OsCallback; +use rsqlite_vfs::OsCallback; use wasm_bindgen::prelude::wasm_bindgen; use wasm_bindgen::JsValue; @@ -256,8 +256,8 @@ pub unsafe extern "C" fn rust_sqlite_wasm_calloc(num: c_size_t, size: c_size_t) /// default VFS for the environment, which in this case is the in-memory VFS. #[no_mangle] pub unsafe extern "C" fn sqlite3_os_init() -> core::ffi::c_int { - crate::memvfs::install::(); - crate::bindings::SQLITE_OK + rsqlite_vfs::memvfs::install::(); + wsqlite3_sys::SQLITE_OK } /// SQLite OS shutdown entry point. @@ -266,8 +266,8 @@ pub unsafe extern "C" fn sqlite3_os_init() -> core::ffi::c_int { /// any resources allocated by `sqlite3_os_init`. #[no_mangle] pub unsafe extern "C" fn sqlite3_os_end() -> core::ffi::c_int { - crate::memvfs::uninstall(); - crate::bindings::SQLITE_OK + rsqlite_vfs::memvfs::uninstall(); + wsqlite3_sys::SQLITE_OK } #[cfg(test)]