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 *shareBlock = nullptr;
29 AppDataFwk::SharedBlock::Create(name, size, shareBlock);
30 if (shareBlock == nullptr) {
31 return;
32 }
33 shareBlock_ = std::shared_ptr<AppDataFwk::SharedBlock>(shareBlock);
34 }
35
~DataShareBlockWriterImpl()36 DataShareBlockWriterImpl::~DataShareBlockWriterImpl()
37 {
38 }
39
AllocRow()40 int DataShareBlockWriterImpl::AllocRow()
41 {
42 auto block = GetBlock();
43 if (block == nullptr) {
44 LOG_ERROR("shareBlock_ is nullptr");
45 return E_ERROR;
46 }
47 return ConvertErrorCode(block->AllocRow());
48 }
49
Write(uint32_t column)50 int DataShareBlockWriterImpl::Write(uint32_t column)
51 {
52 auto block = GetBlock();
53 if (block == nullptr) {
54 LOG_ERROR("shareBlock_ is nullptr");
55 return E_ERROR;
56 }
57 uint32_t currentRowIndex = 0;
58 if (!GetCurrentRowIndex(currentRowIndex)) {
59 LOG_ERROR("Write null fail");
60 return E_ERROR;
61 }
62 return ConvertErrorCode(block->PutNull(currentRowIndex, column));
63 }
64
Write(uint32_t column,int64_t value)65 int DataShareBlockWriterImpl::Write(uint32_t column, int64_t value)
66 {
67 auto block = GetBlock();
68 if (block == nullptr) {
69 LOG_ERROR("shareBlock_ is nullptr");
70 return E_ERROR;
71 }
72 uint32_t currentRowIndex = 0;
73 if (!GetCurrentRowIndex(currentRowIndex)) {
74 LOG_ERROR("Write long fail");
75 return E_ERROR;
76 }
77 return ConvertErrorCode(block->PutLong(currentRowIndex, column, value));
78 }
79
Write(uint32_t column,double value)80 int DataShareBlockWriterImpl::Write(uint32_t column, double value)
81 {
82 auto block = GetBlock();
83 if (block == nullptr) {
84 LOG_ERROR("shareBlock_ is nullptr");
85 return E_ERROR;
86 }
87 uint32_t currentRowIndex = 0;
88 if (!GetCurrentRowIndex(currentRowIndex)) {
89 LOG_ERROR("Write double fail");
90 return E_ERROR;
91 }
92 return ConvertErrorCode(block->PutDouble(currentRowIndex, column, value));
93 }
94
Write(uint32_t column,const uint8_t * value,size_t size)95 int DataShareBlockWriterImpl::Write(uint32_t column, const uint8_t *value, size_t size)
96 {
97 auto block = GetBlock();
98 if (block == nullptr) {
99 LOG_ERROR("shareBlock_ is nullptr");
100 return E_ERROR;
101 }
102 uint32_t currentRowIndex = 0;
103 if (!GetCurrentRowIndex(currentRowIndex)) {
104 LOG_ERROR("Write blob fail");
105 return E_ERROR;
106 }
107 return ConvertErrorCode(block->PutBlob(currentRowIndex, column, value, size));
108 }
109
Write(uint32_t column,const char * value,size_t sizeIncludingNull)110 int DataShareBlockWriterImpl::Write(uint32_t column, const char *value, size_t sizeIncludingNull)
111 {
112 auto block = GetBlock();
113 if (block == nullptr) {
114 LOG_ERROR("shareBlock_ is nullptr");
115 return E_ERROR;
116 }
117 uint32_t currentRowIndex = 0;
118 if (!GetCurrentRowIndex(currentRowIndex)) {
119 LOG_ERROR("Write string fail");
120 return E_ERROR;
121 }
122 return ConvertErrorCode(block->PutString(currentRowIndex, column, value, sizeIncludingNull));
123 }
124
GetBlock()125 std::shared_ptr<AppDataFwk::SharedBlock> DataShareBlockWriterImpl::GetBlock()
126 {
127 return shareBlock_;
128 }
129
GetCurrentRowIndex(uint32_t & rowIndex)130 bool DataShareBlockWriterImpl::GetCurrentRowIndex(uint32_t &rowIndex)
131 {
132 auto block = GetBlock();
133 if (block == nullptr) {
134 LOG_ERROR("shareBlock_ is nullptr");
135 return false;
136 }
137 uint32_t rowNum = block->GetRowNum();
138 if (rowNum > 0) {
139 rowIndex = rowNum - 1;
140 return true;
141 }
142 return false;
143 }
144 } // namespace DataShare
145 } // namespace OHOS
146