8000
Skip to content

Latest commit

 

History

History
113 lines (94 loc) · 2.68 KB

File metadata and controls

113 lines (94 loc) · 2.68 KB

Memory db

Data is stored in memory, this is the default vfs

use sqlite_wasm_rs::export as ffi;

// open with memory vfs
let mut db = std::ptr::null_mut();
let ret = unsafe {
    ffi::sqlite3_open_v2(
        c"mem.db".as_ptr().cast(),
        &mut db as *mut _,
        ffi::SQLITE_OPEN_READWRITE | ffi::SQLITE_OPEN_CREATE,
        std::ptr::null()
    )
};
assert_eq!(ffi::SQLITE_OK, ret);

Built-in memory db

SQLite officially provides a memdb vfs

use sqlite_wasm_rs::export as ffi;

let mut db = std::ptr::null_mut();
let ret = unsafe {
    ffi::sqlite3_open_v2(
        // The first character of the name must be "/"
        // or else the object will be a separate memdb object.
        c"file:/mem.db?vfs=memdb".as_ptr().cast(),
        &mut db as *mut _,
        ffi::SQLITE_OPEN_READWRITE | ffi::SQLITE_OPEN_CREATE,
        std::ptr::null()
    )
};
assert_eq!(ffi::SQLITE_OK, ret);

Opfs-sahpool

Persistent vfs, ported from sqlite-wasm, see https://sqlite.org/wasm/doc/trunk/persistence.md#vfs-opfs-sahpool for details

use sqlite_wasm_rs::export::{self as ffi, install_opfs_sahpool};

// install opfs-sahpool persistent vfs and set as default vfs
install_opfs_sahpool(None, true).await?;

// open with opfs-sahpool vfs
let mut db = std::ptr::null_mut();
let ret = unsafe {
    ffi::sqlite3_open_v2(
        c"opfs-sahpool.db".as_ptr().cast(),
        &mut db as *mut _,
        ffi::SQLITE_OPEN_READWRITE | ffi::SQLITE_OPEN_CREATE,
        std::ptr::null()
    )
};
assert_eq!(ffi::SQLITE_OK, ret);

let mut db = std::ptr::null_mut();
let ret = unsafe {
    ffi::sqlite3_open_v2(
        c"file:opfs-sahpool.db?vfs=opfs-sahpool".as_ptr().cast(),
        &mut db as *mut _,
        ffi::SQLITE_OPEN_READWRITE | ffi::SQLITE_OPEN_CREATE,
        std::ptr::null()
    )
};
assert_eq!(ffi::SQLITE_OK, ret);

let mut db = std::ptr::null_mut();
let ret = unsafe {
    ffi::sqlite3_open_v2(
        c"opfs-sahpool.db".as_ptr().cast(),
        &mut db as *mut _,
        ffi::SQLITE_OPEN_READWRITE | ffi::SQLITE_OPEN_CREATE,
        c"opfs-sahpool".as_ptr().cast()
    )
};
assert_eq!(ffi::SQLITE_OK, ret);

Support custom vfs and directory

use sqlite_wasm_rs::export::{
    self as ffi,
    install_opfs_sahpool,
    OpfsSAHPoolCfgBuilder
};

let cfg = OpfsSAHPoolCfgBuilder::new()
    .vfs_name("custom-vfs")
    .directory("custom/abc")
    .build();
install_opfs_sahpool(Some(&cfg), true).await?;

let mut db = std::ptr::null_mut();
let ret = unsafe {
    ffi::sqlite3_open_v2(
        c"custom-vfs.db".as_ptr().cast(),
        &mut db as *mut _,
        ffi::SQLITE_OPEN_READWRITE | ffi::SQLITE_OPEN_CREATE,
        std::ptr::null()
    )
};
assert_eq!(ffi::SQLITE_OK, ret);
0