Skip to content

wcummings/cberl

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code
This branch is 15 commits ahead of chitika:master.

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
src
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

CBERL

Build Status

NIF based Erlang bindings for couchbase based on libcouchbase.

Please submit bugs and patches if you find any.

Tested on OSX, Debian Squeeze and Amazon Linux.

Quick Setup/Start

First you must have libcouchbase installed.

On OSX install homebrew if you haven't already then run:

brew update && brew install libcouchbase

On Amazon linux:

sudo wget -O/etc/yum.repos.d/couchbase.repo http://packages.couchbase.com/rpm/couchbase-centos62-x86_64.repo
sudo yum check-update
sudo yum install --enablerepo=epel libcouchbase2 libcouchbase-devel

For installing libcouchbase on other systems visit http://www.couchbase.com/develop/c/current.

Then:

git clone git@github.com:wcummings/cberl.git
cd cberl
# assuming you have rebar in your path
rebar get-deps compile

Or just include it as a dependency in your rebar config.

Example

Make sure you have couchbase running on localhost or use cberl:new(Host) instead.

% create a connection pool  of 5 connections named cberl_default
% you can provide more argument like host, username, password, 
% bucket and transcoder - look at https://github.com/wcummings/cberl/blob/master/src/cberl.erl for more detail 
cberl:start_link(cberl_default, 5).
{ok, <0.33.0>}
% Poolname, Key, Expire - 0 for infinity, Value
cberl:set(cberl_default, <<"fkey">>, 0, <<"cberl">>).
{ok,CAS}
cberl:get(cberl_default, <<"fkey">>).
{<<"fkey">>, ReturnedCasValue, <<"cberl">>}

For more information on all the functions -> ./rebar doc (most of documentation is out of date right now)

Views

cberl has support for querying views via the view/4 functions:

cberl:view(cberl_default, "all", "all", []).
{ok,{1,
    [[{<<"id">>,<<"test">>},
    {<<"key">>,<<"test">>},
    {<<"value">>,null}]]}}

Shorthand for foldl, foldr and foreach are also provided.

N1QL

cberl has support for N1QL queries via the n1ql/4 and n1ql/5 functions:

Dog = {[{<<"type">>,<<"dog">>},
  {<<"name">>,<<"tom">>},
  {<<"age">>,5},
  {<<"color">>,<<"white">>}]}.
cberl:set(cberl_default, <<"tom">>, 0, Dog).
cberl:n1ql(cberl_default, <<"SELECT * FROM default WHERE type=$1 and age=$2 and color=$3">>, [<<"\"dog\"">>, <<"5">>, <<"\"white\"">>], false).
{ok,{[{<<"requestID">>,
       <<"a00b80e8-aea8-4a23-a0a9-5aba26d2b48f">>},
      {<<"signature">>,{[{<<"*">>,<<"*">>}]}},
      {<<"results">>,[]},
      {<<"status">>,<<"success">>},
      {<<"metrics">>,
       {[{<<"elapsedTime">>,<<"21.644116ms">>},
         {<<"executionTime">>,<<"21.60625ms">>},
         {<<"resultCount">>,1},
         {<<"resultSize">>,171}]}}]},
    [{[{<<"default">>,
        {[{<<"age">>,5},
          {<<"color">>,<<"white">>},
          {<<"name">>,<<"tom">>},
          {<<"type">>,<<"dog">>}]}}]}]}

Custom Transcoders

You can have your custom transcoders, your transcoder must export 3 functions:

encode_value/2:

Takes in an encoder|encoder list and the original value and turns it into a binary.

decode_value/2:

Takes in a flag (from couchbase) and the value (as binary) and turns it into the actual value.

flag/1:

Turns an encoder_name (or list of them) into an integer. This value is sent to CB during set operations and this is what you get in decode value. You must return a value for 'standard' encoder if you are not planning to specify an encoder for every set operation.

Check out cberl_transcoder.erl it is pretty straightforward.

About

NIF based Erlang bindings for Couchbase

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C 50.0%
  • Erlang 47.0%
  • Makefile 3.0%