unqlite-sys

Rust bindings for UnQlite library.

travis-badge release-badge ![downloads] docs-badge license-badge

As its official site says, UnQlite is

An Embeddable NoSQL Database Engine.

Please see UnQLite C/C++ API Reference for full API documents.

Usage

This crate provides several features for UnQlite compile-time options:

To provide the same default behavior as original C does, non of the features is enabled by default. When you want some features, such as enable-threads, just config in Cargo.toml:

toml [dependencies.unqlite-sys] version = "0.3.0" features = [ "enable-threads" ]

For multiple features just add them in toml features array.

Threadsafe

Note that even "enable-threads" is featured in your crate, it's not meant that your code is threadsafe.

When UnQLite has been compiled with threading support then the threading mode can be altered at run-time using the unqlitelibconfig() interface together with one of these verbs:

UNQLITELIBCONFIGTHREADLEVEL_SINGLE

UNQLITELIBCONFIGTHREADLEVEL_MULTI

Platforms others than Windows and UNIX systems must install their own mutex subsystem via unqlitelibconfig() with a configuration verb set to UNQLITELIBCONFIGUSERMUTEX. Otherwise the library is not threadsafe.

Note that you must link UnQLite with the POSIX threads library under UNIX systems (i.e: -lpthread).

To use in multithread cases, that is threadsafe, you may use like this:

```rust extern crate unqlite_sys as ffi; use ffi::constants as ffic;

fn main() { unsafe { ffi::unqlitelibconfig(ffic::UNQLITELIBCONFIGTHREADLEVELMULTI); ffi::unqlitelibinit(); asserteq!(ffi::unqlitelibis_threadsafe(), 1);

    // do stuff ...

}

} ```