1 /*
2 * Copyright (c) 2022 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 "datashare_block_writer_impl.h"
16 #include "datashare_log.h"
17 #include "datashare_errno.h"
18
19 namespace OHOS {
20 namespace DataShare {
DataShareBlockWriterImpl()21 DataShareBlockWriterImpl::DataShareBlockWriterImpl() : shareBlock_(nullptr)
22 {
23 }
24
DataShareBlockWriterImpl(const std::string & name,size_t size)25 DataShareBlockWriterImpl::DataShareBlockWriterImpl(const std::string &name, size_t size)
26 : shareBlock_(nullptr)
27 {
28 AppDataFwk::SharedBlock::Create(name, size, shareBlock_);
29 }
30
~DataShareBlockWriterImpl()31 DataShareBlockWriterImpl::~DataShareBlockWriterImpl()
32 {
33 }
34
AllocRow()35 int DataShareBlockWriterImpl::AllocRow()
36 {
37 if (shareBlock_ == nullptr) {
38 LOG_ERROR("shareBlock_ is nullptr");
39 return E_ERROR;
40 }
41 return ConvertErrorCode(shareBlock_->AllocRow());
42 }
43
Write(uint32_t column)44 int DataShareBlockWriterImpl::Write(uint32_t column)
45 {
46 uint32_t currentRowIndex = 0;
47 if (!GetCurrentRowIndex(currentRowIndex)) {
48 LOG_ERROR("Write null fail");
49 return E_ERROR;
50 }
51 return ConvertErrorCode(shareBlock_->PutNull(currentRowIndex, column));
52 }
53
Write(uint32_t column,int64_t value)54 int DataShareBlockWriterImpl::Write(uint32_t column, int64_t value)
55 {
56 uint32_t currentRowIndex = 0;
57 if (!GetCurrentRowIndex(currentRowIndex)) {
58 LOG_ERROR("Write long fail");
59 return E_ERROR;
60 }
61 return ConvertErrorCode(shareBlock_->PutLong(currentRowIndex, column, value));
62 }
63
Write(uint32_t column,double value)64 int DataShareBlockWriterImpl::Write(uint32_t column, double value)
65 {
66 uint32_t currentRowIndex = 0;
67 if (!GetCurrentRowIndex(currentRowIndex)) {
68 LOG_ERROR("Write double fail");
69 return E_ERROR;
70 }
71 return ConvertErrorCode(shareBlock_->PutDouble(currentRowIndex, column, value));
72 }
73
Write(uint32_t column,const uint8_t * value,size_t size)74 int DataShareBlockWriterImpl::Write(uint32_t column, const uint8_t *value, size_t size)
75 {
76 uint32_t currentRowIndex = 0;
77 if (!GetCurrentRowIndex(currentRowIndex)) {
78 LOG_ERROR("Write blob fail");
79 return E_ERROR;
80 }
81 return ConvertErrorCode(shareBlock_->PutBlob(currentRowIndex, column, value, size));
82 }
83
Write(uint32_t column,const char * value,size_t sizeIncludingNull)84 int DataShareBlockWriterImpl::Write(uint32_t column, const char *value, size_t sizeIncludingNull)
85 {
86 uint32_t currentRowIndex = 0;
87 if (!GetCurrentRowIndex(currentRowIndex)) {
88 LOG_ERROR("Write string fail");
89 return E_ERROR;
90 }
91 return ConvertErrorCode(shareBlock_->PutString(currentRowIndex, column, value, sizeIncludingNull));
92 }
93
GetBlock() const94 AppDataFwk::SharedBlock *DataShareBlockWriterImpl::GetBlock() const
95 {
96 return shareBlock_;
97 }
98
GetCurrentRowIndex(uint32_t & rowIndex)99 bool DataShareBlockWriterImpl::GetCurrentRowIndex(uint32_t &rowIndex)
100 {
101 if (shareBlock_ == nullptr) {
102 LOG_ERROR("shareBlock_ is nullptr");
103 return false;
104 }
105 uint32_t rowNum = shareBlock_->GetRowNum();
106 if (rowNum > 0) {
107 rowIndex = rowNum - 1;
108 return true;
109 }
110 return false;
111 }
112 } // namespace DataShare
113 } // namespace OHOS
114