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 "convertor_error_code.h"
17
18 #include <algorithm>
19
20 #include "rdb_errno.h"
21 #include "relational_store_error_code.h"
22
23 namespace OHOS::RdbNdk {
24
25 static constexpr NdkErrorCode ERROR_CODE_MAP[] = {
26 { OHOS::NativeRdb::E_OK, RDB_OK },
27 { OHOS::NativeRdb::E_ERROR, RDB_E_ERROR },
28 { OHOS::NativeRdb::E_INVALID_ARGS, RDB_E_INVALID_ARGS },
29 { OHOS::NativeRdb::E_CANNOT_UPDATE_READONLY, RDB_E_CANNOT_UPDATE_READONLY },
30 { OHOS::NativeRdb::E_REMOVE_FILE, RDB_E_REMOVE_FILE },
31 { OHOS::NativeRdb::E_EMPTY_TABLE_NAME, RDB_E_EMPTY_TABLE_NAME },
32 { OHOS::NativeRdb::E_EMPTY_VALUES_BUCKET, RDB_E_EMPTY_VALUES_BUCKET },
33 { OHOS::NativeRdb::E_NOT_SELECT, RDB_E_EXECUTE_IN_STEP_QUERY },
34 { OHOS::NativeRdb::E_COLUMN_OUT_RANGE, RDB_E_INVALID_COLUMN_INDEX },
35 { OHOS::NativeRdb::E_INVALID_COLUMN_TYPE, RDB_E_INVALID_COLUMN_TYPE },
36 { OHOS::NativeRdb::E_EMPTY_FILE_NAME, RDB_E_EMPTY_FILE_NAME },
37 { OHOS::NativeRdb::E_INVALID_FILE_PATH, RDB_E_INVALID_FILE_PATH },
38 { OHOS::NativeRdb::E_TRANSACTION_IN_EXECUTE, RDB_E_TRANSACTION_IN_EXECUTE },
39 { OHOS::NativeRdb::E_ROW_OUT_RANGE, RDB_E_STEP_RESULT_IS_AFTER_LAST },
40 { OHOS::NativeRdb::E_EXECUTE_WRITE_IN_READ_CONNECTION, RDB_E_EXECUTE_WRITE_IN_READ_CONNECTION },
41 { OHOS::NativeRdb::E_BEGIN_TRANSACTION_IN_READ_CONNECTION, RDB_E_BEGIN_TRANSACTION_IN_READ_CONNECTION },
42 { OHOS::NativeRdb::E_NO_TRANSACTION_IN_SESSION, RDB_E_NO_TRANSACTION_IN_SESSION },
43 { OHOS::NativeRdb::E_MORE_STEP_QUERY_IN_ONE_SESSION, RDB_E_MORE_STEP_QUERY_IN_ONE_SESSION },
44 { OHOS::NativeRdb::E_NO_ROW_IN_QUERY, RDB_E_NO_ROW_IN_QUERY },
45 { OHOS::NativeRdb::E_INVALID_BIND_ARGS_COUNT, RDB_E_INVALID_BIND_ARGS_COUNT },
46 { OHOS::NativeRdb::E_INVALID_OBJECT_TYPE, RDB_E_INVALID_OBJECT_TYPE },
47 { OHOS::NativeRdb::E_INVALID_CONFLICT_FLAG, RDB_E_INVALID_CONFLICT_FLAG },
48 { OHOS::NativeRdb::E_HAVING_CLAUSE_NOT_IN_GROUP_BY, RDB_E_HAVING_CLAUSE_NOT_IN_GROUP_BY },
49 { OHOS::NativeRdb::E_NOT_SUPPORTED_BY_STEP_RESULT_SET, RDB_E_NOT_SUPPORTED },
50 { OHOS::NativeRdb::E_STEP_RESULT_SET_CROSS_THREADS, RDB_E_STEP_RESULT_SET_CROSS_THREADS },
51 { OHOS::NativeRdb::E_NO_MORE_ROWS, RDB_E_STEP_RESULT_IS_AFTER_LAST },
52 { OHOS::NativeRdb::E_STEP_RESULT_QUERY_EXCEEDED, RDB_E_STEP_RESULT_QUERY_EXCEEDED },
53 { OHOS::NativeRdb::E_STATEMENT_NOT_PREPARED, RDB_E_STATEMENT_NOT_PREPARED },
54 { OHOS::NativeRdb::E_EXECUTE_RESULT_INCORRECT, RDB_E_EXECUTE_RESULT_INCORRECT },
55 { OHOS::NativeRdb::E_ALREADY_CLOSED, RDB_E_STEP_RESULT_CLOSED },
56 { OHOS::NativeRdb::E_RELATIVE_PATH, RDB_E_RELATIVE_PATH },
57 { OHOS::NativeRdb::E_EMPTY_NEW_ENCRYPT_KEY, RDB_E_EMPTY_NEW_ENCRYPT_KEY },
58 { OHOS::NativeRdb::E_CHANGE_UNENCRYPTED_TO_ENCRYPTED, RDB_E_CHANGE_UNENCRYPTED_TO_ENCRYPTED },
59 { OHOS::NativeRdb::E_DATABASE_BUSY, RDB_E_CON_OVER_LIMIT },
60 { OHOS::NativeRdb::E_STORE_CLOSED, RDB_E_STEP_RESULT_CLOSED },
61 { OHOS::NativeRdb::E_NOT_SUPPORTED_ATTACH_IN_WAL_MODE, RDB_E_NOT_SUPPORTED_ATTACH_IN_WAL_MODE },
62 { OHOS::NativeRdb::E_CREATE_FOLDER_FAIL, RDB_E_CREATE_FOLDER_FAIL },
63 { OHOS::NativeRdb::E_SQLITE_SQL_BUILDER_NORMALIZE_FAIL, RDB_E_SQLITE_SQL_BUILDER_NORMALIZE_FAIL },
64 { OHOS::NativeRdb::E_STORE_SESSION_NOT_GIVE_CONNECTION_TEMPORARILY,
65 RDB_E_STORE_SESSION_NOT_GIVE_CONNECTION_TEMPORARILY },
66 { OHOS::NativeRdb::E_STORE_SESSION_NO_CURRENT_TRANSACTION, RDB_E_STORE_SESSION_NO_CURRENT_TRANSACTION },
67 { OHOS::NativeRdb::E_INVALID_PARCEL, RDB_E_INVALID_PARCEL },
68 { OHOS::NativeRdb::E_QUERY_IN_EXECUTE, RDB_E_QUERY_IN_EXECUTE },
69 { OHOS::NativeRdb::E_SET_PERSIST_WAL, RDB_E_SET_PERSIST_WAL },
70 { OHOS::NativeRdb::E_DB_NOT_EXIST, RDB_E_DB_NOT_EXIST },
71 { OHOS::NativeRdb::E_ARGS_READ_CON_OVERLOAD, RDB_E_ARGS_READ_CON_OVERLOAD },
72 { OHOS::NativeRdb::E_WAL_SIZE_OVER_LIMIT, RDB_E_WAL_SIZE_OVER_LIMIT },
73 { OHOS::NativeRdb::E_CON_OVER_LIMIT, RDB_E_CON_OVER_LIMIT },
74 { OHOS::NativeRdb::E_INVALID_SECRET_KEY, RDB_E_INVALID_SECRET_KEY },
75 { OHOS::NativeRdb::E_NOT_SUPPORT, RDB_E_NOT_SUPPORTED },
76 };
77
78 static constexpr NdkErrorCode INTERFACE_CODE_MAP[] = {
79 { OHOS::NativeRdb::E_OK, RDB_OK },
80 { OHOS::NativeRdb::E_ERROR, RDB_E_ERROR },
81 { OHOS::NativeRdb::E_INVALID_ARGS, RDB_E_INVALID_ARGS },
82 { OHOS::NativeRdb::E_INVALID_OBJECT_TYPE, RDB_E_INVALID_ARGS },
83 { OHOS::NativeRdb::E_ALREADY_CLOSED, RDB_E_ALREADY_CLOSED},
84 { OHOS::NativeRdb::E_DATABASE_BUSY, RDB_E_DATABASE_BUSY },
85 { OHOS::NativeRdb::E_WAL_SIZE_OVER_LIMIT, RDB_E_WAL_SIZE_OVER_LIMIT },
86 { OHOS::NativeRdb::E_SQLITE_FULL, RDB_E_SQLITE_FULL },
87 { OHOS::NativeRdb::E_SQLITE_CORRUPT, RDB_E_SQLITE_CORRUPT },
88 { OHOS::NativeRdb::E_SQLITE_PERM, RDB_E_SQLITE_PERM },
89 { OHOS::NativeRdb::E_SQLITE_BUSY, RDB_E_SQLITE_BUSY },
90 { OHOS::NativeRdb::E_SQLITE_LOCKED, RDB_E_SQLITE_LOCKED },
91 { OHOS::NativeRdb::E_SQLITE_NOMEM, RDB_E_SQLITE_NOMEM },
92 { OHOS::NativeRdb::E_SQLITE_READONLY, RDB_E_SQLITE_READONLY },
93 { OHOS::NativeRdb::E_SQLITE_IOERR, RDB_E_SQLITE_IOERR },
94 { OHOS::NativeRdb::E_SQLITE_CANTOPEN, RDB_E_SQLITE_CANT_OPEN },
95 { OHOS::NativeRdb::E_SQLITE_TOOBIG, RDB_E_SQLITE_TOO_BIG },
96 { OHOS::NativeRdb::E_SQLITE_CONSTRAINT, RDB_E_SQLITE_CONSTRAINT },
97 { OHOS::NativeRdb::E_SQLITE_MISMATCH, RDB_E_SQLITE_MISMATCH },
98 };
99
ConvertCode(const NdkErrorCode * codeMap,int count,int innerCode)100 int ConvertorErrorCode::ConvertCode(const NdkErrorCode *codeMap, int count, int innerCode)
101 {
102 auto errorCode = NdkErrorCode{ innerCode, -1 };
103 auto iter = std::lower_bound(codeMap, codeMap + count, errorCode,
104 [](const NdkErrorCode &errorCode1, const NdkErrorCode &errorCode2) {
105 return errorCode1.nativeCode < errorCode2.nativeCode;
106 });
107 if (iter < codeMap + count && iter->nativeCode == innerCode) {
108 return iter->ndkCode;
109 }
110 return RDB_E_ERROR;
111 }
NativeToNdk(int nativeErrCode)112 int ConvertorErrorCode::NativeToNdk(int nativeErrCode)
113 {
114 int count = static_cast<int>(sizeof(ERROR_CODE_MAP) / sizeof(ERROR_CODE_MAP[0]));
115 return ConvertCode(ERROR_CODE_MAP, count, nativeErrCode);
116 }
117
GetInterfaceCode(int nativeErrCode)118 int ConvertorErrorCode::GetInterfaceCode(int nativeErrCode)
119 {
120 int count = static_cast<int>(sizeof(INTERFACE_CODE_MAP) / sizeof(INTERFACE_CODE_MAP[0]));
121 return ConvertCode(INTERFACE_CODE_MAP, count, nativeErrCode);
122 }
123 }