diff --git a/src/ifcparse/file.cpp b/src/ifcparse/file.cpp index 80ea1011fc..5f9b4dba5a 100644 --- a/src/ifcparse/file.cpp +++ b/src/ifcparse/file.cpp @@ -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(file, decl, number, rocks_db_attribute_storage{}); if (r == ifcopenshell::impl::rocks_db_file_storage::entityinstance_ref) { instance_cache_.insert({number, data}); diff --git a/src/ifcparse/instance_data.h b/src/ifcparse/instance_data.h index 57d99b7da9..d80d9d2d0c 100644 --- a/src/ifcparse/instance_data.h +++ b/src/ifcparse/instance_data.h @@ -494,7 +494,7 @@ class IFC_PARSE_API instance_data { } #ifdef IFOPSH_WITH_ROCKSDB else { - rocks_db_attribute_storage{}.set(get_storage_of_type(), declaration_, declaration_->as_entity() ? id_ : identity_, attribute_index, value); + rocks_db_attribute_storage{}.set(get_storage_of_type(), 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(get_storage_of_type(), declaration_, declaration_->as_entity() ? id_ : identity_, attribute_index); + return rocks_db_attribute_storage{}.has(get_storage_of_type(), declaration_, id_ ? id_ : identity_, attribute_index); } #endif } diff --git a/src/ifcparse/parse.cpp b/src/ifcparse/parse.cpp index 566c212865..f1a1ba2fd6 100644 --- a/src/ifcparse/parse.cpp +++ b/src/ifcparse/parse.cpp @@ -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); } }