106694b06Sopenharmony_ci/*
206694b06Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
306694b06Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
406694b06Sopenharmony_ci * you may not use this file except in compliance with the License.
506694b06Sopenharmony_ci * You may obtain a copy of the License at
606694b06Sopenharmony_ci *
706694b06Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
806694b06Sopenharmony_ci *
906694b06Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
1006694b06Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
1106694b06Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1206694b06Sopenharmony_ci * See the License for the specific language governing permissions and
1306694b06Sopenharmony_ci * limitations under the License.
1406694b06Sopenharmony_ci */
1506694b06Sopenharmony_ci#define LOG_TAG "RelationalAsset"
1606694b06Sopenharmony_ci#include "relational_asset.h"
1706694b06Sopenharmony_ci
1806694b06Sopenharmony_ci#include "logger.h"
1906694b06Sopenharmony_ci#include "relational_store_error_code.h"
2006694b06Sopenharmony_ci#include "securec.h"
2106694b06Sopenharmony_ci#include <cstdlib>
2206694b06Sopenharmony_ci
2306694b06Sopenharmony_ciusing namespace OHOS::RdbNdk;
2406694b06Sopenharmony_ciconstexpr int ASSET_TRANSFORM_BASE = 10;
2506694b06Sopenharmony_ciint OH_Data_Asset_SetName(Data_Asset *asset, const char *name)
2606694b06Sopenharmony_ci{
2706694b06Sopenharmony_ci    if (asset == nullptr || name == nullptr) {
2806694b06Sopenharmony_ci        return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
2906694b06Sopenharmony_ci    }
3006694b06Sopenharmony_ci    asset->asset_.name = name;
3106694b06Sopenharmony_ci    return OH_Rdb_ErrCode::RDB_OK;
3206694b06Sopenharmony_ci}
3306694b06Sopenharmony_ci
3406694b06Sopenharmony_ciint OH_Data_Asset_SetUri(Data_Asset *asset, const char *uri)
3506694b06Sopenharmony_ci{
3606694b06Sopenharmony_ci    if (asset == nullptr || uri == nullptr) {
3706694b06Sopenharmony_ci        return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
3806694b06Sopenharmony_ci    }
3906694b06Sopenharmony_ci
4006694b06Sopenharmony_ci    asset->asset_.uri = uri;
4106694b06Sopenharmony_ci    return OH_Rdb_ErrCode::RDB_OK;
4206694b06Sopenharmony_ci}
4306694b06Sopenharmony_ci
4406694b06Sopenharmony_ciint OH_Data_Asset_SetPath(Data_Asset *asset, const char *path)
4506694b06Sopenharmony_ci{
4606694b06Sopenharmony_ci    if (asset == nullptr || path == nullptr) {
4706694b06Sopenharmony_ci        return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
4806694b06Sopenharmony_ci    }
4906694b06Sopenharmony_ci
5006694b06Sopenharmony_ci    asset->asset_.path = path;
5106694b06Sopenharmony_ci    return OH_Rdb_ErrCode::RDB_OK;
5206694b06Sopenharmony_ci}
5306694b06Sopenharmony_ci
5406694b06Sopenharmony_ciint OH_Data_Asset_SetCreateTime(Data_Asset *asset, int64_t createTime)
5506694b06Sopenharmony_ci{
5606694b06Sopenharmony_ci    if (asset == nullptr) {
5706694b06Sopenharmony_ci        return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
5806694b06Sopenharmony_ci    }
5906694b06Sopenharmony_ci
6006694b06Sopenharmony_ci    asset->asset_.createTime = std::to_string(createTime);
6106694b06Sopenharmony_ci    return OH_Rdb_ErrCode::RDB_OK;
6206694b06Sopenharmony_ci}
6306694b06Sopenharmony_ci
6406694b06Sopenharmony_ciint OH_Data_Asset_SetModifyTime(Data_Asset *asset, int64_t modifyTime)
6506694b06Sopenharmony_ci{
6606694b06Sopenharmony_ci    if (asset == nullptr) {
6706694b06Sopenharmony_ci        return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
6806694b06Sopenharmony_ci    }
6906694b06Sopenharmony_ci
7006694b06Sopenharmony_ci    asset->asset_.modifyTime = std::to_string(modifyTime);
7106694b06Sopenharmony_ci    return OH_Rdb_ErrCode::RDB_OK;
7206694b06Sopenharmony_ci}
7306694b06Sopenharmony_ci
7406694b06Sopenharmony_ciint OH_Data_Asset_SetSize(Data_Asset *asset, size_t size)
7506694b06Sopenharmony_ci{
7606694b06Sopenharmony_ci    if (asset == nullptr) {
7706694b06Sopenharmony_ci        return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
7806694b06Sopenharmony_ci    }
7906694b06Sopenharmony_ci
8006694b06Sopenharmony_ci    asset->asset_.size = std::to_string(size);
8106694b06Sopenharmony_ci    return OH_Rdb_ErrCode::RDB_OK;
8206694b06Sopenharmony_ci}
8306694b06Sopenharmony_ci
8406694b06Sopenharmony_ciint OH_Data_Asset_SetStatus(Data_Asset *asset, Data_AssetStatus status)
8506694b06Sopenharmony_ci{
8606694b06Sopenharmony_ci    if (asset == nullptr) {
8706694b06Sopenharmony_ci        return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
8806694b06Sopenharmony_ci    }
8906694b06Sopenharmony_ci
9006694b06Sopenharmony_ci    asset->asset_.status = status;
9106694b06Sopenharmony_ci    return OH_Rdb_ErrCode::RDB_OK;
9206694b06Sopenharmony_ci}
9306694b06Sopenharmony_ci
9406694b06Sopenharmony_ciint OH_Data_Asset_GetName(Data_Asset *asset, char *name, size_t *length)
9506694b06Sopenharmony_ci{
9606694b06Sopenharmony_ci    if (asset == nullptr) {
9706694b06Sopenharmony_ci        LOG_ERROR("Asset get name error: asset is NULL ? %{public}d.", (asset == nullptr));
9806694b06Sopenharmony_ci        return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
9906694b06Sopenharmony_ci    }
10006694b06Sopenharmony_ci    size_t nameLength = asset->asset_.name.size();
10106694b06Sopenharmony_ci    if (nameLength >= *length) {
10206694b06Sopenharmony_ci        LOG_ERROR("Asset get name error: length is too small ? %{public}d.", (nameLength >= *length));
10306694b06Sopenharmony_ci        return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
10406694b06Sopenharmony_ci    }
10506694b06Sopenharmony_ci    errno_t result = strcpy_s(name, *length, asset->asset_.name.c_str());
10606694b06Sopenharmony_ci    if (result != EOK) {
10706694b06Sopenharmony_ci        LOG_ERROR("strcpy_s failed, result is %{public}d", result);
10806694b06Sopenharmony_ci        return OH_Rdb_ErrCode::RDB_ERR;
10906694b06Sopenharmony_ci    }
11006694b06Sopenharmony_ci    *length = nameLength;
11106694b06Sopenharmony_ci    return OH_Rdb_ErrCode::RDB_OK;
11206694b06Sopenharmony_ci}
11306694b06Sopenharmony_ci
11406694b06Sopenharmony_ciint OH_Data_Asset_GetUri(Data_Asset *asset, char *uri, size_t *length)
11506694b06Sopenharmony_ci{
11606694b06Sopenharmony_ci    if (asset == nullptr) {
11706694b06Sopenharmony_ci        LOG_ERROR("Asset get uri error: asset is NULL ? %{public}d.", (asset == nullptr));
11806694b06Sopenharmony_ci        return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
11906694b06Sopenharmony_ci    }
12006694b06Sopenharmony_ci    size_t uriLength = asset->asset_.uri.size();
12106694b06Sopenharmony_ci    if (uriLength >= *length) {
12206694b06Sopenharmony_ci        LOG_ERROR("Asset get uri error: length is too small ? %{public}d.", (uriLength >= *length));
12306694b06Sopenharmony_ci        return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
12406694b06Sopenharmony_ci    }
12506694b06Sopenharmony_ci
12606694b06Sopenharmony_ci    errno_t result = strcpy_s(uri, *length, asset->asset_.uri.c_str());
12706694b06Sopenharmony_ci    if (result != EOK) {
12806694b06Sopenharmony_ci        LOG_ERROR("strcpy_s failed, result is %{public}d", result);
12906694b06Sopenharmony_ci        return OH_Rdb_ErrCode::RDB_ERR;
13006694b06Sopenharmony_ci    }
13106694b06Sopenharmony_ci    *length = uriLength;
13206694b06Sopenharmony_ci    return OH_Rdb_ErrCode::RDB_OK;
13306694b06Sopenharmony_ci}
13406694b06Sopenharmony_ci
13506694b06Sopenharmony_ciint OH_Data_Asset_GetPath(Data_Asset *asset, char *path, size_t *length)
13606694b06Sopenharmony_ci{
13706694b06Sopenharmony_ci    if (asset == nullptr) {
13806694b06Sopenharmony_ci        LOG_ERROR("Asset get path error: asset is NULL ? %{public}d.", (asset == nullptr));
13906694b06Sopenharmony_ci        return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
14006694b06Sopenharmony_ci    }
14106694b06Sopenharmony_ci    size_t pathLength = asset->asset_.path.size();
14206694b06Sopenharmony_ci    if (pathLength >= *length) {
14306694b06Sopenharmony_ci        LOG_ERROR("Asset get path error: length is too small ? %{public}d.", (pathLength >= *length));
14406694b06Sopenharmony_ci        return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
14506694b06Sopenharmony_ci    }
14606694b06Sopenharmony_ci    errno_t result = strcpy_s(path, *length, asset->asset_.path.c_str());
14706694b06Sopenharmony_ci    if (result != EOK) {
14806694b06Sopenharmony_ci        LOG_ERROR("strcpy_s failed, result is %{public}d", result);
14906694b06Sopenharmony_ci        return OH_Rdb_ErrCode::RDB_ERR;
15006694b06Sopenharmony_ci    }
15106694b06Sopenharmony_ci    *length = pathLength;
15206694b06Sopenharmony_ci    return OH_Rdb_ErrCode::RDB_OK;
15306694b06Sopenharmony_ci}
15406694b06Sopenharmony_ci
15506694b06Sopenharmony_ciint OH_Data_Asset_GetCreateTime(Data_Asset *asset, int64_t *createTime)
15606694b06Sopenharmony_ci{
15706694b06Sopenharmony_ci    if (asset == nullptr) {
15806694b06Sopenharmony_ci        return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
15906694b06Sopenharmony_ci    }
16006694b06Sopenharmony_ci    char *endPtr;
16106694b06Sopenharmony_ci    *createTime = strtol(asset->asset_.createTime.c_str(), &endPtr, ASSET_TRANSFORM_BASE);
16206694b06Sopenharmony_ci    if (*endPtr != '\0') {
16306694b06Sopenharmony_ci        LOG_ERROR("GetCreateTime failed.");
16406694b06Sopenharmony_ci        return OH_Rdb_ErrCode::RDB_ERR;
16506694b06Sopenharmony_ci    }
16606694b06Sopenharmony_ci    return OH_Rdb_ErrCode::RDB_OK;
16706694b06Sopenharmony_ci}
16806694b06Sopenharmony_ci
16906694b06Sopenharmony_ciint OH_Data_Asset_GetModifyTime(Data_Asset *asset, int64_t *modifyTime)
17006694b06Sopenharmony_ci{
17106694b06Sopenharmony_ci    if (asset == nullptr) {
17206694b06Sopenharmony_ci        return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
17306694b06Sopenharmony_ci    }
17406694b06Sopenharmony_ci    char *endPtr;
17506694b06Sopenharmony_ci    *modifyTime = strtol(asset->asset_.modifyTime.c_str(), &endPtr, ASSET_TRANSFORM_BASE);
17606694b06Sopenharmony_ci    if (*endPtr != '\0') {
17706694b06Sopenharmony_ci        LOG_ERROR("GetModifyTime failed.");
17806694b06Sopenharmony_ci        return OH_Rdb_ErrCode::RDB_ERR;
17906694b06Sopenharmony_ci    }
18006694b06Sopenharmony_ci    return OH_Rdb_ErrCode::RDB_OK;
18106694b06Sopenharmony_ci}
18206694b06Sopenharmony_ci
18306694b06Sopenharmony_ciint OH_Data_Asset_GetSize(Data_Asset *asset, size_t *size)
18406694b06Sopenharmony_ci{
18506694b06Sopenharmony_ci    if (asset == nullptr) {
18606694b06Sopenharmony_ci        return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
18706694b06Sopenharmony_ci    }
18806694b06Sopenharmony_ci    char *endPtr;
18906694b06Sopenharmony_ci    *size = strtol(asset->asset_.size.c_str(), &endPtr, ASSET_TRANSFORM_BASE);
19006694b06Sopenharmony_ci    if (*endPtr != '\0') {
19106694b06Sopenharmony_ci        LOG_ERROR("GetModifyTime failed.");
19206694b06Sopenharmony_ci        return OH_Rdb_ErrCode::RDB_ERR;
19306694b06Sopenharmony_ci    }
19406694b06Sopenharmony_ci    return OH_Rdb_ErrCode::RDB_OK;
19506694b06Sopenharmony_ci}
19606694b06Sopenharmony_ci
19706694b06Sopenharmony_ciint OH_Data_Asset_GetStatus(Data_Asset *asset, Data_AssetStatus *status)
19806694b06Sopenharmony_ci{
19906694b06Sopenharmony_ci    if (asset == nullptr) {
20006694b06Sopenharmony_ci        return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
20106694b06Sopenharmony_ci    }
20206694b06Sopenharmony_ci    *status = static_cast<Data_AssetStatus>(asset->asset_.status);
20306694b06Sopenharmony_ci    return OH_Rdb_ErrCode::RDB_OK;
20406694b06Sopenharmony_ci}
20506694b06Sopenharmony_ci
20606694b06Sopenharmony_ciData_Asset *OH_Data_Asset_CreateOne()
20706694b06Sopenharmony_ci{
20806694b06Sopenharmony_ci    return new (std::nothrow) Data_Asset();
20906694b06Sopenharmony_ci}
21006694b06Sopenharmony_ci
21106694b06Sopenharmony_ciint OH_Data_Asset_DestroyOne(Data_Asset *asset)
21206694b06Sopenharmony_ci{
21306694b06Sopenharmony_ci    delete asset;
21406694b06Sopenharmony_ci    asset = nullptr;
21506694b06Sopenharmony_ci    return OH_Rdb_ErrCode::RDB_OK;
21606694b06Sopenharmony_ci}
21706694b06Sopenharmony_ci
21806694b06Sopenharmony_ciData_Asset **OH_Data_Asset_CreateMultiple(uint32_t count)
21906694b06Sopenharmony_ci{
22006694b06Sopenharmony_ci    auto assets = new Data_Asset *[count];
22106694b06Sopenharmony_ci    for (uint32_t i = 0; i < count; ++i) {
22206694b06Sopenharmony_ci        assets[i] = new Data_Asset();
22306694b06Sopenharmony_ci    }
22406694b06Sopenharmony_ci    return assets;
22506694b06Sopenharmony_ci}
22606694b06Sopenharmony_ci
22706694b06Sopenharmony_ciint OH_Data_Asset_DestroyMultiple(Data_Asset **assets, uint32_t count)
22806694b06Sopenharmony_ci{
22906694b06Sopenharmony_ci    for (uint32_t i = 0; i < count; ++i) {
23006694b06Sopenharmony_ci        delete assets[i];
23106694b06Sopenharmony_ci    }
23206694b06Sopenharmony_ci    delete[] assets;
23306694b06Sopenharmony_ci    assets = nullptr;
23406694b06Sopenharmony_ci    return OH_Rdb_ErrCode::RDB_OK;
23506694b06Sopenharmony_ci}
236