An open API service indexing awesome lists of open source software.

https://github.com/zitsen/unqlite-sys.rs

Rust bindings for UnQlite library.
https://github.com/zitsen/unqlite-sys.rs

Last synced: about 1 year ago
JSON representation

Rust bindings for UnQlite library.

Awesome Lists containing this project

README

          

# unqlite-sys

Rust bindings for [UnQlite][] library.

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

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][apidoc-compile]:

* **enable-threads**: equivalent to `UNQLITE_ENABLE_THREADS` enabled.
* **jx9-disable-builtin-func**: equivalent to `JX9_DISABLE_BUILTIN_FUNC` enabled.
* **jx9-enable-math-fuc**: equivalent to `JX9_ENABLE_MATH_FUNC` enabled.
* **jx9-disable-disk-io**: equivalent to `JX9_DISABLE_DISK_IO` enabled.
* **enable-jx9-hash-io**: equivalent to `UNQLITE_ENABLE_JX9_HASH_IO` enabled.

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 unqlite_lib_config() interface together with one of these verbs:

>> UNQLITE_LIB_CONFIG_THREAD_LEVEL_SINGLE

>> UNQLITE_LIB_CONFIG_THREAD_LEVEL_MULTI

> Platforms others than Windows and UNIX systems must install their own mutex subsystem via
unqlite_lib_config() with a configuration verb set to UNQLITE_LIB_CONFIG_USER_MUTEX. 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::unqlite_lib_config(ffic::UNQLITE_LIB_CONFIG_THREAD_LEVEL_MULTI);
ffi::unqlite_lib_init();
assert_eq!(ffi::unqlite_lib_is_threadsafe(), 1);

// do stuff ...

}
}
```

[UnQlite]: http://unqlite.org
[UnQLite C/C++ API Reference]: http://unqlite.org/c_api.html
[travis-badge]: https://img.shields.io/travis/zitsen/unqlite-sys.rs.svg?style=flat-square
[travis]: https://travis-ci.org/zitsen/unqlite-sys.rs
[release-badge]: https://img.shields.io/crates/v/unqlite-sys.svg?style=flat-square
[downloads]: https://img.shields.io/crates/d/unqlite-sys.svg?style=flat-square
[cargo]: https://crates.io/crates/unqlite-sys
[docs-badge]: https://img.shields.io/badge/API-docs-blue.svg?style=flat-square
[docs]: https://zitsen.github.io/unqlite-sys.rs
[license-badge]: https://img.shields.io/crates/l/unqlite-sys.svg?style=flat-square
[apidoc-compile]: http://unqlite.org/c_api_const.html#compile_time