@@ -726,12 +726,26 @@ bool ROOT::Internal::IsMatchingFieldType(std::string_view actualTypeName, std::s
726726
727727std::string ROOT::Internal::GetTypeTraceReport (const RFieldBase &field, const RNTupleDescriptor &desc)
728728{
729+ // Information to print in a single line of the type trace
730+ struct RFieldInfo {
731+ std::string fFieldName ;
732+ std::string fTypeName ;
733+ DescriptorId_t fFieldId = kInvalidDescriptorId ;
734+ std::uint32_t fTypeVersion = 0 ;
735+ std::optional<std::uint32_t > fTypeChecksum ;
736+ };
737+
729738 std::vector<const RFieldBase *> inMemoryStack;
730739 std::vector<const RFieldDescriptor *> onDiskStack;
731740
732- auto fnGetLine = [](const std::string &fieldName, const std::string &fieldType, DescriptorId_t fieldId,
733- int level) -> std::string {
734- return std::string (2 * level, ' ' ) + fieldName + " [" + fieldType + " ] (id: " + std::to_string (fieldId) + " )\n " ;
741+ auto fnGetLine = [](const RFieldInfo &fieldInfo, int level) -> std::string {
742+ std::string line = std::string (2 * level, ' ' ) + fieldInfo.fFieldName + " [" + fieldInfo.fTypeName ;
743+ if (fieldInfo.fTypeVersion > 0 )
744+ line += " , type version: " + std::to_string (fieldInfo.fTypeVersion );
745+ if (fieldInfo.fTypeChecksum )
746+ line += " , type checksum: " + std::to_string (*fieldInfo.fTypeChecksum );
747+ line += " ] (id: " + std::to_string (fieldInfo.fFieldId ) + " )\n " ;
748+ return line;
735749 };
736750
737751 const RFieldBase *fieldPtr = &field;
@@ -750,13 +764,28 @@ std::string ROOT::Internal::GetTypeTraceReport(const RFieldBase &field, const RN
750764 std::string report = " In-memory field/type hierarchy:\n " ;
751765 int indentLevel = 0 ;
752766 for (auto itr = inMemoryStack.rbegin (); itr != inMemoryStack.rend (); ++itr, ++indentLevel) {
753- report += fnGetLine ((*itr)->GetFieldName (), (*itr)->GetTypeName (), (*itr)->GetOnDiskId (), indentLevel);
767+ RFieldInfo fieldInfo;
768+ fieldInfo.fFieldName = (*itr)->GetFieldName ();
769+ fieldInfo.fTypeName = (*itr)->GetTypeName ();
770+ fieldInfo.fFieldId = (*itr)->GetOnDiskId ();
771+ fieldInfo.fTypeVersion = (*itr)->GetTypeVersion ();
772+ if ((*itr)->GetTraits () & RFieldBase::kTraitTypeChecksum )
773+ fieldInfo.fTypeChecksum = (*itr)->GetTypeChecksum ();
774+
775+ report += fnGetLine (fieldInfo, indentLevel);
754776 }
755777
756778 report += " On-disk field/type hierarchy:\n " ;
757779 indentLevel = 0 ;
758780 for (auto itr = onDiskStack.rbegin (); itr != onDiskStack.rend (); ++itr, ++indentLevel) {
759- report += fnGetLine ((*itr)->GetFieldName (), (*itr)->GetTypeName (), (*itr)->GetId (), indentLevel);
781+ RFieldInfo fieldInfo;
782+ fieldInfo.fFieldName = (*itr)->GetFieldName ();
783+ fieldInfo.fTypeName = (*itr)->GetTypeName ();
784+ fieldInfo.fFieldId = (*itr)->GetId ();
785+ fieldInfo.fTypeVersion = (*itr)->GetTypeVersion ();
786+ fieldInfo.fTypeChecksum = (*itr)->GetTypeChecksum ();
787+
788+ report += fnGetLine (fieldInfo, indentLevel);
760789 }
761790
762791 return report;
0 commit comments