From fe363cdedbe5ffd2fd55794c4c425d8cc6e8d0c0 Mon Sep 17 00:00:00 2001 From: lianhuix Date: Fri, 21 Apr 2023 08:22:58 +0000 Subject: [PATCH] Fix issues Signed-off-by: lianhuix --- .../src/executor/base/grd_db_api.cpp | 2 +- .../src/oh_adapter/src/sqlite_utils.cpp | 21 ++++++++++++++++++- .../test/unittest/api/documentdb_api_test.cpp | 5 ++++- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/services/distributeddataservice/service/data_share/gaussdb_rd_Simple/src/executor/base/grd_db_api.cpp b/services/distributeddataservice/service/data_share/gaussdb_rd_Simple/src/executor/base/grd_db_api.cpp index 73bc1e4d..fff6188d 100644 --- a/services/distributeddataservice/service/data_share/gaussdb_rd_Simple/src/executor/base/grd_db_api.cpp +++ b/services/distributeddataservice/service/data_share/gaussdb_rd_Simple/src/executor/base/grd_db_api.cpp @@ -25,7 +25,7 @@ using namespace DocumentDB; int GRD_DBOpen(const char *dbPath, const char *configStr, unsigned int flags, GRD_DB **db) { - if (db == nullptr || (*db) != nullptr) { + if (db == nullptr) { return GRD_INVALID_ARGS; } std::string path = (dbPath == nullptr ? "" : dbPath); diff --git a/services/distributeddataservice/service/data_share/gaussdb_rd_Simple/src/oh_adapter/src/sqlite_utils.cpp b/services/distributeddataservice/service/data_share/gaussdb_rd_Simple/src/oh_adapter/src/sqlite_utils.cpp index 30c0d095..bb86791f 100644 --- a/services/distributeddataservice/service/data_share/gaussdb_rd_Simple/src/oh_adapter/src/sqlite_utils.cpp +++ b/services/distributeddataservice/service/data_share/gaussdb_rd_Simple/src/oh_adapter/src/sqlite_utils.cpp @@ -14,12 +14,14 @@ */ #include "sqlite_utils.h" +#include #include "doc_errno.h" #include "log_print.h" namespace DocumentDB { -const int MAX_BLOB_READ_SIZE = 5 * 1024 * 1024; // 5M limit TODO:: check blob size +const int MAX_BLOB_READ_SIZE = 5 * 1024 * 1024; // 5M limit const int MAX_TEXT_READ_SIZE = 5 * 1024 * 1024; // 5M limit +const int BUSY_TIMEOUT_MS = 3000; // 3000ms for sqlite busy timeout. const std::string BEGIN_SQL = "BEGIN TRANSACTION"; const std::string BEGIN_IMMEDIATE_SQL = "BEGIN IMMEDIATE TRANSACTION"; const std::string COMMIT_SQL = "COMMIT TRANSACTION"; @@ -39,6 +41,9 @@ int MapSqliteError(int errCode) return -E_ERROR; } } + +std::mutex g_logConfigMutex; +bool g_configLog = false; } void SQLiteUtils::SqliteLogCallback(void *data, int err, const char *msg) @@ -48,6 +53,14 @@ void SQLiteUtils::SqliteLogCallback(void *data, int err, const char *msg) int SQLiteUtils::CreateDataBase(const std::string &path, int flag, sqlite3 *&db) { + { + std::lock_guard lock(g_logConfigMutex); + if (!g_configLog) { + sqlite3_config(SQLITE_CONFIG_LOG, &SqliteLogCallback, nullptr); + g_configLog = true; + } + } + int errCode = sqlite3_open_v2(path.c_str(), &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, nullptr); if (errCode != SQLITE_OK) { GLOGE("Open database [%s] failed. %d", path.c_str(), errCode); @@ -55,6 +68,12 @@ int SQLiteUtils::CreateDataBase(const std::string &path, int flag, sqlite3 *&db) (void)sqlite3_close_v2(db); db = nullptr; } + return MapSqliteError(errCode); + } + + errCode = sqlite3_busy_timeout(db, BUSY_TIMEOUT_MS); + if (errCode != SQLITE_OK) { + GLOGE("Set busy timeout failed:%d", errCode); } return MapSqliteError(errCode); } diff --git a/services/distributeddataservice/service/data_share/gaussdb_rd_Simple/test/unittest/api/documentdb_api_test.cpp b/services/distributeddataservice/service/data_share/gaussdb_rd_Simple/test/unittest/api/documentdb_api_test.cpp index b36dd2e1..c442be61 100644 --- a/services/distributeddataservice/service/data_share/gaussdb_rd_Simple/test/unittest/api/documentdb_api_test.cpp +++ b/services/distributeddataservice/service/data_share/gaussdb_rd_Simple/test/unittest/api/documentdb_api_test.cpp @@ -100,8 +100,11 @@ HWTEST_F(DocumentDBApiTest, OpenDBTest002, TestSize.Level0) EXPECT_EQ(status, GRD_OK); EXPECT_NE(db, nullptr); + status = GRD_DBClose(db, GRD_DB_CLOSE); + EXPECT_EQ(status, GRD_OK); + status = GRD_DBOpen(path.c_str(), nullptr, GRD_DB_OPEN_CREATE, &db); - EXPECT_EQ(status, GRD_INVALID_ARGS); + EXPECT_EQ(status, GRD_OK); status = GRD_DBClose(db, GRD_DB_CLOSE); EXPECT_EQ(status, GRD_OK); -- Gitee