1 /*
2 * Copyright (c) 2021 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 "kv_store_errno.h"
17 #include "db_errno.h"
18
19 namespace DistributedDB {
20 struct DBErrnoPair {
21 int errCode;
22 DBStatus status;
23 };
24
25 namespace {
26 const DBErrnoPair ERRNO_MAP[] = {
27 { E_OK, OK },
28 { -E_BUSY, BUSY },
29 { -E_NOT_FOUND, NOT_FOUND },
30 { -E_INVALID_ARGS, INVALID_ARGS },
31 { -E_TIMEOUT, TIME_OUT },
32 { -E_NOT_SUPPORT, NOT_SUPPORT },
33 { -E_INVALID_PASSWD_OR_CORRUPTED_DB, INVALID_PASSWD_OR_CORRUPTED_DB },
34 { -E_MAX_LIMITS, OVER_MAX_LIMITS },
35 { -E_INVALID_FILE, INVALID_FILE },
36 { -E_INVALID_PATH, NO_PERMISSION },
37 { -E_READ_ONLY, READ_ONLY },
38 { -E_INVALID_SCHEMA, INVALID_SCHEMA },
39 { -E_SCHEMA_MISMATCH, SCHEMA_MISMATCH },
40 { -E_SCHEMA_VIOLATE_VALUE, SCHEMA_VIOLATE_VALUE },
41 { -E_VALUE_MISMATCH_FEILD_COUNT, INVALID_VALUE_FIELDS },
42 { -E_VALUE_MISMATCH_FEILD_TYPE, INVALID_FIELD_TYPE },
43 { -E_VALUE_MISMATCH_CONSTRAINT, CONSTRAIN_VIOLATION },
44 { -E_INVALID_FORMAT, INVALID_FORMAT },
45 { -E_STALE, STALE },
46 { -E_LOCAL_DELETED, LOCAL_DELETED },
47 { -E_LOCAL_DEFEAT, LOCAL_DEFEAT },
48 { -E_LOCAL_COVERED, LOCAL_COVERED },
49 { -E_INVALID_QUERY_FORMAT, INVALID_QUERY_FORMAT },
50 { -E_INVALID_QUERY_FIELD, INVALID_QUERY_FIELD },
51 { -E_ALREADY_SET, ALREADY_SET },
52 { -E_EKEYREVOKED, EKEYREVOKED_ERROR },
53 { -E_SECURITY_OPTION_CHECK_ERROR, SECURITY_OPTION_CHECK_ERROR },
54 { -E_INTERCEPT_DATA_FAIL, INTERCEPT_DATA_FAIL },
55 { -E_LOG_OVER_LIMITS, LOG_OVER_LIMITS },
56 { -E_DISTRIBUTED_SCHEMA_NOT_FOUND, DISTRIBUTED_SCHEMA_NOT_FOUND },
57 { -E_DISTRIBUTED_SCHEMA_CHANGED, DISTRIBUTED_SCHEMA_CHANGED },
58 { -E_MODE_MISMATCH, MODE_MISMATCH },
59 { -E_NO_NEED_ACTIVE, NOT_ACTIVE },
60 { -E_NONEXISTENT, NONEXISTENT },
61 { -E_TYPE_MISMATCH, TYPE_MISMATCH },
62 { -E_DENIED_SQL, NO_PERMISSION },
63 { -E_USER_CHANGE, USER_CHANGED },
64 { -E_PERIPHERAL_INTERFACE_FAIL, COMM_FAILURE },
65 { -E_FEEDBACK_COMMUNICATOR_NOT_FOUND, COMM_FAILURE },
66 { -E_FEEDBACK_UNKNOWN_MESSAGE, NOT_SUPPORT },
67 { -E_NOT_PERMIT, PERMISSION_CHECK_FORBID_SYNC },
68 { -E_REMOTE_OVER_SIZE, OVER_MAX_LIMITS },
69 { -E_CONSTRAINT, CONSTRAINT },
70 { -E_CLOUD_ERROR, CLOUD_ERROR },
71 { -E_DB_CLOSED, DB_CLOSED },
72 { -E_NOT_SET, UNSET_ERROR },
73 { -E_CLOUD_NETWORK_ERROR, CLOUD_NETWORK_ERROR },
74 { -E_CLOUD_SYNC_UNSET, CLOUD_SYNC_UNSET },
75 { -E_CLOUD_FULL_RECORDS, CLOUD_FULL_RECORDS },
76 { -E_CLOUD_LOCK_ERROR, CLOUD_LOCK_ERROR },
77 { -E_CLOUD_ASSET_SPACE_INSUFFICIENT, CLOUD_ASSET_SPACE_INSUFFICIENT },
78 { -E_TABLE_REFERENCE_CHANGED, PROPERTY_CHANGED },
79 { -E_CLOUD_VERSION_CONFLICT, CLOUD_VERSION_CONFLICT },
80 { -E_CLOUD_RECORD_EXIST_CONFLICT, CLOUD_RECORD_EXIST_CONFLICT },
81 { -E_REMOVE_ASSETS_FAILED, REMOTE_ASSETS_FAIL },
82 { -E_WITH_INVENTORY_DATA, WITH_INVENTORY_DATA },
83 { -E_WAIT_COMPENSATED_SYNC, WAIT_COMPENSATED_SYNC },
84 { -E_CLOUD_SYNC_TASK_MERGED, CLOUD_SYNC_TASK_MERGED },
85 { -E_SQLITE_CANT_OPEN, SQLITE_CANT_OPEN },
86 };
87 }
88
TransferDBErrno(int err,bool isPass)89 DBStatus TransferDBErrno(int err, bool isPass)
90 {
91 for (const auto &item : ERRNO_MAP) {
92 if (item.errCode == err) {
93 return item.status;
94 }
95 }
96 if (isPass) {
97 return static_cast<DBStatus>(err);
98 }
99 return DB_ERROR;
100 }
101
TransferDBstatusToErr(DBStatus dbStatus)102 int TransferDBstatusToErr(DBStatus dbStatus)
103 {
104 for (const auto &item : ERRNO_MAP) {
105 if (item.status == dbStatus) {
106 return item.errCode;
107 }
108 }
109
110 return dbStatus;
111 }
112 };
113