mirror of
https://github.com/MariaDB/server.git
synced 2025-11-30 05:23:50 +03:00
We have a basic C++ interface. I'm going to call this finished, until we find out that more is needed. Fixes #197.
git-svn-id: file:///svn/tokudb@1214 c7de825b-a66e-492c-adef-691d508d4ae1
This commit is contained in:
10
cxx/Makefile
10
cxx/Makefile
@@ -4,7 +4,15 @@ CC = c++
|
|||||||
LDFLAGS = -lz
|
LDFLAGS = -lz
|
||||||
SRCS = $(wildcard *.cpp)
|
SRCS = $(wildcard *.cpp)
|
||||||
OBJS = $(patsubst %.cpp, %.o, $(SRCS))
|
OBJS = $(patsubst %.cpp, %.o, $(SRCS))
|
||||||
default: $(OBJS)
|
|
||||||
|
LIBNAME = libtdb_cxx
|
||||||
|
|
||||||
|
default: install
|
||||||
|
install: $(LIBNAME).a
|
||||||
|
cp $< ../lib/
|
||||||
|
cp db_cxx.h ../include/
|
||||||
$(OBJS): db_cxx.h
|
$(OBJS): db_cxx.h
|
||||||
test1: test1.o dbt.o db.o dbenv.o ../lib/libdb.a
|
test1: test1.o dbt.o db.o dbenv.o ../lib/libdb.a
|
||||||
|
|
||||||
|
$(LIBNAME).a: $(OBJS)
|
||||||
|
$(AR) rv $@ $(OBJS)
|
||||||
|
|||||||
@@ -58,4 +58,8 @@ int Db::cursor(DbTxn *txn, Dbc **cursorp, u_int32_t flags) {
|
|||||||
int ret = the_db->cursor(the_db, txn->get_DB_TXN(), (DBC**)cursorp, flags);
|
int ret = the_db->cursor(the_db, txn->get_DB_TXN(), (DBC**)cursorp, flags);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
int Db::set_pagesize(u_int32_t size) {
|
||||||
|
int ret = the_db->set_pagesize(the_db, size);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
11
cxx/db_cxx.h
11
cxx/db_cxx.h
@@ -59,7 +59,7 @@ class Db {
|
|||||||
int put(DbTxn *, Dbt *, Dbt *, u_int32_t);
|
int put(DbTxn *, Dbt *, Dbt *, u_int32_t);
|
||||||
int get_flags(u_int32_t *);
|
int get_flags(u_int32_t *);
|
||||||
int set_flags(u_int32_t);
|
int set_flags(u_int32_t);
|
||||||
|
int set_pagesize(u_int32_t);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DB *the_db;
|
DB *the_db;
|
||||||
@@ -79,6 +79,11 @@ class DbEnv {
|
|||||||
|
|
||||||
/* C++ analogues of the C functions. */
|
/* C++ analogues of the C functions. */
|
||||||
int close(u_int32_t);
|
int close(u_int32_t);
|
||||||
|
int open(const char *, u_int32_t, int);
|
||||||
|
int set_cachesize(u_int32_t, u_int32_t, int);
|
||||||
|
int set_lk_max(u_int32_t);
|
||||||
|
int txn_begin(DbTxn *, DbTxn **, u_int32_t);
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DB_ENV *the_env;
|
DB_ENV *the_env;
|
||||||
@@ -89,11 +94,15 @@ class DbEnv {
|
|||||||
|
|
||||||
class DbTxn {
|
class DbTxn {
|
||||||
public:
|
public:
|
||||||
|
int commit (u_int32_t /*flags*/);
|
||||||
|
|
||||||
DB_TXN *get_DB_TXN()
|
DB_TXN *get_DB_TXN()
|
||||||
{
|
{
|
||||||
if (this==0) return 0;
|
if (this==0) return 0;
|
||||||
return the_txn;
|
return the_txn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DbTxn(DB_TXN*);
|
||||||
private:
|
private:
|
||||||
DB_TXN *the_txn;
|
DB_TXN *the_txn;
|
||||||
};
|
};
|
||||||
|
|||||||
13
cxx/dbc.cpp
Normal file
13
cxx/dbc.cpp
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
#include "db_cxx.h"
|
||||||
|
|
||||||
|
int Dbc::close (void) {
|
||||||
|
DBC *dbc = this;
|
||||||
|
int ret = dbc->c_close(dbc);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Dbc::get(Dbt* key, Dbt *data, u_int32_t flags) {
|
||||||
|
DBC *dbc = this;
|
||||||
|
int ret = dbc->c_get(dbc, key, data, flags);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
49
cxx/dbenv.cpp
Normal file
49
cxx/dbenv.cpp
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
#include <assert.h>
|
||||||
|
#include "db_cxx.h"
|
||||||
|
|
||||||
|
DbEnv::DbEnv (u_int32_t flags) {
|
||||||
|
int ret = db_env_create(&the_env, flags & ~DB_CXX_NO_EXCEPTIONS);
|
||||||
|
assert(ret==0); // should do an error.
|
||||||
|
the_env->api1_internal = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
DbEnv::DbEnv(DB_ENV *env, u_int32_t flags) {
|
||||||
|
the_env = env;
|
||||||
|
if (env == 0) {
|
||||||
|
DB_ENV *new_env;
|
||||||
|
int ret = db_env_create(&new_env, flags & ~DB_CXX_NO_EXCEPTIONS);
|
||||||
|
assert(ret==0); // should do an error.
|
||||||
|
the_env = new_env;
|
||||||
|
}
|
||||||
|
the_env->api1_internal = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
int DbEnv::close(u_int32_t flags) {
|
||||||
|
int ret = the_env->close(the_env, flags);
|
||||||
|
the_env = 0; /* get rid of the env ref, so we don't touch it (even if we failed.) */
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int DbEnv::open(const char *home, u_int32_t flags, int mode) {
|
||||||
|
int ret = the_env->open(the_env, home, flags, mode);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int DbEnv::set_cachesize(u_int32_t gbytes, u_int32_t bytes, int ncache) {
|
||||||
|
int ret = the_env->set_cachesize(the_env, gbytes, bytes, ncache);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int DbEnv::set_lk_max(u_int32_t flags) {
|
||||||
|
int ret = the_env->set_lk_max(the_env, flags);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int DbEnv::txn_begin(DbTxn *parenttxn, DbTxn **txnp, u_int32_t flags) {
|
||||||
|
DB_TXN *txn;
|
||||||
|
int ret = the_env->txn_begin(the_env, parenttxn->get_DB_TXN(), &txn, flags);
|
||||||
|
if (ret==0) {
|
||||||
|
*txnp = new DbTxn(txn);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
7
cxx/dbtxn.cpp
Normal file
7
cxx/dbtxn.cpp
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
#include "db_cxx.h"
|
||||||
|
|
||||||
|
int DbTxn::commit (u_int32_t flags) {
|
||||||
|
DB_TXN *txn = get_DB_TXN();
|
||||||
|
int ret = txn->commit(txn, flags);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
9
cxx/txn.cpp
Normal file
9
cxx/txn.cpp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
#include <assert.h>
|
||||||
|
#include "db_cxx.h"
|
||||||
|
|
||||||
|
DbTxn::DbTxn(DB_TXN *txn)
|
||||||
|
: the_txn(txn)
|
||||||
|
{
|
||||||
|
txn->api_internal = this;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -26,7 +26,10 @@ default: $(TARGETS)
|
|||||||
clean:
|
clean:
|
||||||
rm -rf $(TARGETS) $(BENCHDBS)
|
rm -rf $(TARGETS) $(BENCHDBS)
|
||||||
|
|
||||||
|
db-benchmark-test-tokudb: ../lib/libtdb_cxx.a
|
||||||
db-benchmark-test-tokudb: db-benchmark-test.cpp
|
db-benchmark-test-tokudb: db-benchmark-test.cpp
|
||||||
$(CXX) $(CXXFLAGS) -I../include -L../lib -ldb -Wl,-rpath,$(PWD)/../lib $< -o $@ -DDIRSUF=tokudb
|
# $(CXX) $(CXXFLAGS) -I../include $< -o $@ -DDIRSUF=tokudb ../lib/libdb.a ../lib/libtdb_cxx.a -lz
|
||||||
|
$(CXX) $(CXXFLAGS) -I../include -L../lib -Wl,-rpath,$(PWD)/../lib $< -o $@ -ldb -ltdb_cxx -DDIRSUF=tokudb
|
||||||
|
|
||||||
db-benchmark-test-bdb: db-benchmark-test.cpp
|
db-benchmark-test-bdb: db-benchmark-test.cpp
|
||||||
$(CXX) $(CXXFLAGS) $(BDB_CPPFLAGS) $(BDB_LDFLAGS) $< -o $@ -DDIRSUF=bdb
|
$(CXX) $(CXXFLAGS) $(BDB_CPPFLAGS) $(BDB_LDFLAGS) $< -o $@ -DDIRSUF=bdb
|
||||||
|
|||||||
Reference in New Issue
Block a user