# NAME

UnQLite - Perl bindings for UnQLite

# SYNOPSIS

   use UnQLite;

   my $db = UnQLite->open('foo.db', UnQLite::UNQLITE_OPEN_READWRITE|UnQLite::UNQLITE_OPEN_CREATE);
   $db->kv_store('foo', 'bar');
   say $db->kv_fetch('foo'); # => bar
   $db->kv_delete('foo');
   undef $db; # close database

   # tie interface
   tie my %hash, 'UnQLite', 'foo.db', UnQLite::UNQLITE_OPEN_READWRITE;
   $hash{foo} = 'bar';
   say $hash{foo}; # => bar

# DESCRIPTION

UnQLite is a in-process software library which implements a self-contained, serverless, zero-configuration, transactional NoSQL database engine. UnQLite is a document store database similar to MongoDB, Redis, CouchDB etc. as well a standard Key/Value store similar to BerkeleyDB, LevelDB, etc.

This module is Perl5 binding for UnQLite.

If you want to know more information about UnQLite, see [http://unqlite.org/](http://unqlite.org/).

This version of UnQLite.pm does not provides document store feature. Patches welcome.

**You can use UnQLite.pm as DBM**.

# METHODS

- `my $db = UnQLite->open('foo.db'[, $mode]);`

   Open the database.

   Modes:

       UnQLite::UNQLITE_OPEN_CREATE      (Default)
       UnQLite::UNQLITE_OPEN_READONLY
       UnQLite::UNQLITE_OPEN_READWRITE
       UnQLite::UNQLITE_OPEN_EXCLUSIVE
       UnQLite::UNQLITE_OPEN_TEMP_DB
       UnQLite::UNQLITE_OPEN_OMIT_JOURNALING
       UnQLite::UNQLITE_OPEN_IN_MEMORY
       UnQLite::UNQLITE_OPEN_MMAP

- `$db->kv_store($key, $value);`

   Store the entry to database.

- `$db->kv_fetch($key);`

   Fetch data from database.

- `$db->kv_delete($key);`

   Delte ` $key ` from database.

- `$db->rc();`

   Return code from UnQLite. It may updates after any UnQLite API call.

- `$db->errstr()`

   This API returns stringified version of `$db->rc()`. It's not human readable but it's better than magic number.

- `my $cursor = $db->cursor_init()`

   Create new cursor object.

# UnQLite::Cursor

UnQLite supports cursor for iterating entries.

Here is example code:

   my $cursor = $db->cursor_init();
   my @ret;
   for ($cursor->first_entry; $cursor->valid_entry; $cursor->next_entry) {
       push @ret, $cursor->key(), $cursor->data()
   }

## METHODS

- `$cursor->first_entry()`

   Seek cursor to first entry.

   Return true if succeeded, false otherwise.

- `$cursor->last_entry()`

   Seek cursor to last entry.

   Return true if succeeded, false otherwise.

- `$cursor->valid_entry()`

   This will return 1 when valid. 0 otherwise

- `$cursor->key()`

   Get current entry's key.

- `$cursor->data()`

   Get current entry's data.

- `$cursor->next_entry()`

   Seek cursor to next entry.

- `$cursor->prev_entry()`

   Seek cursor to previous entry.

   Return true if succeeded, false otherwise.

- `$cursor->seek($key, $opt=UnQLite::UNQLITE_CURSOR_MATCH_EXACT)`

   Seek cursor to ` $key `.

   You can specify the option as ` $opt `. Please see [http://unqlite.org/c\_api/unqlite\_kv\_cursor.html](http://unqlite.org/c_api/unqlite_kv_cursor.html) for more details.

   Return true if succeeded, false otherwise.

- `$cursor->delete_entry()`

   Delete the database entry pointed by the cursor.

   Return true if succeeded, false otherwise.

# LICENSE

Copyright (C) tokuhirom.

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.

# AUTHOR

tokuhirom <[email protected]>