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