Skip to content

Commit 643fa1e

Browse files
committed
[ntuple] automatic schema evolution from enum to int
1 parent a5b8cb6 commit 643fa1e

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

tree/ntuple/src/RField.cxx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,11 @@ void ROOT::RSimpleField<T>::ReconcileIntegralField(const RNTupleDescriptor &desc
9898
const RFieldDescriptor &fieldDesc = desc.GetFieldDescriptor(GetOnDiskId());
9999
EnsureMatchingOnDiskField(fieldDesc, kDiffTypeName);
100100

101+
if (fieldDesc.IsCustomEnum(desc)) {
102+
SetOnDiskId(desc.FindFieldId("_0", GetOnDiskId()));
103+
return;
104+
}
105+
101106
static const std::string gIntegralTypeNames[] = {"bool", "char", "std::int8_t", "std::uint8_t",
102107
"std::int16_t", "std::uint16_t", "std::int32_t", "std::uint32_t",
103108
"std::int64_t", "std::uint64_t"};

tree/ntuple/test/ntuple_evolution_type.cxx

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,3 +207,25 @@ TEST(RNTupleEvolution, CheckPairTuple)
207207
EXPECT_EQ(1, std::get<0>(p(0)));
208208
EXPECT_DOUBLE_EQ(2.0, std::get<1>(p(0)));
209209
}
210+
211+
TEST(RNTupleEvolution, Enum)
212+
{
213+
FileRaii fileGuard("test_ntuple_evolution_check_pair_tuple.root");
214+
{
215+
auto model = ROOT::RNTupleModel::Create();
216+
auto e1 = model->MakeField<CustomEnumInt8>("e1");
217+
auto e2 = model->MakeField<CustomEnum>("e2");
218+
auto writer = ROOT::RNTupleWriter::Recreate(std::move(model), "ntpl", fileGuard.GetPath());
219+
220+
*e1 = static_cast<CustomEnumInt8>(42);
221+
*e2 = static_cast<CustomEnum>(137);
222+
223+
writer->Fill();
224+
}
225+
226+
auto reader = RNTupleReader::Open("ntpl", fileGuard.GetPath());
227+
auto ve1 = reader->GetView<int>("e1");
228+
auto ve2 = reader->GetView<int>("e2");
229+
EXPECT_EQ(42, ve1(0));
230+
EXPECT_EQ(137, ve2(0));
231+
}

0 commit comments

Comments
 (0)