-
Notifications
You must be signed in to change notification settings - Fork 1.4k
[ntuple] Fix automatic schema evolution of record fields #19846
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[ntuple] Fix automatic schema evolution of record fields #19846
Conversation
606a7d8
to
1217e71
Compare
Test Results 21 files 21 suites 3d 13h 55m 28s ⏱️ For more details on these failures, see this check. Results for commit 42e5bbc. ♻️ This comment has been updated with latest results. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks mostly good to me, two small comments.
1217e71
to
7590380
Compare
7590380
to
67a9de2
Compare
For std::pair and std::tuple, check that the number of subfields in memory and on disk is identical. For 2 subfields, std::pair and std::tuple are interchangible. The pair/tuple elements don't need to be an exact match but are themselves subject to automatic schema evolution.
The privileged access of RClassField to RFieldBase is used to modify some properties of its subfields. Make this more targeted through protected methods. One of the methods, CallSetArtificialOn(), will be reused by the record field.
Ensure that record field evolution supports missing fields, reordered fields, and added fields. Mark added fields as artificial (which was missing before).
Prevent pair and tuple fields from being demoted to record fields by adding their own CloneImpl() overrides.
Record fields are used for 1) untyped records 2) emulated classes and as 3) base class for the pair and tuple fields. These three cases use different constructors and have different reconciliation logic wrt. to the on-disk information. Make this more clear through code comments. Shortcut reconciliation for emulated fields.
67a9de2
to
42e5bbc
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, thanks!
Includes automatic schema evolution for
std::pair
andstd::tuple
, which are implemented as descendants of theRRecordField
.Fixes #19254