Commit 3a11121a authored by Bradley C. Kuszmaul's avatar Bradley C. Kuszmaul

add exceptions to dbc.cpp. Addresses #215.

git-svn-id: file:///svn/tokudb@1316 c7de825b-a66e-492c-adef-691d508d4ae1
parent 28051426
...@@ -232,8 +232,9 @@ struct __toku_db_txn_stat { ...@@ -232,8 +232,9 @@ struct __toku_db_txn_stat {
char __toku_dummy4[8]; /* Padding at the end */ char __toku_dummy4[8]; /* Padding at the end */
}; };
struct __toku_dbc { struct __toku_dbc {
DB *dbp; /* 32-bit offset=0 size=4, 64=bit offset=0 size=8 */
struct __toku_dbc_internal *i; struct __toku_dbc_internal *i;
void* __toku_dummy0[20]; void* __toku_dummy0[19];
char __toku_dummy1[104]; char __toku_dummy1[104];
int (*c_close) (DBC *); /* 32-bit offset=188 size=4, 64=bit offset=272 size=8 */ int (*c_close) (DBC *); /* 32-bit offset=188 size=4, 64=bit offset=272 size=8 */
void* __toku_dummy2[1]; void* __toku_dummy2[1];
......
...@@ -3,11 +3,13 @@ ...@@ -3,11 +3,13 @@
int Dbc::close (void) { int Dbc::close (void) {
DBC *dbc = this; DBC *dbc = this;
int ret = dbc->c_close(dbc); int ret = dbc->c_close(dbc);
return ret; DbEnv *env = (DbEnv*)dbc->dbp->api_internal;
return env->maybe_throw_error(ret);
} }
int Dbc::get(Dbt* key, Dbt *data, u_int32_t flags) { int Dbc::get(Dbt* key, Dbt *data, u_int32_t flags) {
DBC *dbc = this; DBC *dbc = this;
int ret = dbc->c_get(dbc, key, data, flags); int ret = dbc->c_get(dbc, key, data, flags);
return ret; DbEnv *env = (DbEnv*)dbc->dbp->api_internal;
return env->maybe_throw_error(ret);
} }
...@@ -13,3 +13,7 @@ $(DBCXX): ...@@ -13,3 +13,7 @@ $(DBCXX):
clean: clean:
rm -rf $(TARGETS) rm -rf $(TARGETS)
check: $(TARGETS)
./test1
./test1e
...@@ -232,8 +232,9 @@ struct __toku_db_txn_stat { ...@@ -232,8 +232,9 @@ struct __toku_db_txn_stat {
char __toku_dummy4[8]; /* Padding at the end */ char __toku_dummy4[8]; /* Padding at the end */
}; };
struct __toku_dbc { struct __toku_dbc {
DB *dbp; /* 32-bit offset=0 size=4, 64=bit offset=0 size=8 */
struct __toku_dbc_internal *i; struct __toku_dbc_internal *i;
void* __toku_dummy0[20]; void* __toku_dummy0[19];
char __toku_dummy1[104]; char __toku_dummy1[104];
int (*c_close) (DBC *); /* 32-bit offset=188 size=4, 64=bit offset=272 size=8 */ int (*c_close) (DBC *); /* 32-bit offset=188 size=4, 64=bit offset=272 size=8 */
void* __toku_dummy2[1]; void* __toku_dummy2[1];
......
...@@ -116,6 +116,7 @@ class Db { ...@@ -116,6 +116,7 @@ class Db {
class DbEnv { class DbEnv {
friend class Db; friend class Db;
friend class Dbc;
public: public:
DbEnv(u_int32_t flags); DbEnv(u_int32_t flags);
...@@ -167,5 +168,4 @@ class Dbc : protected DBC ...@@ -167,5 +168,4 @@ class Dbc : protected DBC
public: public:
int close(void); int close(void);
int get(Dbt*, Dbt *, u_int32_t); int get(Dbt*, Dbt *, u_int32_t);
}; };
...@@ -690,7 +690,6 @@ static int toku_db_close(DB * db, u_int32_t flags) { ...@@ -690,7 +690,6 @@ static int toku_db_close(DB * db, u_int32_t flags) {
struct __toku_dbc_internal { struct __toku_dbc_internal {
BRT_CURSOR c; BRT_CURSOR c;
DB *db;
DB_TXN *txn; DB_TXN *txn;
}; };
...@@ -770,7 +769,7 @@ static int toku_c_pget(DBC * c, DBT *key, DBT *pkey, DBT *data, u_int32_t flag) ...@@ -770,7 +769,7 @@ static int toku_c_pget(DBC * c, DBT *key, DBT *pkey, DBT *data, u_int32_t flag)
int r; int r;
int r2; int r2;
int r3; int r3;
DB *db = c->i->db; DB *db = c->dbp;
DB *pdb = db->i->primary; DB *pdb = db->i->primary;
...@@ -851,7 +850,7 @@ static int toku_c_pget(DBC * c, DBT *key, DBT *pkey, DBT *data, u_int32_t flag) ...@@ -851,7 +850,7 @@ static int toku_c_pget(DBC * c, DBT *key, DBT *pkey, DBT *data, u_int32_t flag)
} }
static int toku_c_get(DBC * c, DBT * key, DBT * data, u_int32_t flag) { static int toku_c_get(DBC * c, DBT * key, DBT * data, u_int32_t flag) {
DB *db = c->i->db; DB *db = c->dbp;
int r; int r;
if (db->i->primary==0) r = toku_c_get_noassociate(c, key, data, flag); if (db->i->primary==0) r = toku_c_get_noassociate(c, key, data, flag);
...@@ -954,7 +953,7 @@ static int do_associated_deletes(DB_TXN *txn, DBT *key, DBT *data, DB *secondary ...@@ -954,7 +953,7 @@ static int do_associated_deletes(DB_TXN *txn, DBT *key, DBT *data, DB *secondary
static int toku_c_del(DBC * c, u_int32_t flags) { static int toku_c_del(DBC * c, u_int32_t flags) {
int r; int r;
DB* db = c->i->db; DB* db = c->dbp;
//It is a primary with secondaries, or is a secondary. //It is a primary with secondaries, or is a secondary.
if (db->i->primary != 0 || !list_empty(&db->i->associated)) { if (db->i->primary != 0 || !list_empty(&db->i->associated)) {
...@@ -995,7 +994,7 @@ static int toku_c_del(DBC * c, u_int32_t flags) { ...@@ -995,7 +994,7 @@ static int toku_c_del(DBC * c, u_int32_t flags) {
} }
static int toku_c_put(DBC *dbc, DBT *key, DBT *data, u_int32_t flags) { static int toku_c_put(DBC *dbc, DBT *key, DBT *data, u_int32_t flags) {
DB* db = dbc->i->db; DB* db = dbc->dbp;
unsigned int brtflags; unsigned int brtflags;
int r; int r;
DBT* put_key = key; DBT* put_key = key;
...@@ -1073,7 +1072,7 @@ static int toku_db_cursor(DB * db, DB_TXN * txn, DBC ** c, u_int32_t flags) { ...@@ -1073,7 +1072,7 @@ static int toku_db_cursor(DB * db, DB_TXN * txn, DBC ** c, u_int32_t flags) {
result->c_del = toku_c_del; result->c_del = toku_c_del;
MALLOC(result->i); MALLOC(result->i);
assert(result->i); assert(result->i);
result->i->db = db; result->dbp = db;
result->i->txn = txn; result->i->txn = txn;
int r = toku_brt_cursor(db->i->brt, &result->i->c); int r = toku_brt_cursor(db->i->brt, &result->i->c);
assert(r == 0); assert(r == 0);
...@@ -1234,7 +1233,7 @@ static char *construct_full_name(const char *dir, const char *fname) { ...@@ -1234,7 +1233,7 @@ static char *construct_full_name(const char *dir, const char *fname) {
} }
} }
int find_db_file(DB_ENV* dbenv, const char *fname, char** full_name_out) { static int find_db_file(DB_ENV* dbenv, const char *fname, char** full_name_out) {
u_int32_t i; u_int32_t i;
int r; int r;
struct stat statbuf; struct stat statbuf;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment