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
16 #include "distributed_kv_store_ffi.h"
17 #include "distributed_kv_store_impl.h"
18 #include "distributed_kv_store_utils.h"
19
20 using namespace OHOS::FFI;
21 using namespace OHOS::DistributedKVStore;
22
23 namespace OHOS {
24 namespace DistributedKVStore {
25 extern "C" {
FfiOHOSDistributedKVStoreCreateKVManager(const char * boudleName,OHOS::AbilityRuntime::Context * context)26 int64_t FfiOHOSDistributedKVStoreCreateKVManager(const char* boudleName, OHOS::AbilityRuntime::Context* context)
27 {
28 if (context == nullptr) {
29 return -1;
30 }
31 auto nativeCJKVManager = FFIData::Create<CJKVManager>(boudleName, context);
32 if (nativeCJKVManager == nullptr) {
33 return -1;
34 }
35 return nativeCJKVManager->GetID();
36 }
37
FfiOHOSDistributedKVStoreGetKVStore(int64_t id,const char * storeId,CJOptions options,int32_t * errCode)38 int64_t FfiOHOSDistributedKVStoreGetKVStore(int64_t id, const char* storeId, CJOptions options, int32_t* errCode)
39 {
40 auto instance = FFIData::GetData<CJKVManager>(id);
41 if (instance == nullptr) {
42 *errCode = -1;
43 return -1;
44 }
45 return instance->GetKVStore(storeId, options, *errCode);
46 }
47
FfiOHOSDistributedKVStoreCloseKVStore(int64_t id,const char * appId,const char * storeId)48 int32_t FfiOHOSDistributedKVStoreCloseKVStore(int64_t id, const char* appId, const char* storeId)
49 {
50 auto instance = FFIData::GetData<CJKVManager>(id);
51 if (instance == nullptr) {
52 return -1;
53 }
54 return instance->CloseKVStore(appId, storeId);
55 }
56
FfiOHOSDistributedKVStoreDeleteKVStore(int64_t id,const char * appId,const char * storeId)57 int32_t FfiOHOSDistributedKVStoreDeleteKVStore(int64_t id, const char* appId, const char* storeId)
58 {
59 auto instance = FFIData::GetData<CJKVManager>(id);
60 if (instance == nullptr) {
61 return -1;
62 }
63 return instance->DeleteKVStore(appId, storeId);
64 }
65
FfiOHOSDistributedKVStoreGetAllKVStoreId(int64_t id,const char * appId,int32_t * errCode)66 CArrStr FfiOHOSDistributedKVStoreGetAllKVStoreId(int64_t id, const char* appId, int32_t* errCode)
67 {
68 auto instance = FFIData::GetData<CJKVManager>(id);
69 if (instance == nullptr) {
70 *errCode = -1;
71 return CArrStr{};
72 }
73 return instance->GetAllKVStoreId(appId, *errCode);
74 }
75
FfiOHOSDistributedKVStoreSingleKVStorePut(int64_t id,const char * key,ValueType value)76 int32_t FfiOHOSDistributedKVStoreSingleKVStorePut(int64_t id, const char* key, ValueType value)
77 {
78 auto instance = FFIData::GetData<CJSingleKVStore>(id);
79 if (instance == nullptr) {
80 return -1;
81 }
82 return instance->Put(key, value);
83 }
84
FfiOHOSDistributedKVStoreSingleKVStorePutBatch(int64_t id,const CArrEntry cArrEntry)85 int32_t FfiOHOSDistributedKVStoreSingleKVStorePutBatch(int64_t id, const CArrEntry cArrEntry)
86 {
87 auto instance = FFIData::GetData<CJSingleKVStore>(id);
88 if (instance == nullptr) {
89 return -1;
90 }
91 return instance->PutBatch(cArrEntry);
92 }
93
FfiOHOSDistributedKVStoreSingleKVStoreDelete(int64_t id,const char * key)94 int32_t FfiOHOSDistributedKVStoreSingleKVStoreDelete(int64_t id, const char* key)
95 {
96 auto instance = FFIData::GetData<CJSingleKVStore>(id);
97 if (instance == nullptr) {
98 return -1;
99 }
100 return instance->Delete(key);
101 }
102
FfiOHOSDistributedKVStoreSingleKVStoreDeleteBatch(int64_t id,const CArrStr cArrStr)103 int32_t FfiOHOSDistributedKVStoreSingleKVStoreDeleteBatch(int64_t id, const CArrStr cArrStr)
104 {
105 auto instance = FFIData::GetData<CJSingleKVStore>(id);
106 if (instance == nullptr) {
107 return -1;
108 }
109 return instance->DeleteBatch(cArrStr);
110 }
111
FfiOHOSDistributedKVStoreSingleKVStoreGet(int64_t id,const char * key,int32_t * errCode)112 ValueType FfiOHOSDistributedKVStoreSingleKVStoreGet(int64_t id, const char* key, int32_t* errCode)
113 {
114 auto instance = FFIData::GetData<CJSingleKVStore>(id);
115 if (instance == nullptr) {
116 *errCode = -1;
117 return ValueType{};
118 }
119 return instance->Get(key, *errCode);
120 }
121
FfiOHOSDistributedKVStoreSingleKVStoreBackup(int64_t id,const char * file)122 int32_t FfiOHOSDistributedKVStoreSingleKVStoreBackup(int64_t id, const char* file)
123 {
124 auto instance = FFIData::GetData<CJSingleKVStore>(id);
125 if (instance == nullptr) {
126 return -1;
127 }
128 return instance->Backup(file);
129 }
130
FfiOHOSDistributedKVStoreSingleKVStoreRestore(int64_t id,const char * file)131 int32_t FfiOHOSDistributedKVStoreSingleKVStoreRestore(int64_t id, const char* file)
132 {
133 auto instance = FFIData::GetData<CJSingleKVStore>(id);
134 if (instance == nullptr) {
135 return -1;
136 }
137 return instance->Restore(file);
138 }
139
FfiOHOSDistributedKVStoreSingleKVStoreStartTransaction(int64_t id)140 int32_t FfiOHOSDistributedKVStoreSingleKVStoreStartTransaction(int64_t id)
141 {
142 auto instance = FFIData::GetData<CJSingleKVStore>(id);
143 if (instance == nullptr) {
144 return -1;
145 }
146 return instance->StartTransaction();
147 }
148
FfiOHOSDistributedKVStoreSingleKVStoreCommit(int64_t id)149 int32_t FfiOHOSDistributedKVStoreSingleKVStoreCommit(int64_t id)
150 {
151 auto instance = FFIData::GetData<CJSingleKVStore>(id);
152 if (instance == nullptr) {
153 return -1;
154 }
155 return instance->Commit();
156 }
157
FfiOHOSDistributedKVStoreSingleKVStoreRollback(int64_t id)158 int32_t FfiOHOSDistributedKVStoreSingleKVStoreRollback(int64_t id)
159 {
160 auto instance = FFIData::GetData<CJSingleKVStore>(id);
161 if (instance == nullptr) {
162 return -1;
163 }
164 return instance->Rollback();
165 }
166
FfiOHOSDistributedKVStoreSingleKVStoreEnableSync(int64_t id,bool enabled)167 int32_t FfiOHOSDistributedKVStoreSingleKVStoreEnableSync(int64_t id, bool enabled)
168 {
169 auto instance = FFIData::GetData<CJSingleKVStore>(id);
170 if (instance == nullptr) {
171 return -1;
172 }
173 return instance->EnableSync(enabled);
174 }
175
FfiOHOSDistributedKVStoreSingleKVStoreSetSyncParam(int64_t id,uint32_t defaultAllowedDelayMs)176 int32_t FfiOHOSDistributedKVStoreSingleKVStoreSetSyncParam(int64_t id, uint32_t defaultAllowedDelayMs)
177 {
178 auto instance = FFIData::GetData<CJSingleKVStore>(id);
179 if (instance == nullptr) {
180 return -1;
181 }
182 return instance->SetSyncParam(defaultAllowedDelayMs);
183 }
184
185
FfiOHOSDistributedKVStoreQueryConstructor()186 int64_t FfiOHOSDistributedKVStoreQueryConstructor()
187 {
188 auto nativeCJQuery = FFIData::Create<CQuery>();
189 if (nativeCJQuery == nullptr) {
190 return -1;
191 }
192 return nativeCJQuery->GetID();
193 }
194
FfiOHOSDistributedKVStoreQueryReset(int64_t id)195 void FfiOHOSDistributedKVStoreQueryReset(int64_t id)
196 {
197 auto instance = FFIData::GetData<CQuery>(id);
198 if (instance == nullptr) {
199 return;
200 }
201 return instance->Reset();
202 }
203
FfiOHOSDistributedKVStoreQueryEqualTo(int64_t id,const char * field,ValueType value)204 void FfiOHOSDistributedKVStoreQueryEqualTo(int64_t id, const char* field, ValueType value)
205 {
206 auto instance = FFIData::GetData<CQuery>(id);
207 if (instance == nullptr) {
208 return;
209 }
210 return instance->EqualTo(field, value);
211 }
212
FfiOHOSDistributedKVStoreDeviceKVStoreGet(int64_t id,const char * deviceId,const char * key,int32_t * errCode)213 ValueType FfiOHOSDistributedKVStoreDeviceKVStoreGet(int64_t id, const char* deviceId, const char* key, int32_t* errCode)
214 {
215 auto instance = FFIData::GetData<CJDeviceKVStore>(id);
216 if (instance == nullptr) {
217 *errCode = -1;
218 return ValueType{};
219 }
220 return instance->Get(deviceId, key, *errCode);
221 }
222
FfiOHOSDistributedKVStoreDeviceKVStoreGetEntries(int64_t id,const char * deviceId,const char * keyPrefix,int32_t * errCode)223 CArrEntry FfiOHOSDistributedKVStoreDeviceKVStoreGetEntries(int64_t id, const char* deviceId, const char* keyPrefix,
224 int32_t* errCode)
225 {
226 auto instance = FFIData::GetData<CJDeviceKVStore>(id);
227 if (instance == nullptr) {
228 *errCode = -1;
229 return CArrEntry{};
230 }
231 return instance->GetEntries(deviceId, keyPrefix, *errCode);
232 }
233
FfiOHOSDistributedKVStoreDeviceKVStoreGetEntriesQuery(int64_t id,const char * deviceId,int64_t queryId,int32_t * errCode)234 CArrEntry FfiOHOSDistributedKVStoreDeviceKVStoreGetEntriesQuery(int64_t id, const char* deviceId, int64_t queryId,
235 int32_t* errCode)
236 {
237 auto instance = FFIData::GetData<CJDeviceKVStore>(id);
238 auto query = FFIData::GetData<CQuery>(queryId);
239 if (instance == nullptr || query == nullptr) {
240 *errCode = -1;
241 return CArrEntry{};
242 }
243 return instance->GetEntries(deviceId, query, *errCode);
244 }
245
FfiOHOSDistributedKVStoreDeviceKVStoreGetResultSet(int64_t id,const char * deviceId,const char * keyPrefix,int32_t * errCode)246 int64_t FfiOHOSDistributedKVStoreDeviceKVStoreGetResultSet(int64_t id, const char* deviceId, const char* keyPrefix,
247 int32_t* errCode)
248 {
249 auto instance = FFIData::GetData<CJDeviceKVStore>(id);
250 if (instance == nullptr) {
251 *errCode = -1;
252 return -1;
253 }
254 return instance->GetResultSet(deviceId, keyPrefix, *errCode);
255 }
256
FfiOHOSDistributedKVStoreDeviceKVStoreGetResultSetQuery(int64_t id,const char * deviceId,int64_t queryId,int32_t * errCode)257 int64_t FfiOHOSDistributedKVStoreDeviceKVStoreGetResultSetQuery(int64_t id, const char* deviceId, int64_t queryId,
258 int32_t* errCode)
259 {
260 auto instance = FFIData::GetData<CJDeviceKVStore>(id);
261 auto query = FFIData::GetData<CQuery>(queryId);
262 if (instance == nullptr || query == nullptr) {
263 *errCode = -1;
264 return -1;
265 }
266 return instance->GetResultSetQuery(deviceId, query, *errCode);
267 }
268
FfiOHOSDistributedKVStoreDeviceKVStoreGetResultSize(int64_t id,const char * deviceId,int64_t queryId,int32_t * errCode)269 int32_t FfiOHOSDistributedKVStoreDeviceKVStoreGetResultSize(int64_t id, const char* deviceId, int64_t queryId,
270 int32_t* errCode)
271 {
272 auto instance = FFIData::GetData<CJDeviceKVStore>(id);
273 auto query = FFIData::GetData<CQuery>(queryId);
274 if (instance == nullptr || query == nullptr) {
275 *errCode = -1;
276 return -1;
277 }
278 return instance->GetResultSize(deviceId, query, *errCode);
279 }
280
FfiOHOSDistributedKVStoreKVStoreResultSetGetCount(int64_t id)281 int32_t FfiOHOSDistributedKVStoreKVStoreResultSetGetCount(int64_t id)
282 {
283 auto instance = FFIData::GetData<OHOS::DistributedKVStore::CKvStoreResultSet>(id);
284 if (instance == nullptr) {
285 return -1;
286 }
287 return instance->GetCount();
288 }
289 }
290 }
291 }
292