The proper id / identity fix for rocksdb

This commit is contained in:
Thomas Krijnen
2026-04-22 18:11:01 +02:00
parent 14e9846e35
commit c42a7f32d0
3 changed files with 5 additions and 3 deletions
+2
View File
@@ -387,6 +387,8 @@ express::Base ifcopenshell::impl::rocks_db_file_storage::assert_existance(size_t
if (is_entity != (r == entityinstance_ref)) {
throw std::runtime_error("Incorrect reference");
}
// @nb note that in case of type declarations we pass the identity as the number so
// that we can read back the attributes from the db (we cannot assign to identity).
auto data = std::make_shared<instance_data>(file, decl, number, rocks_db_attribute_storage{});
if (r == ifcopenshell::impl::rocks_db_file_storage::entityinstance_ref) {
instance_cache_.insert({number, data});
+2 -2
View File
@@ -494,7 +494,7 @@ class IFC_PARSE_API instance_data {
}
#ifdef IFOPSH_WITH_ROCKSDB
else {
rocks_db_attribute_storage{}.set(get_storage_of_type<ifcopenshell::impl::rocks_db_file_storage>(), declaration_, declaration_->as_entity() ? id_ : identity_, attribute_index, value);
rocks_db_attribute_storage{}.set(get_storage_of_type<ifcopenshell::impl::rocks_db_file_storage>(), declaration_, id_ ? id_ : identity_, attribute_index, value);
}
#endif
}
@@ -506,7 +506,7 @@ class IFC_PARSE_API instance_data {
}
#ifdef IFOPSH_WITH_ROCKSDB
else {
return rocks_db_attribute_storage{}.has<T>(get_storage_of_type<ifcopenshell::impl::rocks_db_file_storage>(), declaration_, declaration_->as_entity() ? id_ : identity_, attribute_index);
return rocks_db_attribute_storage{}.has<T>(get_storage_of_type<ifcopenshell::impl::rocks_db_file_storage>(), declaration_, id_ ? id_ : identity_, attribute_index);
}
#endif
}
+1 -1
View File
@@ -2957,7 +2957,7 @@ attribute_value instance_data::get_attribute_value(size_t index) const
return nullptr;
}
}, file_->storage_);
return attribute_value(storage, declaration_->as_entity() ? id_ : identity_, declaration_, (uint8_t)index);
return attribute_value(storage, id_ ? id_ : identity_, declaration_, (uint8_t)index);
}
}