use references instead of shared_ptr
This commit is contained in:
parent
a82805548e
commit
85047bb96d
|
@ -42,8 +42,6 @@ namespace realm {
|
||||||
return property_for_name(primary_key);
|
return property_for_name(primary_key);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef std::shared_ptr<ObjectSchema> ObjectSchemaRef;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* defined(__realm__object_schema__) */
|
#endif /* defined(__realm__object_schema__) */
|
||||||
|
|
|
@ -180,19 +180,19 @@ static inline bool property_has_changed(Property &p1, Property &p2) {
|
||||||
// set references to tables on targetSchema and create/update any missing or out-of-date tables
|
// set references to tables on targetSchema and create/update any missing or out-of-date tables
|
||||||
// if update existing is true, updates existing tables, otherwise validates existing tables
|
// if update existing is true, updates existing tables, otherwise validates existing tables
|
||||||
// NOTE: must be called from within write transaction
|
// NOTE: must be called from within write transaction
|
||||||
bool ObjectStore::create_tables(realm::Group *group, ObjectStore::Schema target_schema, bool update_existing) {
|
bool ObjectStore::create_tables(realm::Group *group, ObjectStore::Schema &target_schema, bool update_existing) {
|
||||||
bool changed = false;
|
bool changed = false;
|
||||||
|
|
||||||
// first pass to create missing tables
|
// first pass to create missing tables
|
||||||
vector<ObjectSchema *> to_update;
|
vector<ObjectSchema *> to_update;
|
||||||
for (size_t i = 0; i < target_schema.size(); i++) {
|
for (size_t i = 0; i < target_schema.size(); i++) {
|
||||||
ObjectSchema *object_schema = target_schema[i].get();
|
ObjectSchema &object_schema = target_schema[i];
|
||||||
bool created = false;
|
bool created = false;
|
||||||
ObjectStore::table_for_object_type_create_if_needed(group, object_schema->name, created);
|
ObjectStore::table_for_object_type_create_if_needed(group, object_schema.name, created);
|
||||||
|
|
||||||
// we will modify tables for any new objectSchema (table was created) or for all if update_existing is true
|
// we will modify tables for any new objectSchema (table was created) or for all if update_existing is true
|
||||||
if (update_existing || created) {
|
if (update_existing || created) {
|
||||||
to_update.push_back(object_schema);
|
to_update.push_back(&object_schema);
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -267,7 +267,7 @@ bool ObjectStore::is_migration_required(realm::Group *group, uint64_t new_versio
|
||||||
|
|
||||||
bool ObjectStore::update_realm_with_schema(realm::Group *group,
|
bool ObjectStore::update_realm_with_schema(realm::Group *group,
|
||||||
uint64_t version,
|
uint64_t version,
|
||||||
Schema schema,
|
Schema &schema,
|
||||||
MigrationFunction migration) {
|
MigrationFunction migration) {
|
||||||
// Recheck the schema version after beginning the write transaction as
|
// Recheck the schema version after beginning the write transaction as
|
||||||
// another process may have done the migration after we opened the read
|
// another process may have done the migration after we opened the read
|
||||||
|
@ -277,14 +277,14 @@ bool ObjectStore::update_realm_with_schema(realm::Group *group,
|
||||||
// create tables
|
// create tables
|
||||||
bool changed = create_metadata_tables(group) | create_tables(group, schema, migrating);
|
bool changed = create_metadata_tables(group) | create_tables(group, schema, migrating);
|
||||||
for (size_t i = 0; i < schema.size(); i++) {
|
for (size_t i = 0; i < schema.size(); i++) {
|
||||||
ObjectSchema *target_schema = schema[i].get();
|
ObjectSchema &target_schema = schema[i];
|
||||||
TableRef table = table_for_object_type(group, target_schema->name);
|
TableRef table = table_for_object_type(group, target_schema.name);
|
||||||
|
|
||||||
// read-only realms may be missing tables entirely
|
// read-only realms may be missing tables entirely
|
||||||
if (table) {
|
if (table) {
|
||||||
auto errors = validate_schema_and_update_column_mapping(group, *target_schema);
|
auto errors = validate_schema_and_update_column_mapping(group, target_schema);
|
||||||
if (errors.size()) {
|
if (errors.size()) {
|
||||||
throw ObjectStoreValidationException(errors, target_schema->name);
|
throw ObjectStoreValidationException(errors, target_schema.name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -308,7 +308,7 @@ ObjectStore::Schema ObjectStore::schema_from_group(Group *group) {
|
||||||
for (unsigned long i = 0; i < group->size(); i++) {
|
for (unsigned long i = 0; i < group->size(); i++) {
|
||||||
string object_type = object_type_for_table_name(group->get_table_name(i));
|
string object_type = object_type_for_table_name(group->get_table_name(i));
|
||||||
if (object_type.length()) {
|
if (object_type.length()) {
|
||||||
schema.push_back(ObjectSchemaRef(new ObjectSchema(group, object_type)));
|
schema.push_back(ObjectSchema(group, object_type));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return schema;
|
return schema;
|
||||||
|
|
|
@ -44,10 +44,10 @@ namespace realm {
|
||||||
// optionally runs migration function/lambda if schema is out of date
|
// optionally runs migration function/lambda if schema is out of date
|
||||||
// NOTE: must be performed within a write transaction
|
// NOTE: must be performed within a write transaction
|
||||||
typedef std::function<void()> MigrationFunction;
|
typedef std::function<void()> MigrationFunction;
|
||||||
typedef std::vector<ObjectSchemaRef> Schema;
|
typedef std::vector<ObjectSchema> Schema;
|
||||||
static bool update_realm_with_schema(Group *group,
|
static bool update_realm_with_schema(Group *group,
|
||||||
uint64_t version,
|
uint64_t version,
|
||||||
Schema schema,
|
Schema &schema,
|
||||||
MigrationFunction migration);
|
MigrationFunction migration);
|
||||||
|
|
||||||
// get a table for an object type
|
// get a table for an object type
|
||||||
|
@ -70,7 +70,7 @@ namespace realm {
|
||||||
|
|
||||||
// set references to tables on targetSchema and create/update any missing or out-of-date tables
|
// set references to tables on targetSchema and create/update any missing or out-of-date tables
|
||||||
// if update existing is true, updates existing tables, otherwise validates existing tables
|
// if update existing is true, updates existing tables, otherwise validates existing tables
|
||||||
static bool create_tables(realm::Group *group, ObjectStore::Schema target_schema, bool update_existing);
|
static bool create_tables(realm::Group *group, ObjectStore::Schema &target_schema, bool update_existing);
|
||||||
|
|
||||||
// get primary key property name for object type
|
// get primary key property name for object type
|
||||||
static StringData get_primary_key_for_object(Group *group, StringData object_type);
|
static StringData get_primary_key_for_object(Group *group, StringData object_type);
|
||||||
|
|
Loading…
Reference in New Issue