Problem
DictionaryPageReader keys column metadata and cached dictionary pages by ColumnPath.toDotString(). These distinct component paths therefore collide:
Top-level field named `a.b`: ["a.b"]
Nested field `b` in `a`: ["a", "b"]
The later column overwrites the earlier entry under the shared "a.b" key.
Reproduction
A generic test uses two dictionary-encoded string columns with disjoint values:
["a.b"] -> ["one", "two"]
["a", "b"] -> ["nested-one", "nested-two"]
Requesting the top-level dictionary currently returns:
expected: ["one", "two"]
actual: ["nested-one", "nested-two"]
Proposed direction
Key the metadata and dictionary cache maps by component-based ColumnPath rather than flattened strings. This is an in-memory identity fix with no on-disk format change.
Problem
DictionaryPageReaderkeys column metadata and cached dictionary pages byColumnPath.toDotString(). These distinct component paths therefore collide:The later column overwrites the earlier entry under the shared
"a.b"key.Reproduction
A generic test uses two dictionary-encoded string columns with disjoint values:
Requesting the top-level dictionary currently returns:
Proposed direction
Key the metadata and dictionary cache maps by component-based
ColumnPathrather than flattened strings. This is an in-memory identity fix with no on-disk format change.