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