From f44954b326a230de5e1febf7ddf2395b00b503cc Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Tue, 15 Feb 2022 08:59:29 +0000 Subject: [PATCH] more TDB --- source/libs/tdb/src/db/tdb.c | 24 +++++++++++++++++++++++- source/libs/tdb/test/tdbTest.cpp | 10 +++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/source/libs/tdb/src/db/tdb.c b/source/libs/tdb/src/db/tdb.c index 714ea23317..3b7156fbd4 100644 --- a/source/libs/tdb/src/db/tdb.c +++ b/source/libs/tdb/src/db/tdb.c @@ -30,6 +30,8 @@ struct STDbCurosr { SBtCursor *pBtCur; }; +static int tdbDefaultKeyCmprFn(int keyLen1, const void *pKey1, int keyLen2, const void *pKey2); + int tdbCreate(TDB **ppDb) { TDB *pDb; @@ -42,7 +44,7 @@ int tdbCreate(TDB **ppDb) { pDb->klen = TDB_VARIANT_LEN; pDb->vlen = TDB_VARIANT_LEN; pDb->dup = false; - pDb->cFn = NULL /*TODO*/; + pDb->cFn = tdbDefaultKeyCmprFn; *ppDb = pDb; return 0; @@ -151,4 +153,24 @@ int tdbGetDup(TDB *pDb) { } else { return 0; } +} + +static int tdbDefaultKeyCmprFn(int keyLen1, const void *pKey1, int keyLen2, const void *pKey2) { + int mlen; + int cret; + + ASSERT(keyLen1 > 0 && keyLen2 > 0 && pKey1 != NULL && pKey2 != NULL); + + mlen = keyLen1 < keyLen2 ? keyLen1 : keyLen2; + cret = memcmp(pKey1, pKey2, mlen); + if (cret == 0) { + if (keyLen1 < keyLen2) { + cret = -1; + } else if (keyLen1 > keyLen2) { + cret = 1; + } else { + cret = 0; + } + } + return cret; } \ No newline at end of file diff --git a/source/libs/tdb/test/tdbTest.cpp b/source/libs/tdb/test/tdbTest.cpp index 065b83b2c2..db6a27b3e9 100644 --- a/source/libs/tdb/test/tdbTest.cpp +++ b/source/libs/tdb/test/tdbTest.cpp @@ -25,9 +25,17 @@ TEST(tdb_test, simple_test) { GTEST_ASSERT_EQ(tdbSetKeyLen(pDb1, 8), 0); + GTEST_ASSERT_EQ(tdbGetKeyLen(pDb1), 8); + // GTEST_ASSERT_EQ(tdbSetValLen(pDb1, 3), 0); - // GTEST_ASSERT_EQ(tdbSetDup(pDb1, 3), 0); + // GTEST_ASSERT_EQ(tdbGetValLen(pDb1), 3); + + // GTEST_ASSERT_EQ(tdbSetDup(pDb1, 1), 0); + + // GTEST_ASSERT_EQ(tdbGetDup(pDb1), 1); + + // GTEST_ASSERT_EQ(tdbSetCmprFunc(pDb1, NULL), 0); GTEST_ASSERT_EQ(tdbOpen(pDb1, "db.db", "db1", pEnv), 0);