summaryrefslogtreecommitdiff
path: root/server/doris_server_kvdb.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'server/doris_server_kvdb.cpp')
-rw-r--r--server/doris_server_kvdb.cpp97
1 files changed, 97 insertions, 0 deletions
diff --git a/server/doris_server_kvdb.cpp b/server/doris_server_kvdb.cpp
new file mode 100644
index 0000000..19b6638
--- /dev/null
+++ b/server/doris_server_kvdb.cpp
@@ -0,0 +1,97 @@
+#include <string.h>
+#include <sys/stat.h>
+#include <stdlib.h>
+
+#include <string>
+
+#include "leveldb/db.h"
+#include "leveldb/comparator.h"
+#include "leveldb/cache.h"
+
+#include "doris_server_kvdb.h"
+
+struct doris_kvhandle
+{
+ leveldb::DB *kvdb;
+};
+
+struct doris_kvhandle *doris_kvdb_hanlde_new(const char *dir)
+{
+ struct doris_kvhandle *handle;
+ leveldb::Options options;
+
+ handle = (struct doris_kvhandle *)malloc(sizeof(struct doris_kvhandle));
+ options.create_if_missing = true;
+ leveldb::Status status = leveldb::DB::Open(options, std::string(dir), &(handle->kvdb));
+ if(!status.ok())
+ {
+ free(handle);
+ return NULL;
+ }
+ return handle;
+}
+
+bool doris_kvdb_update_keyint_valint(struct doris_kvhandle *handle, u_int64_t key, int64_t value)
+{
+ leveldb::WriteOptions wop;
+ leveldb::Slice _key((const char *)&key, sizeof(key));
+ leveldb::Slice _value((const char *)&value, sizeof(value));
+ wop.sync = true;
+ leveldb::Status s = handle->kvdb->Put(wop, _key, _value);
+ return s.ok();
+}
+
+bool doris_kvdb_update_keystr_valint(struct doris_kvhandle *handle, const char *key, int64_t value)
+{
+ leveldb::WriteOptions wop;
+ leveldb::Slice _key((const char *)key, strlen(key));
+ leveldb::Slice _value((const char *)&value, sizeof(value));
+ wop.sync = true;
+ leveldb::Status s = handle->kvdb->Put(wop, _key, _value);
+ return s.ok();
+}
+
+int doris_kvdb_delete_keyint(struct doris_kvhandle *handle, u_int64_t key)
+{
+ leveldb::Slice _key((char *)&key, sizeof(key));
+ leveldb::Status s = handle->kvdb->Delete(leveldb::WriteOptions(), _key);
+ return s.ok();
+}
+
+int doris_kvdb_delete_keystr(struct doris_kvhandle *handle, const char *key)
+{
+ leveldb::Slice _key((const char *)key, strlen(key));
+ leveldb::Status s = handle->kvdb->Delete(leveldb::WriteOptions(), _key);
+ return s.ok();
+}
+
+void doris_kvdb_handle_destroy(struct doris_kvhandle *handle)
+{
+ delete handle->kvdb;
+ free(handle);
+}
+
+int64_t doris_kvdb_get_keyint_valint(struct doris_kvhandle *handle, u_int64_t key)
+{
+ std::string value;
+ leveldb::Slice off_key((const char *)&key, sizeof(key));
+ leveldb::Status s = handle->kvdb->Get(leveldb::ReadOptions(), off_key, &value);
+ if(!s.ok())
+ {
+ return 0;
+ }
+ return *(int64_t *)value.data();
+}
+
+int64_t doris_kvdb_get_keystr_valint(struct doris_kvhandle *handle, const char *key)
+{
+ std::string value;
+ leveldb::Slice off_key((const char *)key, strlen(key));
+ leveldb::Status s = handle->kvdb->Get(leveldb::ReadOptions(), off_key, &value);
+ if(!s.ok())
+ {
+ return 0;
+ }
+ return *(int64_t *)value.data();
+}
+