Merge pull request #19 from realm/tg-file-upgrade-checker
Added support for suppressing file format upgrades.
This commit is contained in:
commit
e897b31b7e
|
@ -38,6 +38,7 @@ Realm::Config::Config(const Config& c)
|
||||||
, read_only(c.read_only)
|
, read_only(c.read_only)
|
||||||
, in_memory(c.in_memory)
|
, in_memory(c.in_memory)
|
||||||
, cache(c.cache)
|
, cache(c.cache)
|
||||||
|
, disable_format_upgrade(c.disable_format_upgrade)
|
||||||
, encryption_key(c.encryption_key)
|
, encryption_key(c.encryption_key)
|
||||||
, schema_version(c.schema_version)
|
, schema_version(c.schema_version)
|
||||||
, migration_function(c.migration_function)
|
, migration_function(c.migration_function)
|
||||||
|
@ -71,7 +72,7 @@ Realm::Realm(Config config)
|
||||||
m_history = realm::make_client_history(m_config.path, m_config.encryption_key.data());
|
m_history = realm::make_client_history(m_config.path, m_config.encryption_key.data());
|
||||||
SharedGroup::DurabilityLevel durability = m_config.in_memory ? SharedGroup::durability_MemOnly :
|
SharedGroup::DurabilityLevel durability = m_config.in_memory ? SharedGroup::durability_MemOnly :
|
||||||
SharedGroup::durability_Full;
|
SharedGroup::durability_Full;
|
||||||
m_shared_group = std::make_unique<SharedGroup>(*m_history, durability, m_config.encryption_key.data());
|
m_shared_group = std::make_unique<SharedGroup>(*m_history, durability, m_config.encryption_key.data(), !m_config.disable_format_upgrade);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (util::File::PermissionDenied const& ex) {
|
catch (util::File::PermissionDenied const& ex) {
|
||||||
|
@ -92,6 +93,11 @@ Realm::Realm(Config config)
|
||||||
"Realm file is currently open in another process "
|
"Realm file is currently open in another process "
|
||||||
"which cannot share access with this process. All processes sharing a single file must be the same architecture.");
|
"which cannot share access with this process. All processes sharing a single file must be the same architecture.");
|
||||||
}
|
}
|
||||||
|
catch (FileFormatUpgradeRequired const& ex) {
|
||||||
|
throw RealmFileException(RealmFileException::Kind::FormatUpgradeRequired, m_config.path,
|
||||||
|
"The Realm file format must be allowed to be upgraded "
|
||||||
|
"in order to proceed.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Realm::~Realm() {
|
Realm::~Realm() {
|
||||||
|
|
|
@ -49,6 +49,7 @@ namespace realm {
|
||||||
bool read_only = false;
|
bool read_only = false;
|
||||||
bool in_memory = false;
|
bool in_memory = false;
|
||||||
bool cache = true;
|
bool cache = true;
|
||||||
|
bool disable_format_upgrade = false;
|
||||||
std::vector<char> encryption_key;
|
std::vector<char> encryption_key;
|
||||||
|
|
||||||
std::unique_ptr<Schema> schema;
|
std::unique_ptr<Schema> schema;
|
||||||
|
@ -162,6 +163,8 @@ namespace realm {
|
||||||
process which cannot share with the current process due to an
|
process which cannot share with the current process due to an
|
||||||
architecture mismatch. */
|
architecture mismatch. */
|
||||||
IncompatibleLockFile,
|
IncompatibleLockFile,
|
||||||
|
/** Thrown if the file needs to be upgraded to a new format, but upgrades have been explicitly disabled. */
|
||||||
|
FormatUpgradeRequired,
|
||||||
};
|
};
|
||||||
RealmFileException(Kind kind, std::string path, std::string message) :
|
RealmFileException(Kind kind, std::string path, std::string message) :
|
||||||
std::runtime_error(std::move(message)), m_kind(kind), m_path(std::move(path)) {}
|
std::runtime_error(std::move(message)), m_kind(kind), m_path(std::move(path)) {}
|
||||||
|
|
Loading…
Reference in New Issue