diff --git a/source/libs/tdb/inc/tdb.h b/source/libs/tdb/inc/tdb.h index b804fcfd5e..905b08ee0b 100644 --- a/source/libs/tdb/inc/tdb.h +++ b/source/libs/tdb/inc/tdb.h @@ -43,8 +43,8 @@ typedef struct { } TDB_KEY, TDB_VALUE; // TDB Operations -TDB_EXTERN int tdbCreateDB(TDB** dbpp); -TDB_EXTERN int tdbOpenDB(TDB* dbp, tdb_db_t type, uint32_t flags); +TDB_EXTERN int tdbCreateDB(TDB** dbpp, tdb_db_t type); +TDB_EXTERN int tdbOpenDB(TDB* dbp, uint32_t flags); TDB_EXTERN int tdbCloseDB(TDB* dbp, uint32_t flags); #ifdef __cplusplus diff --git a/source/libs/tdb/src/db/tdbDB.c b/source/libs/tdb/src/db/tdbDB.c index ac83fc993b..2af40d8642 100644 --- a/source/libs/tdb/src/db/tdbDB.c +++ b/source/libs/tdb/src/db/tdbDB.c @@ -16,19 +16,52 @@ #include "tdbDB.h" #include "tdb.h" -TDB_EXTERN int tdbCreateDB(TDB** dbpp) { +TDB_EXTERN int tdbCreateDB(TDB** dbpp, tdb_db_t type) { TDB* dbp; + int ret; -// dbp = malloc + dbp = calloc(1, sizeof(*dbp)); + if (dbp == NULL) { + return -1; + } + + dbp->pageSize = TDB_DEFAULT_PGSIZE; + dbp->type = type; + + switch (type) { + case TDB_BTREE_T: + // ret = tdbInitBtreeDB(dbp); + // if (ret < 0) goto _err; + break; + case TDB_HASH_T: + // ret = tdbInitHashDB(dbp); + // if (ret < 0) goto _err; + break; + case TDB_HEAP_T: + // ret = tdbInitHeapDB(dbp); + // if (ret < 0) goto _err; + break; + default: + break; + } + + *dbpp = dbp; + return 0; + +_err: + if (dbp) { + free(dbp); + } + *dbpp = NULL; return 0; } -int tdbOpenDB(TDB* dbp, tdb_db_t type, uint32_t flags) { +TDB_EXTERN int tdbOpenDB(TDB* dbp, uint32_t flags) { // TODO return 0; } -int tdbCloseDB(TDB* dbp, uint32_t flags) { +TDB_EXTERN int tdbCloseDB(TDB* dbp, uint32_t flags) { // TODO return 0; } \ No newline at end of file diff --git a/source/libs/tdb/src/inc/tdbBtree.h b/source/libs/tdb/src/inc/tdbBtree.h index f1551e9c1a..28258b8e60 100644 --- a/source/libs/tdb/src/inc/tdbBtree.h +++ b/source/libs/tdb/src/inc/tdbBtree.h @@ -26,6 +26,8 @@ typedef struct { pgid_t root; // root page number } TDB_BTREE; +TDB_PUBLIC int tdbInitBtreeDB(TDB *dbp); + #ifdef __cplusplus } #endif diff --git a/source/libs/tdb/src/inc/tdbDB.h b/source/libs/tdb/src/inc/tdbDB.h index 04f4ba3f33..e6b49c94ec 100644 --- a/source/libs/tdb/src/inc/tdbDB.h +++ b/source/libs/tdb/src/inc/tdbDB.h @@ -19,6 +19,7 @@ #include "tdb.h" #include "tdbBtree.h" #include "tdbHash.h" +#include "tdbHeap.h" #ifdef __cplusplus extern "C" { @@ -28,8 +29,9 @@ struct TDB { pgsize_t pageSize; tdb_db_t type; union { - TDB_BTREE btree; - TDB_HASH hash; + TDB_BTREE *btree; + TDB_HASH * hash; + TDB_HEAP * heap; } dbam; // Different access methods }; diff --git a/source/libs/tdb/src/inc/tdbHash.h b/source/libs/tdb/src/inc/tdbHash.h index fca19035f1..8219bda2f8 100644 --- a/source/libs/tdb/src/inc/tdbHash.h +++ b/source/libs/tdb/src/inc/tdbHash.h @@ -13,8 +13,8 @@ * along with this program. If not, see . */ -#ifndef _TD_TKV_HAHS_H_ -#define _TD_TKV_HAHS_H_ +#ifndef _TD_TDB_HASH_H_ +#define _TD_TDB_HASH_H_ #include "tdbDef.h" @@ -26,8 +26,10 @@ typedef struct { // TODO } TDB_HASH; +TDB_PUBLIC int tdbInitHashDB(TDB *dbp); + #ifdef __cplusplus } #endif -#endif /*_TD_TKV_HAHS_H_*/ \ No newline at end of file +#endif /*_TD_TDB_HASH_H_*/ \ No newline at end of file diff --git a/source/libs/tdb/src/inc/tdbHeap.h b/source/libs/tdb/src/inc/tdbHeap.h new file mode 100644 index 0000000000..25a812fa5f --- /dev/null +++ b/source/libs/tdb/src/inc/tdbHeap.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2019 TAOS Data, Inc. + * + * This program is free software: you can use, redistribute, and/or modify + * it under the terms of the GNU Affero General Public License, version 3 + * or later ("AGPL"), as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +#ifndef _TD_TDB_HEAP_H_ +#define _TD_TDB_HEAP_H_ + +#include "tdbDef.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + // TODO +} TDB_HEAP; + +TDB_PUBLIC int tdbInitHeapDB(TDB *dbp); + +#ifdef __cplusplus +} +#endif + +#endif /*_TD_TDB_HEAP_H_*/ \ No newline at end of file diff --git a/source/libs/tdb/test/tdbTest.cpp b/source/libs/tdb/test/tdbTest.cpp index a456c33149..38c3b0b917 100644 --- a/source/libs/tdb/test/tdbTest.cpp +++ b/source/libs/tdb/test/tdbTest.cpp @@ -6,9 +6,9 @@ TEST(tdb_api_test, tdb_create_open_close_db_test) { int ret; TDB *dbp; - tdbCreateDB(&dbp); + tdbCreateDB(&dbp, TDB_BTREE_T); - tdbOpenDB(dbp, TDB_BTREE_T, 0); + tdbOpenDB(dbp, 0); tdbCloseDB(dbp, 0); } \ No newline at end of file