Commit ab3995a
committed
Fix HashChild reusing a nested field's unshifted validity buffer
HashChild built its returned ArrayData with offset 0, but reused the
child's raw validity buffer as-is. That buffer requires bit index
child.offset + i to read logical row i, while every caller (via
ToColumnArray, which never applies ArrayData::offset itself) reads
buffer bit 0 as row 0. If a struct's nested field is itself an offset
slice of a larger array, this misread validity by child.offset bits,
misclassifying valid rows as null (or vice versa) and producing wrong
combined hashes.
Confirmed with a repro: a struct wrapping a list field sliced to
offset=3 hashed row 0 (valid) as 0, colliding with null, while an
equivalent independently-built struct hashed it correctly.
Fixed by repacking the validity bitmap into a fresh, 0-based buffer in
HashChild, so it's self-consistent with the already-0-based hash values
buffer built alongside it.1 parent 6053fa0 commit ab3995a
2 files changed
Lines changed: 60 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
26 | 26 | | |
27 | 27 | | |
28 | 28 | | |
| 29 | + | |
29 | 30 | | |
30 | 31 | | |
31 | 32 | | |
| |||
136 | 137 | | |
137 | 138 | | |
138 | 139 | | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
139 | 153 | | |
140 | | - | |
| 154 | + | |
141 | 155 | | |
142 | 156 | | |
143 | 157 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
804 | 804 | | |
805 | 805 | | |
806 | 806 | | |
| 807 | + | |
| 808 | + | |
| 809 | + | |
| 810 | + | |
| 811 | + | |
| 812 | + | |
| 813 | + | |
| 814 | + | |
| 815 | + | |
| 816 | + | |
| 817 | + | |
| 818 | + | |
| 819 | + | |
| 820 | + | |
| 821 | + | |
| 822 | + | |
| 823 | + | |
| 824 | + | |
| 825 | + | |
| 826 | + | |
| 827 | + | |
| 828 | + | |
| 829 | + | |
| 830 | + | |
| 831 | + | |
| 832 | + | |
| 833 | + | |
| 834 | + | |
| 835 | + | |
| 836 | + | |
| 837 | + | |
| 838 | + | |
| 839 | + | |
| 840 | + | |
| 841 | + | |
| 842 | + | |
| 843 | + | |
| 844 | + | |
| 845 | + | |
| 846 | + | |
| 847 | + | |
| 848 | + | |
| 849 | + | |
| 850 | + | |
| 851 | + | |
807 | 852 | | |
808 | 853 | | |
809 | 854 | | |
| |||
0 commit comments