Extract some logic to a helper function to avoid recursion in update_schema()
This commit is contained in:
parent
8d7b5d8d08
commit
4b001e1842
|
@ -201,12 +201,20 @@ void Realm::update_schema(std::unique_ptr<Schema> schema, uint64_t version)
|
||||||
{
|
{
|
||||||
schema->validate();
|
schema->validate();
|
||||||
|
|
||||||
|
auto needs_update = [&] {
|
||||||
// If the schema version matches, just verify that the schema itself also matches
|
// If the schema version matches, just verify that the schema itself also matches
|
||||||
bool needs_update = !m_config.read_only && (m_config.schema_version != version || ObjectStore::needs_update(*m_config.schema, *schema));
|
bool needs_write = !m_config.read_only && (m_config.schema_version != version || ObjectStore::needs_update(*m_config.schema, *schema));
|
||||||
if (!needs_update) {
|
if (needs_write) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
ObjectStore::verify_schema(*m_config.schema, *schema, m_config.read_only);
|
ObjectStore::verify_schema(*m_config.schema, *schema, m_config.read_only);
|
||||||
m_config.schema = std::move(schema);
|
m_config.schema = std::move(schema);
|
||||||
m_config.schema_version = version;
|
m_config.schema_version = version;
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!needs_update()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -225,11 +233,13 @@ void Realm::update_schema(std::unique_ptr<Schema> schema, uint64_t version)
|
||||||
// recheck everything
|
// recheck everything
|
||||||
auto current_schema_version = ObjectStore::get_schema_version(read_group());
|
auto current_schema_version = ObjectStore::get_schema_version(read_group());
|
||||||
if (current_schema_version != m_config.schema_version) {
|
if (current_schema_version != m_config.schema_version) {
|
||||||
cancel_transaction();
|
|
||||||
|
|
||||||
m_config.schema_version = current_schema_version;
|
m_config.schema_version = current_schema_version;
|
||||||
*m_config.schema = ObjectStore::schema_from_group(read_group());
|
*m_config.schema = ObjectStore::schema_from_group(read_group());
|
||||||
return update_schema(std::move(schema), version);
|
|
||||||
|
if (!needs_update()) {
|
||||||
|
cancel_transaction();
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Config old_config(m_config);
|
Config old_config(m_config);
|
||||||
|
|
Loading…
Reference in New Issue