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