1 /*
2 * Copyright (c) 2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #include "values_buckets.h"
16
17 #include "rdb_errno.h"
18
19 namespace OHOS {
20 namespace NativeRdb {
ValuesBuckets()21 ValuesBuckets::ValuesBuckets()
22 {
23 fields_ = std::make_shared<std::set<std::string>>();
24 values_ = std::make_shared<std::set<ValueObject>>();
25 }
26
RowSize() const27 size_t ValuesBuckets::RowSize() const
28 {
29 return buckets_.size();
30 }
31
GetFieldsAndValues() const32 std::pair<ValuesBuckets::FieldsType, ValuesBuckets::ValuesType> ValuesBuckets::GetFieldsAndValues() const
33 {
34 return { fields_, values_ };
35 }
36
Put(const ValuesBucket & bucket)37 void ValuesBuckets::Put(const ValuesBucket &bucket)
38 {
39 BucketType row;
40 for (const auto &[field, value] : bucket.values_) {
41 auto fieldResult = fields_->insert(field);
42 auto valueResult = values_->insert(value);
43 row.insert(std::make_pair(std::ref(const_cast<std::string &>(*fieldResult.first)),
44 std::ref(const_cast<ValueObject &>(*valueResult.first))));
45 }
46 buckets_.push_back(std::move(row));
47 }
48
Get(size_t row,const FieldType & field) const49 std::pair<int, ValuesBuckets::ValueType> ValuesBuckets::Get(size_t row, const FieldType &field) const
50 {
51 ValueObject empty;
52 std::reference_wrapper<ValueObject> emptyRef(empty);
53 if (row >= buckets_.size()) {
54 return { E_INVALID_ARGS, emptyRef };
55 }
56
57 auto &bucket = buckets_[row];
58 auto it = bucket.find(field);
59 if (it == bucket.end()) {
60 return { E_INVALID_ARGS, emptyRef };
61 }
62
63 return { E_OK, it->second };
64 }
65 } // namespace NativeRdb
66 } // namespace OHOS
67