125c1cde8Sopenharmony_ci/*
225c1cde8Sopenharmony_ci * Copyright (C) 2021 Huawei Device Co., Ltd.
325c1cde8Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
425c1cde8Sopenharmony_ci * you may not use this file except in compliance with the License.
525c1cde8Sopenharmony_ci * You may obtain a copy of the License at
625c1cde8Sopenharmony_ci *
725c1cde8Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
825c1cde8Sopenharmony_ci *
925c1cde8Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
1025c1cde8Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
1125c1cde8Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1225c1cde8Sopenharmony_ci * See the License for the specific language governing permissions and
1325c1cde8Sopenharmony_ci * limitations under the License.
1425c1cde8Sopenharmony_ci */
1525c1cde8Sopenharmony_ci
1625c1cde8Sopenharmony_ci#include "rdb_base_helper.h"
1725c1cde8Sopenharmony_ci
1825c1cde8Sopenharmony_ci#include <regex>
1925c1cde8Sopenharmony_ci
2025c1cde8Sopenharmony_ci#include "abs_shared_result_set.h"
2125c1cde8Sopenharmony_ci#include "data_storage_log_wrapper.h"
2225c1cde8Sopenharmony_ci#include "new"
2325c1cde8Sopenharmony_ci#include "rdb_errno.h"
2425c1cde8Sopenharmony_ci#include "rdb_helper.h"
2525c1cde8Sopenharmony_ci#include "rdb_store.h"
2625c1cde8Sopenharmony_ci#include "type_traits"
2725c1cde8Sopenharmony_ci
2825c1cde8Sopenharmony_cinamespace OHOS {
2925c1cde8Sopenharmony_cinamespace NativeRdb {
3025c1cde8Sopenharmony_ciclass AbsRdbPredicates;
3125c1cde8Sopenharmony_ciclass RdbOpenCallback;
3225c1cde8Sopenharmony_ciclass RdbStoreConfig;
3325c1cde8Sopenharmony_ciclass ValueObject;
3425c1cde8Sopenharmony_ciclass ValuesBucket;
3525c1cde8Sopenharmony_ci} // namespace NativeRdb
3625c1cde8Sopenharmony_cinamespace Telephony {
3725c1cde8Sopenharmony_ciint RdbBaseHelper::Insert(int64_t &id, const NativeRdb::ValuesBucket &initialValues, const std::string &table)
3825c1cde8Sopenharmony_ci{
3925c1cde8Sopenharmony_ci    int ret = IsExistStore();
4025c1cde8Sopenharmony_ci    if (ret == NativeRdb::E_OK) {
4125c1cde8Sopenharmony_ci        ret = store_->Insert(id, table, initialValues);
4225c1cde8Sopenharmony_ci    }
4325c1cde8Sopenharmony_ci    return ret;
4425c1cde8Sopenharmony_ci}
4525c1cde8Sopenharmony_ci
4625c1cde8Sopenharmony_ciint RdbBaseHelper::Update(int &changedRows, const std::string &table, const NativeRdb::ValuesBucket &values,
4725c1cde8Sopenharmony_ci    const std::string &whereClause, const std::vector<std::string> &whereArgs)
4825c1cde8Sopenharmony_ci{
4925c1cde8Sopenharmony_ci    int ret = IsExistStore();
5025c1cde8Sopenharmony_ci    if (ret == NativeRdb::E_OK) {
5125c1cde8Sopenharmony_ci        ret = store_->Update(changedRows, table, values, whereClause, whereArgs);
5225c1cde8Sopenharmony_ci    }
5325c1cde8Sopenharmony_ci    return ret;
5425c1cde8Sopenharmony_ci}
5525c1cde8Sopenharmony_ci
5625c1cde8Sopenharmony_ciint RdbBaseHelper::Update(int &changedRows, const NativeRdb::ValuesBucket &values,
5725c1cde8Sopenharmony_ci    const NativeRdb::AbsRdbPredicates &predicate)
5825c1cde8Sopenharmony_ci{
5925c1cde8Sopenharmony_ci    int ret = IsExistStore();
6025c1cde8Sopenharmony_ci    if (ret == NativeRdb::E_OK) {
6125c1cde8Sopenharmony_ci        ret = store_->Update(changedRows, values, predicate);
6225c1cde8Sopenharmony_ci    }
6325c1cde8Sopenharmony_ci    return ret;
6425c1cde8Sopenharmony_ci}
6525c1cde8Sopenharmony_ci
6625c1cde8Sopenharmony_ciint RdbBaseHelper::Delete(int &changedRows, const std::string &table, const std::string &whereClause,
6725c1cde8Sopenharmony_ci    const std::vector<std::string> &whereArgs)
6825c1cde8Sopenharmony_ci{
6925c1cde8Sopenharmony_ci    int ret = IsExistStore();
7025c1cde8Sopenharmony_ci    if (ret == NativeRdb::E_OK) {
7125c1cde8Sopenharmony_ci        ret = store_->Delete(changedRows, table, whereClause, whereArgs);
7225c1cde8Sopenharmony_ci    }
7325c1cde8Sopenharmony_ci    return ret;
7425c1cde8Sopenharmony_ci}
7525c1cde8Sopenharmony_ci
7625c1cde8Sopenharmony_ciint RdbBaseHelper::Delete(int &deletedRows, const NativeRdb::AbsRdbPredicates &predicates)
7725c1cde8Sopenharmony_ci{
7825c1cde8Sopenharmony_ci    int ret = IsExistStore();
7925c1cde8Sopenharmony_ci    if (ret == NativeRdb::E_OK) {
8025c1cde8Sopenharmony_ci        ret = store_->Delete(deletedRows, predicates);
8125c1cde8Sopenharmony_ci    }
8225c1cde8Sopenharmony_ci    return ret;
8325c1cde8Sopenharmony_ci}
8425c1cde8Sopenharmony_ci
8525c1cde8Sopenharmony_ciint RdbBaseHelper::ExecuteSql(const std::string &sql)
8625c1cde8Sopenharmony_ci{
8725c1cde8Sopenharmony_ci    int ret = IsExistStore();
8825c1cde8Sopenharmony_ci    if (ret == NativeRdb::E_OK) {
8925c1cde8Sopenharmony_ci        ret = store_->ExecuteSql(sql);
9025c1cde8Sopenharmony_ci    }
9125c1cde8Sopenharmony_ci    return ret;
9225c1cde8Sopenharmony_ci}
9325c1cde8Sopenharmony_ci
9425c1cde8Sopenharmony_ciint RdbBaseHelper::ExecuteSql(const std::string &sql, const std::vector<NativeRdb::ValueObject> &bindArgs)
9525c1cde8Sopenharmony_ci{
9625c1cde8Sopenharmony_ci    int ret = IsExistStore();
9725c1cde8Sopenharmony_ci    if (ret == NativeRdb::E_OK) {
9825c1cde8Sopenharmony_ci        ret = store_->ExecuteSql(sql, bindArgs);
9925c1cde8Sopenharmony_ci    }
10025c1cde8Sopenharmony_ci    return ret;
10125c1cde8Sopenharmony_ci}
10225c1cde8Sopenharmony_ci
10325c1cde8Sopenharmony_cistd::shared_ptr<NativeRdb::ResultSet> RdbBaseHelper::QuerySql(
10425c1cde8Sopenharmony_ci    const std::string &sql, const std::vector<std::string> &selectionArgs)
10525c1cde8Sopenharmony_ci{
10625c1cde8Sopenharmony_ci    int ret = IsExistStore();
10725c1cde8Sopenharmony_ci    if (ret == NativeRdb::E_OK) {
10825c1cde8Sopenharmony_ci        return store_->QuerySql(sql);
10925c1cde8Sopenharmony_ci    }
11025c1cde8Sopenharmony_ci    return nullptr;
11125c1cde8Sopenharmony_ci}
11225c1cde8Sopenharmony_ci
11325c1cde8Sopenharmony_cistd::shared_ptr<NativeRdb::ResultSet> RdbBaseHelper::Query(
11425c1cde8Sopenharmony_ci    const NativeRdb::AbsRdbPredicates &predicates, const std::vector<std::string> columns)
11525c1cde8Sopenharmony_ci{
11625c1cde8Sopenharmony_ci    int ret = IsExistStore();
11725c1cde8Sopenharmony_ci    if (ret == NativeRdb::E_OK) {
11825c1cde8Sopenharmony_ci        return store_->Query(predicates, columns);
11925c1cde8Sopenharmony_ci    }
12025c1cde8Sopenharmony_ci    return nullptr;
12125c1cde8Sopenharmony_ci}
12225c1cde8Sopenharmony_ci
12325c1cde8Sopenharmony_ciint RdbBaseHelper::IsExistStore()
12425c1cde8Sopenharmony_ci{
12525c1cde8Sopenharmony_ci    if (store_ == nullptr) {
12625c1cde8Sopenharmony_ci        DATA_STORAGE_LOGE("RdbBaseHelper::IsExistStore NativeRdb::RdbStore is null!");
12725c1cde8Sopenharmony_ci        return NativeRdb::E_ERROR;
12825c1cde8Sopenharmony_ci    }
12925c1cde8Sopenharmony_ci    return NativeRdb::E_OK;
13025c1cde8Sopenharmony_ci}
13125c1cde8Sopenharmony_ci
13225c1cde8Sopenharmony_civoid RdbBaseHelper::CreateRdbStore(
13325c1cde8Sopenharmony_ci    const NativeRdb::RdbStoreConfig &config, int version, NativeRdb::RdbOpenCallback &openCallback, int &errCode)
13425c1cde8Sopenharmony_ci{
13525c1cde8Sopenharmony_ci    DATA_STORAGE_LOGD("RdbBaseHelper::CreateRdbStore");
13625c1cde8Sopenharmony_ci    store_ = NativeRdb::RdbHelper::GetRdbStore(config, version, openCallback, errCode);
13725c1cde8Sopenharmony_ci}
13825c1cde8Sopenharmony_ci
13925c1cde8Sopenharmony_ciint RdbBaseHelper::BeginTransaction()
14025c1cde8Sopenharmony_ci{
14125c1cde8Sopenharmony_ci    int ret = IsExistStore();
14225c1cde8Sopenharmony_ci    if (ret == NativeRdb::E_OK) {
14325c1cde8Sopenharmony_ci        ret = store_->BeginTransaction();
14425c1cde8Sopenharmony_ci    }
14525c1cde8Sopenharmony_ci    return ret;
14625c1cde8Sopenharmony_ci}
14725c1cde8Sopenharmony_ci
14825c1cde8Sopenharmony_ciint RdbBaseHelper::RollBack()
14925c1cde8Sopenharmony_ci{
15025c1cde8Sopenharmony_ci    int ret = IsExistStore();
15125c1cde8Sopenharmony_ci    if (ret == NativeRdb::E_OK) {
15225c1cde8Sopenharmony_ci        ret = store_->RollBack();
15325c1cde8Sopenharmony_ci    }
15425c1cde8Sopenharmony_ci    return ret;
15525c1cde8Sopenharmony_ci}
15625c1cde8Sopenharmony_ci
15725c1cde8Sopenharmony_ciint RdbBaseHelper::Commit()
15825c1cde8Sopenharmony_ci{
15925c1cde8Sopenharmony_ci    int ret = IsExistStore();
16025c1cde8Sopenharmony_ci    if (ret == NativeRdb::E_OK) {
16125c1cde8Sopenharmony_ci        ret = store_->Commit();
16225c1cde8Sopenharmony_ci    }
16325c1cde8Sopenharmony_ci    return ret;
16425c1cde8Sopenharmony_ci}
16525c1cde8Sopenharmony_ci
16625c1cde8Sopenharmony_ciint RdbBaseHelper::BatchInsert(int64_t &id, const NativeRdb::ValuesBucket &initialValues, const std::string &table)
16725c1cde8Sopenharmony_ci{
16825c1cde8Sopenharmony_ci    return NativeRdb::E_OK;
16925c1cde8Sopenharmony_ci}
17025c1cde8Sopenharmony_ci
17125c1cde8Sopenharmony_civoid RdbBaseHelper::ReplaceAllStr(std::string &path, const std::string &oldStr, const std::string &newStr)
17225c1cde8Sopenharmony_ci{
17325c1cde8Sopenharmony_ci    path = std::regex_replace(path, std::regex(oldStr), newStr);
17425c1cde8Sopenharmony_ci}
17525c1cde8Sopenharmony_ci} // namespace Telephony
17625c1cde8Sopenharmony_ci} // namespace OHOS
177