/*
Makefile:
(make sure Makefile is indented using a tab and not spaces)

all:
    cc -Wall -g -O0 rdb_mergeop.c -o rdb_mergeop -lstdc++ -lrocksdb -lsnappy -lbz2 -llz4 -lz
clean:
    rm -rf rdb_mergeop
    rm -rf testdb
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <rocksdb/c.h>

int main()
{
    const char *db_name = "testdb";
    rocksdb_options_t *opts = rocksdb_options_create();
    rocksdb_options_set_create_if_missing(opts, 1);
    rocksdb_options_set_error_if_exists(opts, 1);
    rocksdb_options_set_compression(opts, rocksdb_snappy_compression);
    char *err = NULL;
    rocksdb_t *db = rocksdb_open(opts, db_name, &err);
    if (err != NULL) {
        fprintf(stderr, "database open %s\n", err);
        return -1;
    }
    free(err);
    err = NULL;

    rocksdb_writeoptions_t *wo = rocksdb_writeoptions_create();
    char *key = "name";
    char *value = "foo";
    rocksdb_put(db, wo, key, strlen(key), value, strlen(value), &err);
    if (err != NULL) {
        fprintf(stderr, "put key %s\n", err);
        rocksdb_close(db);
        return -1;
    }
    free(err);
    err = NULL;

    rocksdb_readoptions_t *ro = rocksdb_readoptions_create();
    size_t rlen;
    value = rocksdb_get(db, ro, key, strlen(key), &rlen, &err);
    if (err != NULL) {
        fprintf(stderr, "get key %s\n", err);
        rocksdb_close(db);
        return -1;
    }
    free(err);
    err = NULL;
    printf("get key len: %lu, value: %s\n", rlen, value);

    rocksdb_close(db);
    return 0;
}