diff --git a/frameworks/innerkitsimpl/distributeddatafwk/test/unittest/device_kvstore_test.cpp b/frameworks/innerkitsimpl/distributeddatafwk/test/unittest/device_kvstore_test.cpp index 97319050167a7bd53b1a5c2e37dc349a256aaadb..2f5cc19c867a4a6b85d5a07f24c3f0bb25011744 100644 --- a/frameworks/innerkitsimpl/distributeddatafwk/test/unittest/device_kvstore_test.cpp +++ b/frameworks/innerkitsimpl/distributeddatafwk/test/unittest/device_kvstore_test.cpp @@ -301,6 +301,7 @@ HWTEST_F(DeviceKvStoreTest, GetPrefixQueryEntriesAndResultSet, TestSize.Level1) DataQuery dataQuery; dataQuery.KeyPrefix(GetKey(prefix)); + dataQuery.Limit(10, 0); kvStore_->GetCount(dataQuery, sumGet); EXPECT_EQ(sumGet, sum) << "count is not equal 10."; diff --git a/frameworks/innerkitsimpl/distributeddatafwk/test/unittest/single_kvstore_client_test.cpp b/frameworks/innerkitsimpl/distributeddatafwk/test/unittest/single_kvstore_client_test.cpp index 1d21b432b0f537518ae0fa10f8d537bbc36c5a33..4badb313eb01da67fcc307c4985b481748d604e4 100644 --- a/frameworks/innerkitsimpl/distributeddatafwk/test/unittest/single_kvstore_client_test.cpp +++ b/frameworks/innerkitsimpl/distributeddatafwk/test/unittest/single_kvstore_client_test.cpp @@ -255,6 +255,57 @@ HWTEST_F(SingleKvStoreClientTest, GetEntriesAndResultSet001, TestSize.Level1) EXPECT_EQ(closeResultSetStatus, Status::SUCCESS) << "close resultSet failed."; } +/** +* @tc.name: GetEntriesByDataQuery +* @tc.desc: Batch put values and get values. +* @tc.type: FUNC +* @tc.require: I5GFGR +* @tc.author: Sven Wang +*/ +HWTEST_F(SingleKvStoreClientTest, GetEntriesByDataQuery, TestSize.Level1) +{ + EXPECT_NE(singleKvStorePtr, nullptr) << "kvStorePtr is null."; + + // prepare 10 + size_t sum = 10; + int sum_1 = 10; + std::string prefix = "prefix_"; + for (size_t i = 0; i < sum; i++) { + singleKvStorePtr->Put({prefix + std::to_string(i)}, {std::to_string(i)}); + } + + std::vector results; + singleKvStorePtr->GetEntries({ prefix }, results); + EXPECT_EQ(results.size(), sum) << "entries size is not equal 10."; + DataQuery dataQuery; + dataQuery.KeyPrefix(prefix); + dataQuery.Limit(10, 0); + std::shared_ptr resultSet; + Status status = singleKvStorePtr->GetResultSet(dataQuery, resultSet); + EXPECT_EQ(status, Status::SUCCESS); + EXPECT_EQ(resultSet->GetCount(), sum_1) << "resultSet size is not equal 10."; + resultSet->IsFirst(); + resultSet->IsAfterLast(); + resultSet->IsBeforeFirst(); + resultSet->MoveToPosition(1); + resultSet->IsLast(); + resultSet->MoveToPrevious(); + resultSet->MoveToNext(); + resultSet->MoveToLast(); + resultSet->MoveToFirst(); + resultSet->GetPosition(); + Entry entry; + resultSet->GetEntry(entry); + + for (size_t i = 0; i < sum; i++) { + singleKvStorePtr->Delete({prefix + std::to_string(i)}); + } + + auto closeResultSetStatus = singleKvStorePtr->CloseResultSet(resultSet); + EXPECT_EQ(closeResultSetStatus, Status::SUCCESS) << "close resultSet failed."; +} + + /** * @tc.name: GetEmptyEntries * @tc.desc: Batch get empty values. diff --git a/services/distributeddataservice/libs/distributeddb/common/src/query_expression.cpp b/services/distributeddataservice/libs/distributeddb/common/src/query_expression.cpp index 6de2914eaf437ac7e2ad64bea23a9a2ac73f9b4e..3085a1e1e4aff8e44e54eec7a34dc4ebe0eb1207 100644 --- a/services/distributeddataservice/libs/distributeddb/common/src/query_expression.cpp +++ b/services/distributeddataservice/libs/distributeddb/common/src/query_expression.cpp @@ -184,7 +184,7 @@ void QueryExpression::Or() void QueryExpression::QueryByPrefixKey(const std::vector &key) { - queryInfo_.emplace_back(QueryObjNode{QueryObjType::QUERY_BY_KEY_PREFIX, std::string(), + queryInfo_.emplace_front(QueryObjNode{QueryObjType::QUERY_BY_KEY_PREFIX, std::string(), QueryValueType::VALUE_TYPE_NULL, std::vector()}); prefixKey_ = key; }