From 0227d024ee8a22c16d66a82bbb3b8009d48f4e02 Mon Sep 17 00:00:00 2001 From: wangshixing666 Date: Mon, 16 May 2022 18:54:17 +0800 Subject: [PATCH 1/2] kvdb resultset code Signed-off-by: wangshixing666 --- .../include/kvdbstore_result_set.h | 6 +-- .../src/kvdbstore_result_set.cpp | 39 +++++++++---------- 2 files changed, 22 insertions(+), 23 deletions(-) diff --git a/frameworks/innerkitsimpl/distributeddatafwk/include/kvdbstore_result_set.h b/frameworks/innerkitsimpl/distributeddatafwk/include/kvdbstore_result_set.h index be5e7c58d..a650fe785 100644 --- a/frameworks/innerkitsimpl/distributeddatafwk/include/kvdbstore_result_set.h +++ b/frameworks/innerkitsimpl/distributeddatafwk/include/kvdbstore_result_set.h @@ -33,14 +33,14 @@ public: int GetRowCount(int &count) override; - int GetAllColumnOrKeyName(std::vector &columnOrKeyNames) override; + int GetAllColumnName(std::vector &columnOrKeyNames) override; - bool OnGo(int oldRowIndex, int newRowIndex, const std::shared_ptr &writer) override; + bool OnGo(int startRowIndex, int targetRowIndex, DataShareBlockWriter &writer) override; private: int Count(); - bool FillBlock(int startRowIndex, const std::shared_ptr &writer); + bool FillBlock(int fillRowIndex, DataShareBlockWriter &writer); static constexpr int INVALID_COUNT = -1; diff --git a/frameworks/innerkitsimpl/distributeddatafwk/src/kvdbstore_result_set.cpp b/frameworks/innerkitsimpl/distributeddatafwk/src/kvdbstore_result_set.cpp index 8d3d46ebd..6b566ae30 100644 --- a/frameworks/innerkitsimpl/distributeddatafwk/src/kvdbstore_result_set.cpp +++ b/frameworks/innerkitsimpl/distributeddatafwk/src/kvdbstore_result_set.cpp @@ -30,14 +30,14 @@ int KvDBStoreResultSet::GetRowCount(int &count) return count == INVALID_COUNT ? E_ERROR : E_OK; } -int KvDBStoreResultSet::GetAllColumnOrKeyName(std::vector &columnOrKeyNames) +int KvDBStoreResultSet::GetAllColumnName(std::vector &columnOrKeyNames) { columnOrKeyNames.clear(); columnOrKeyNames.emplace_back("key", "value"); return E_OK; } -bool KvDBStoreResultSet::FillBlock(int startRowIndex, const std::shared_ptr &writer) +bool KvDBStoreResultSet::FillBlock(int fillRowIndex, DataShareBlockWriter& writer) { if (kvResultSet_ == nullptr) { @@ -45,7 +45,7 @@ bool KvDBStoreResultSet::FillBlock(int startRowIndex, const std::shared_ptrMoveToPosition(startRowIndex); + bool isMoved = kvResultSet_->MoveToPosition(fillRowIndex); if (!isMoved) { ZLOGE("MoveToPosition failed"); @@ -60,27 +60,20 @@ bool KvDBStoreResultSet::FillBlock(int startRowIndex, const std::shared_ptrClear(); - if(clearStatus != E_OK){ - ZLOGE("clear writer failed: %{public}d", clearStatus); + int statusAlloc = writer.AllocRow(); + if (statusAlloc != E_OK) { + ZLOGE("KvStoreDataShareResultSet:: SharedBlock is full."); return false; } - if ((entry.key.Size() + entry.value.Size()) > (writer->Size() - writer->GetUsedBytes())) - { - ZLOGE("not enought memory; entry size: %{public}d, writer size: %{public}d", - entry.key.Size() + entry.value.Size(), writer->Size() - writer->GetUsedBytes()); - return false; - } - // uint8_t - int keyStatus = writer->WriteBlob((uint32_t)startRowIndex, 0, &entry.key.Data(), entry.key.Size()); + int keyStatus = writer.WriteBlob(fillRowIndex, 0, &entry.key.Data(), entry.key.Size()); if(keyStatus != E_OK) { ZLOGE("WriteBlob key error: %{public}d", keyStatus); return false; } - int valueStatus = writer->WriteBlob((uint32_t)startRowIndex, 1, &entry.value.Data(), entry.value.Size()); + int valueStatus = writer.WriteBlob(fillRowIndex, 1, &entry.value.Data(), entry.value.Size()); if(valueStatus != E_OK) { ZLOGE("WriteBlob value error: %{public}d", valueStatus); @@ -110,14 +103,20 @@ int KvDBStoreResultSet::Count() return count; } -bool KvDBStoreResultSet::OnGo(int oldRowIndex, int newRowIndex, const std::shared_ptr &writer) +bool KvDBStoreResultSet::OnGo(int startRowIndex, int targetRowIndex, DataShareBlockWriter &writer) { - if (writer == nullptr || newRowIndex >= Count()) - { - ZLOGE("invalid writer: {public} or newRowIndex: %{public}d", newRowIndex); + if (startRowIndex >= Count()) { + ZLOGE("newRowIndex out of line: %{public}d", startRowIndex); return false; } - return FillBlock(newRowIndex, writer); + for (int pos = startRowIndex; pos <= targetRowIndex; pos++) { + bool ret = FillBlock(pos, writer); + if (!ret) { + ZLOGE("FillBlock failed"); + return ret; + } + } + return true; } } // namespace DistributedKv } // namespace OHOS -- Gitee From a7e24b7ee17747d0090519c4be3ec9b5ee421ca7 Mon Sep 17 00:00:00 2001 From: wangshixing666 Date: Fri, 20 May 2022 13:49:26 +0800 Subject: [PATCH 2/2] kvdb code modify Signed-off-by: wangshixing666 --- .../include/kvdbstore_result_set.h | 10 +++++----- .../src/kvdbstore_datashare_native.cpp | 2 +- .../src/kvdbstore_result_set.cpp | 15 ++++++++------- .../include/kvdbstore_datashare_native.h | 4 ++-- 4 files changed, 16 insertions(+), 15 deletions(-) diff --git a/frameworks/innerkitsimpl/distributeddatafwk/include/kvdbstore_result_set.h b/frameworks/innerkitsimpl/distributeddatafwk/include/kvdbstore_result_set.h index a650fe785..e24990a26 100644 --- a/frameworks/innerkitsimpl/distributeddatafwk/include/kvdbstore_result_set.h +++ b/frameworks/innerkitsimpl/distributeddatafwk/include/kvdbstore_result_set.h @@ -16,7 +16,7 @@ #ifndef KVDBSTORE_RESULT_SET_H #define KVDBSTORE_RESULT_SET_H -#include "datashare_abstract_result_set.h" +#include "result_set_bridge.h" #include "kvstore_result_set.h" #include "single_kvstore.h" #include "datashare_errno.h" @@ -24,7 +24,7 @@ namespace OHOS { namespace DistributedKv { using namespace DataShare; -class KvDBStoreResultSet : public DataShareAbstractResultSet +class KvDBStoreResultSet : public ResultSetBridge { public: KvDBStoreResultSet(std::shared_ptr kvResultSet); @@ -33,14 +33,14 @@ public: int GetRowCount(int &count) override; - int GetAllColumnName(std::vector &columnOrKeyNames) override; + int GetAllColumnNames(std::vector &columnNames) override; - bool OnGo(int startRowIndex, int targetRowIndex, DataShareBlockWriter &writer) override; + bool OnGo(int startRowIndex, int targetRowIndex, Writer &writer) override; private: int Count(); - bool FillBlock(int fillRowIndex, DataShareBlockWriter &writer); + bool FillBlock(int fillRowIndex, Writer &writer); static constexpr int INVALID_COUNT = -1; diff --git a/frameworks/innerkitsimpl/distributeddatafwk/src/kvdbstore_datashare_native.cpp b/frameworks/innerkitsimpl/distributeddatafwk/src/kvdbstore_datashare_native.cpp index fc875b7e4..b0a7dcc2c 100644 --- a/frameworks/innerkitsimpl/distributeddatafwk/src/kvdbstore_datashare_native.cpp +++ b/frameworks/innerkitsimpl/distributeddatafwk/src/kvdbstore_datashare_native.cpp @@ -28,7 +28,7 @@ namespace DistributedKv { kvDBDataShareNative::kvDBDataShareNative(std::shared_ptr kvStoreClient) :kvStoreClient_(kvStoreClient) {}; -std::shared_ptr kvDBDataShareNative::GetDataShareResult(const DataSharePredicates &predicate) +std::shared_ptr kvDBDataShareNative::GetDataShareResult(const DataSharePredicates &predicate) { if(kvStoreClient_ == nullptr) { diff --git a/frameworks/innerkitsimpl/distributeddatafwk/src/kvdbstore_result_set.cpp b/frameworks/innerkitsimpl/distributeddatafwk/src/kvdbstore_result_set.cpp index 6b566ae30..c16e3c621 100644 --- a/frameworks/innerkitsimpl/distributeddatafwk/src/kvdbstore_result_set.cpp +++ b/frameworks/innerkitsimpl/distributeddatafwk/src/kvdbstore_result_set.cpp @@ -30,14 +30,15 @@ int KvDBStoreResultSet::GetRowCount(int &count) return count == INVALID_COUNT ? E_ERROR : E_OK; } -int KvDBStoreResultSet::GetAllColumnName(std::vector &columnOrKeyNames) +int KvDBStoreResultSet::GetAllColumnNames(std::vector &columnNames) { - columnOrKeyNames.clear(); - columnOrKeyNames.emplace_back("key", "value"); + columnNames.clear(); + columnNames.emplace_back("key"); + columnNames.emplace_back("value"); return E_OK; } -bool KvDBStoreResultSet::FillBlock(int fillRowIndex, DataShareBlockWriter& writer) +bool KvDBStoreResultSet::FillBlock(int fillRowIndex, Writer& writer) { if (kvResultSet_ == nullptr) { @@ -66,14 +67,14 @@ bool KvDBStoreResultSet::FillBlock(int fillRowIndex, DataShareBlockWriter& write return false; } - int keyStatus = writer.WriteBlob(fillRowIndex, 0, &entry.key.Data(), entry.key.Size()); + int keyStatus = writer.Write(0, (uint8_t *)&entry.key.Data(), entry.key.Size()); if(keyStatus != E_OK) { ZLOGE("WriteBlob key error: %{public}d", keyStatus); return false; } - int valueStatus = writer.WriteBlob(fillRowIndex, 1, &entry.value.Data(), entry.value.Size()); + int valueStatus = writer.Write(1, (uint8_t *)&entry.value.Data(), entry.value.Size()); if(valueStatus != E_OK) { ZLOGE("WriteBlob value error: %{public}d", valueStatus); @@ -103,7 +104,7 @@ int KvDBStoreResultSet::Count() return count; } -bool KvDBStoreResultSet::OnGo(int startRowIndex, int targetRowIndex, DataShareBlockWriter &writer) +bool KvDBStoreResultSet::OnGo(int startRowIndex, int targetRowIndex, Writer &writer) { if (startRowIndex >= Count()) { ZLOGE("newRowIndex out of line: %{public}d", startRowIndex); diff --git a/interfaces/innerkits/distributeddata/include/kvdbstore_datashare_native.h b/interfaces/innerkits/distributeddata/include/kvdbstore_datashare_native.h index 64177e676..b8df3a253 100644 --- a/interfaces/innerkits/distributeddata/include/kvdbstore_datashare_native.h +++ b/interfaces/innerkits/distributeddata/include/kvdbstore_datashare_native.h @@ -20,7 +20,7 @@ #include "single_kvstore.h" #include "datashare_predicates.h" #include "data_query.h" -#include "datashare_abstract_result_set.h" +#include "result_set_bridge.h" namespace OHOS { namespace DistributedKv { @@ -32,7 +32,7 @@ public: ~kvDBDataShareNative() = default; - std::shared_ptr GetDataShareResult(const DataSharePredicates &predicate); + std::shared_ptr GetDataShareResult(const DataSharePredicates &predicate); private: std::shared_ptr kvStoreClient_ = nullptr; -- Gitee