diff --git a/frameworks/libs/distributeddb/interfaces/src/relational/knowledge_source_utils.cpp b/frameworks/libs/distributeddb/interfaces/src/relational/knowledge_source_utils.cpp index 040a78c16c58bfec5894dc7b6a3c5c5fb152ce54..b2cbf7e775c2e90cd8aca1a8a621564de25cfa8e 100644 --- a/frameworks/libs/distributeddb/interfaces/src/relational/knowledge_source_utils.cpp +++ b/frameworks/libs/distributeddb/interfaces/src/relational/knowledge_source_utils.cpp @@ -209,9 +209,9 @@ int KnowledgeSourceUtils::UpdateFlagAndTriggerIfNeeded(sqlite3 *db, const TableI std::string updateTriggerName = "naturalbase_rdb_" + tableInfo.GetTableName() + "_ON_UPDATE"; bool needUpdate = false; - int errCode = CheckUpdateTriggerVersion(db, updateTriggerName, tableInfo.GetTableName(), needUpdate); + int errCode = CheckIfTriggerNeedsUpdate(db, updateTriggerName, tableInfo.GetTableName(), needUpdate); if (errCode != E_OK) { - LOGE("Check knowledge table trigger err %d", errCode); + LOGE("Check trigger update err %d", errCode); return errCode; } @@ -235,16 +235,15 @@ int KnowledgeSourceUtils::UpdateFlagAndTriggerIfNeeded(sqlite3 *db, const TableI return errCode; } -int KnowledgeSourceUtils::CheckUpdateTriggerVersion(sqlite3 *db, const std::string &triggerName, +int KnowledgeSourceUtils::CheckIfTriggerNeedsUpdate(sqlite3 *db, const std::string &triggerName, const std::string &tableName, bool &needUpdate) { - std::string checkSql = "select sql from sqlite_master where type = 'trigger' and tbl_name = '" + - tableName + "' and name = '" + triggerName + "';"; + std::string checkSql = "select sql from sqlite_master where type = 'trigger' and tbl_name = ? and name = ?;"; sqlite3_stmt *stmt = nullptr; int errCode = SQLiteUtils::GetStatement(db, checkSql, stmt); if (errCode != E_OK) { - LOGE("[CheckUpdateTriggerVersion] Get statement err:%d", errCode); + LOGE("[CheckIfTriggerNeedsUpdate] Get statement err:%d", errCode); return errCode; } @@ -257,6 +256,19 @@ int KnowledgeSourceUtils::CheckUpdateTriggerVersion(sqlite3 *db, const std::stri } }); + int bindIndex = 1; + errCode = SQLiteUtils::BindTextToStatement(stmt, bindIndex++, tableName); + if (errCode != E_OK) { + LOGE("bind tbl name err:%d", errCode); + return errCode; + } + + errCode = SQLiteUtils::BindTextToStatement(stmt, bindIndex++, triggerName); + if (errCode != E_OK) { + LOGE("bind trigger name err:%d", errCode); + return errCode; + } + errCode = SQLiteUtils::StepWithRetry(stmt); if (errCode == SQLiteUtils::MapSQLiteErrno(SQLITE_DONE)) { return E_OK; @@ -327,7 +339,7 @@ int KnowledgeSourceUtils::UpdateKnowledgeFlag(sqlite3 *db, const TableInfo &tabl int KnowledgeSourceUtils::GetKnowledgeCursor(sqlite3 *db, const TableInfo &tableInfo, int64_t &cursor) { std::string cursorKey = std::string(KNOWLEDGE_CURSOR_PREFIX) + tableInfo.GetTableName(); - std::string cursorSql = "SELECT value FROM naturalbase_rdb_aux_metadata WHERE key = '" + cursorKey + "';"; + std::string cursorSql = "SELECT value FROM naturalbase_rdb_aux_metadata WHERE key = ?;"; sqlite3_stmt *stmt = nullptr; int errCode = SQLiteUtils::GetStatement(db, cursorSql, stmt); @@ -345,6 +357,12 @@ int KnowledgeSourceUtils::GetKnowledgeCursor(sqlite3 *db, const TableInfo &table } }); + errCode = SQLiteUtils::BindTextToStatement(stmt, 1, cursorKey); + if (errCode != E_OK) { + LOGE("GetKnowledgeCursor bind arg err:%d", errCode); + return errCode; + } + errCode = SQLiteUtils::StepWithRetry(stmt); if (errCode == SQLiteUtils::MapSQLiteErrno(SQLITE_DONE)) { LOGI("Not found knowledge cursor"); diff --git a/frameworks/libs/distributeddb/interfaces/src/relational/knowledge_source_utils.h b/frameworks/libs/distributeddb/interfaces/src/relational/knowledge_source_utils.h index b27d387ac4f17afda092d9dcdf530680c45982e0..ae8e0e4dbbc7f1667b988e62028a4628d484510d 100644 --- a/frameworks/libs/distributeddb/interfaces/src/relational/knowledge_source_utils.h +++ b/frameworks/libs/distributeddb/interfaces/src/relational/knowledge_source_utils.h @@ -60,7 +60,7 @@ protected: static int UpdateFlagAndTriggerIfNeeded(sqlite3 *db, const TableInfo &table); - static int CheckUpdateTriggerVersion(sqlite3 *db, const std::string &triggerName, const std::string &tableName, + static int CheckIfTriggerNeedsUpdate(sqlite3 *db, const std::string &triggerName, const std::string &tableName, bool &needUpdate); static int GetKnowledgeCursor(sqlite3 *db, const TableInfo &tableInfo, int64_t &cursor); diff --git a/frameworks/libs/distributeddb/storage/src/sqlite/relational/knowledge_log_table_manager.cpp b/frameworks/libs/distributeddb/storage/src/sqlite/relational/knowledge_log_table_manager.cpp index 174f2bd381c9db50272aaeeb016a813d4284da04..43d71ea3d222307b1ba209148728358f9124a5b6 100644 --- a/frameworks/libs/distributeddb/storage/src/sqlite/relational/knowledge_log_table_manager.cpp +++ b/frameworks/libs/distributeddb/storage/src/sqlite/relational/knowledge_log_table_manager.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) Huawei Technologies Co., Ltd. 2025-2025. All rights reserved. + * Copyright (c) 2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/frameworks/libs/distributeddb/storage/src/sqlite/relational/knowledge_log_table_manager.h b/frameworks/libs/distributeddb/storage/src/sqlite/relational/knowledge_log_table_manager.h index 8c2c7d3168483508889d7ee71446b48caef9deab..5ad48f34e29eb1d30338b2adeb9aee0269cc9e56 100644 --- a/frameworks/libs/distributeddb/storage/src/sqlite/relational/knowledge_log_table_manager.h +++ b/frameworks/libs/distributeddb/storage/src/sqlite/relational/knowledge_log_table_manager.h @@ -1,5 +1,5 @@ /* - * Copyright (c) Huawei Technologies Co., Ltd. 2025-2025. All rights reserved. + * Copyright (c) 2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/frameworks/libs/distributeddb/test/unittest/common/store_test/rdb/distributeddb_rdb_knowledge_client_test.cpp b/frameworks/libs/distributeddb/test/unittest/common/store_test/rdb/distributeddb_rdb_knowledge_client_test.cpp index f2146f71a7b20b6744d59550d4e1039ad9fff4ce..1fafe0df7bae31abcfb9dac1847d3a7e2e0cf92f 100644 --- a/frameworks/libs/distributeddb/test/unittest/common/store_test/rdb/distributeddb_rdb_knowledge_client_test.cpp +++ b/frameworks/libs/distributeddb/test/unittest/common/store_test/rdb/distributeddb_rdb_knowledge_client_test.cpp @@ -187,19 +187,19 @@ void CheckFlagAndCursor(sqlite3 *db, const std::string &tableName, int key, uint std::string GetOldTriggerSql() { - std::string updateTrigger = R"(CREATE TRIGGER IF NOT EXISTS naturalbase_rdb_KNOWLEDGE_TABLE_ON_UPDATE AFTER UPDATE + std::string updateTrigger = R"(CREATE TRIGGER IF NOT EXISTS naturalbase_rdb_KNOWLEDGE_TABLE_ON_UPDATE AFTER UPDATE ON 'KNOWLEDGE_TABLE' FOR EACH ROW BEGIN - UPDATE naturalbase_rdb_aux_metadata SET value=value+1 WHERE - key=x'6e61747572616c626173655f7264625f6175785f637572736f725f6b6e6f776c656467655f7461626c65' AND CASE WHEN + UPDATE naturalbase_rdb_aux_metadata SET value=value+1 WHERE + key=x'6e61747572616c626173655f7264625f6175785f637572736f725f6b6e6f776c656467655f7461626c65' AND CASE WHEN ((NEW.int_field1 IS NOT OLD.int_field1) OR (NEW.int_field2 IS NOT OLD.int_field2)) THEN 4 ELSE 0 END; UPDATE naturalbase_rdb_aux_KNOWLEDGE_TABLE_log SET timestamp=get_raw_sys_time(), device='', flag=0x02, - extend_field = json_object('id',NEW.id), cursor = CASE WHEN ((NEW.int_field1 IS NOT OLD.int_field1) OR - (NEW.int_field2 IS NOT OLD.int_field2)) THEN (SELECT value FROM naturalbase_rdb_aux_metadata WHERE - key=x'6e61747572616c626173655f7264625f6175785f637572736f725f6b6e6f776c656467655f7461626c65') + extend_field = json_object('id', NEW.id), cursor = CASE WHEN ((NEW.int_field1 IS NOT OLD.int_field1) OR + (NEW.int_field2 IS NOT OLD.int_field2)) THEN (SELECT value FROM naturalbase_rdb_aux_metadata WHERE + key=x'6e61747572616c626173655f7264625f6175785f637572736f725f6b6e6f776c656467655f7461626c65') ELSE cursor END WHERE data_key = OLD._rowid_; - SELECT client_observer('KNOWLEDGE_TABLE', OLD._rowid_, 1, CASE WHEN - ((NEW.int_field1 IS NOT OLD.int_field1) OR (NEW.int_field2 IS NOT OLD.int_field2)) + SELECT client_observer('KNOWLEDGE_TABLE', OLD._rowid_, 1, CASE WHEN + ((NEW.int_field1 IS NOT OLD.int_field1) OR (NEW.int_field2 IS NOT OLD.int_field2)) THEN 4 ELSE 0 END);END;)"; return updateTrigger; }