diff --git a/services/distributeddataservice/service/kvdb/kvdb_service_impl.cpp b/services/distributeddataservice/service/kvdb/kvdb_service_impl.cpp index 7c628c8d4f6f6d3363074ee4b8c47570bf3ef183..6c2a9b7ab97210048ca585f1334fe83b7608788c 100644 --- a/services/distributeddataservice/service/kvdb/kvdb_service_impl.cpp +++ b/services/distributeddataservice/service/kvdb/kvdb_service_impl.cpp @@ -788,7 +788,7 @@ Status KVDBServiceImpl::AfterCreate( StoreMetaMapping oldMeta(metaData); auto isCreated = MetaDataManager::GetInstance().LoadMeta(oldMeta.GetKey(), oldMeta, true); Status status = SUCCESS; - if (isCreated && oldMeta != metaData) { + if (isCreated && (oldMeta != metaData || oldMeta.schema != metaData.schema)) { auto dbStatus = Upgrade::GetInstance().UpdateStore(oldMeta, metaData, password); ZLOGI("update status:%{public}d appId:%{public}s storeId:%{public}s inst:%{public}d " "type:%{public}d->%{public}d dir:%{public}s dataType:%{public}d->%{public}d", diff --git a/services/distributeddataservice/service/test/meta_data_test.cpp b/services/distributeddataservice/service/test/meta_data_test.cpp index 714fd0b53a5762941758766da8045c2ab1ac4330..b03d715c92e875b54d4492ebb3c714e766d686d9 100644 --- a/services/distributeddataservice/service/test/meta_data_test.cpp +++ b/services/distributeddataservice/service/test/meta_data_test.cpp @@ -164,5 +164,36 @@ HWTEST_F(MetaDataTest, MateDataChanged, TestSize.Level0) ASSERT_FALSE(metaData.isNeedCompress); ASSERT_TRUE(MetaDataManager::GetInstance().DelMeta(metaData_.GetKeyWithoutPath())); } + +/** +* @tc.name: SchemaChanged +* @tc.desc: schema data changed +* @tc.type: FUNC +* @tc.require: +* @tc.author: yl +*/ +HWTEST_F(MetaDataTest, SchemaChanged, TestSize.Level0) +{ + ZLOGI("SchemaChanged start"); + options_.schema = ""; + StoreMetaData metaData; + std::vector password {}; + auto status = kvdbServiceImpl_->AfterCreate(appId, storeId, options_, password); + ASSERT_EQ(status, Status::SUCCESS); + StoreMetaMapping meta(metaData_); + ASSERT_TRUE(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true)); + status = kvdbServiceImpl_->AfterCreate(appId, storeId, options_, password); + ASSERT_EQ(status, Status::SUCCESS); + + options_.schema = "schema_data"; + status = kvdbServiceImpl_->AfterCreate(appId, storeId, options_, password); + ASSERT_EQ(status, Status::SUCCESS); + meta = metaData_; + ASSERT_TRUE(MetaDataManager::GetInstance().DelMeta(meta.GetKey(), true)); + status = kvdbServiceImpl_->AfterCreate(appId, storeId, options_, password); + ASSERT_EQ(status, Status::SUCCESS); + ASSERT_TRUE(MetaDataManager::GetInstance().LoadMeta(meta.GetKey(), metaData, true)); + ASSERT_EQ(metaData.schema, "schema_data"); +} } // namespace DistributedDataTest } // namespace OHOS::Test