Github user paul-rogers commented on a diff in the pull request: https://github.com/apache/drill/pull/1125#discussion_r169860310 --- Diff: exec/java-exec/src/main/java/org/apache/drill/exec/record/RecordBatchSizer.java --- @@ -245,16 +251,30 @@ private void buildVectorInitializer(VectorInitializer initializer) { else if (width > 0) { initializer.variableWidth(name, width); } + --- End diff -- There may be a but in the original code above this line. ``` String name = prefix + metadata.getName(); ... initializer.variableWidthArray(name, ... ``` First problem: this method does not recurse into the child vectors of maps. Second, if it did, since each initializer is supposed to hold a name relative to its parent tuple (row or map), the prefix is not needed. The vector initializer code was originally created for sort and none of the tests for sort include maps, so I probably did not catch the fact that maps don't work correctly with the original code. Suggestion: add unit tests for this stuff. This code is getting very complex and tests would be very helpful to catch these subtle bugs. Disclaimer: this is all supposed to be replaced with the ResultSetLoader code. The vector allocation code there is much cleaner, does handle maps, and has been unit tested.
---