Skip to content

GH-830: Create Null children when building a struct writer from a Field - #1379

Open
ump45nose wants to merge 1 commit into
apache:mainfrom
ump45nose:fix/830-struct-writer-null-child
Open

ump45nose wants to merge 1 commit into
apache:mainfrom
ump45nose:fix/830-struct-writer-null-child

Conversation

@ump45nose

Copy link
Copy Markdown

What's Changed

NullableStructWriter / SingleStructWriter (generated from StructWriters.java) walk the struct field's children in their constructor and create a child vector for each one. There was no case NULL, so a struct whose field has a Null-typed child threw UnsupportedOperationException: Unknown type: NULL. Because StructVector builds its writer as soon as it is constructed, this broke new StructVector(field, ...) and anything that goes through it, such as StructVector#getTransferPair(Field, BufferAllocator) from the issue.

There is no writer for the Null type, so the new case only adds the NullVector child to the container (with the child's nullability). The resulting vector's field now matches the input field, and the other children's writers keep working as before.

Tests added to TestStructVector:

  • testStructVectorTransferPairWithNullType: the reproducer from the issue, plus a transfer() that checks the value count, struct validity and the NullVector child.
  • testStructVectorFromFieldWithNullChild: builds a StructVector straight from a Field with a Null child and an Int child, then writes through the struct writer.

Both fail on main with Unknown type: NULL and pass with this change. I also ran TestStructVector, TestComplexWriter, TestListVector, TestMapVector, TestUnionVector, TestDenseUnionVector, TestComplexCopier, TestPromotableWriter and TestSplitAndTransfer (all pass, both the default and netty runs), and mvn -pl vector spotless:check.

AI assistance disclosure: this change, its tests and this description were prepared with the help of an AI coding assistant. The tests listed above were run locally against this branch.

Closes #830.

… a Field

NullableStructWriter/SingleStructWriter threw "Unknown type: NULL" when
the struct field had a Null-typed child, which broke e.g.
StructVector#getTransferPair(Field, ...). Add the NullVector child instead.
@github-actions

Copy link
Copy Markdown

Thank you for opening a pull request!

Please label the PR with one or more of:

  • bug-fix
  • chore
  • dependencies
  • documentation
  • enhancement

Also, add the 'breaking-change' label if appropriate.

See CONTRIBUTING.md for details.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

'Unknown type: NULL' when initialising a NullableStructWriter from a struct with NullVector children

1 participant