/*
 * Copyright (c) 2021 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef NATIVE_RDB_SQLITE_ERRNO_H
#define NATIVE_RDB_SQLITE_ERRNO_H

#include <sqlite3sym.h>

#include <map>

#include "rdb_errno.h"

namespace OHOS {
namespace NativeRdb {
const static std::map<int, int> ERROR_CODE_MAPPINT_TABLE = {
    { SQLITE_ERROR, E_SQLITE_ERROR },
    { SQLITE_ABORT, E_SQLITE_ABORT },
    { SQLITE_PERM, E_SQLITE_PERM },
    { SQLITE_BUSY, E_SQLITE_BUSY },
    { SQLITE_LOCKED, E_SQLITE_LOCKED },
    { SQLITE_NOMEM, E_SQLITE_NOMEM },
    { SQLITE_READONLY, E_SQLITE_READONLY },
    { SQLITE_IOERR, E_SQLITE_IOERR },
    { SQLITE_CORRUPT, E_SQLITE_CORRUPT },
    { SQLITE_FULL, E_SQLITE_FULL },
    { SQLITE_SCHEMA, E_SQLITE_SCHEMA },
    { SQLITE_CANTOPEN, E_SQLITE_CANTOPEN },
    { SQLITE_TOOBIG, E_SQLITE_TOOBIG },
    { SQLITE_CONSTRAINT, E_SQLITE_CONSTRAINT },
    { SQLITE_MISMATCH, E_SQLITE_MISMATCH },
    { SQLITE_MISUSE, E_SQLITE_MISUSE },
    { SQLITE_NOTADB, E_SQLITE_CORRUPT },
    { SQLITE_DONE, E_NO_MORE_ROWS },
    { SQLITE_ROW, E_OK },
};
class SQLiteError {
public:
    static int ErrNo(int sqliteErr)
    {
        auto iter = ERROR_CODE_MAPPINT_TABLE.find(sqliteErr);
        if (iter != ERROR_CODE_MAPPINT_TABLE.end()) {
            return iter->second;
        }
        return -sqliteErr;
    }
};
} // namespace NativeRdb
} // namespace OHOS

#endif