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