From 3ac0a9d85e82f99507b291a55263236fb988b233 Mon Sep 17 00:00:00 2001 From: lidwchn Date: Thu, 17 Mar 2022 10:47:26 +0800 Subject: [PATCH] Fix trigger. Signed-off-by: lidwchn --- .../storage/src/sqlite/sqlite_utils.cpp | 8 +++++--- .../distributeddb_relational_get_data_test.cpp | 16 +++++++++------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/services/distributeddataservice/libs/distributeddb/storage/src/sqlite/sqlite_utils.cpp b/services/distributeddataservice/libs/distributeddb/storage/src/sqlite/sqlite_utils.cpp index dd7935f42..ef578bcd9 100644 --- a/services/distributeddataservice/libs/distributeddb/storage/src/sqlite/sqlite_utils.cpp +++ b/services/distributeddataservice/libs/distributeddb/storage/src/sqlite/sqlite_utils.cpp @@ -1356,15 +1356,17 @@ int SQLiteUtils::CreateRelationalLogTable(sqlite3 *db, const std::string &oriTab namespace { std::string GetInsertTrigger(const TableInfo &table) { + std::string logTblName = DBConstant::RELATIONAL_PREFIX + table.GetTableName() + "_log"; std::string insertTrigger = "CREATE TRIGGER IF NOT EXISTS "; insertTrigger += "naturalbase_rdb_" + table.GetTableName() + "_ON_INSERT AFTER INSERT \n"; insertTrigger += "ON " + table.GetTableName() + "\n"; insertTrigger += "BEGIN\n"; - insertTrigger += "\t INSERT OR REPLACE INTO "; - insertTrigger += DBConstant::RELATIONAL_PREFIX + table.GetTableName() + "_log"; + insertTrigger += "\t INSERT OR REPLACE INTO " + logTblName; insertTrigger += " (data_key, device, ori_device, timestamp, wtimestamp, flag, hash_key)"; insertTrigger += " VALUES (new.rowid, '', '',"; - insertTrigger += " get_sys_time(0), get_sys_time(0), 0x02,"; + insertTrigger += " get_sys_time(0), get_sys_time(0),"; + insertTrigger += " CASE WHEN (SELECT count(*)<>0 FROM " + logTblName + " WHERE hash_key=calc_hash(new." + + table.GetPrimaryKey() + ") AND flag&0x02=0x02) THEN 0x22 ELSE 0x02 END,"; insertTrigger += " calc_hash(new." + table.GetPrimaryKey() + "));\n"; insertTrigger += "END;"; return insertTrigger; diff --git a/services/distributeddataservice/libs/distributeddb/test/unittest/common/storage/distributeddb_relational_get_data_test.cpp b/services/distributeddataservice/libs/distributeddb/test/unittest/common/storage/distributeddb_relational_get_data_test.cpp index a80fca746..195c47bee 100644 --- a/services/distributeddataservice/libs/distributeddb/test/unittest/common/storage/distributeddb_relational_get_data_test.cpp +++ b/services/distributeddataservice/libs/distributeddb/test/unittest/common/storage/distributeddb_relational_get_data_test.cpp @@ -918,11 +918,13 @@ HWTEST_F(DistributedDBRelationalGetDataTest, MissQuery1, TestSize.Level1) ExpectCount(db, getLogSql, 3); // 2,3,4 /** - * @tc.steps: step6. Update data. k2v2 to k2v102, k3v3 to k3v103. + * @tc.steps: step6. Update data. k2v2 to k2v102, k3v3 to k3v103, k4v4 to k4v104. * @tc.expected: Update succeed. */ - ExecSqlAndAssertOK(db, {"UPDATE " + tableName + " SET value=102 WHERE value=2;", - "UPDATE " + tableName + " SET value=103 WHERE value=3;"}); + ExecSqlAndAssertOK(db, {"INSERT OR REPLACE INTO " + tableName + " VALUES(2, 102);", + "UPDATE " + tableName + " SET value=103 WHERE value=3;", + "DELETE FROM " + tableName + " WHERE key=4;", + "INSERT INTO " + tableName + " VALUES(4, 104);"}); /** * @tc.steps: step7. Get all data from "dataPlus" table. @@ -930,7 +932,7 @@ HWTEST_F(DistributedDBRelationalGetDataTest, MissQuery1, TestSize.Level1) */ query = QueryObject(Query::Select(tableName).EqualTo("value", 2).Or().EqualTo("value", 3).Or().EqualTo("value", 4)); EXPECT_EQ(store->GetSyncData(query, timeRange, DataSizeSpecInfo {}, token, entries), E_OK); - EXPECT_EQ(entries.size(), 3U); // 3 for test, 1 query data and 2 miss query data. + EXPECT_EQ(entries.size(), 3U); // 3 miss query data. /** * @tc.steps: step8. Put data into "data" table from deviceA for 10 times. @@ -942,10 +944,10 @@ HWTEST_F(DistributedDBRelationalGetDataTest, MissQuery1, TestSize.Level1) /** * @tc.steps: step9. Check data. - * @tc.expected: There is 1 data in table. + * @tc.expected: There is 0 data in table. */ - ExpectCount(db, getDataSql, 1U); // 4 - ExpectCount(db, getLogSql, 1U); // 4 + ExpectCount(db, getDataSql, 0U); // 0 data exists + ExpectCount(db, getLogSql, 0U); // 0 data exists sqlite3_close(db); RefObject::DecObjRef(g_store); -- Gitee