Symptom
Reading any ARRAY<DOUBLE> column — both a plain Arrow List<Float64> and a FixedSizeList<Float64> (a Lance f64 vector column) — always fails with:
java.lang.ClassCastException: class org.apache.arrow.vector.Float8Vector cannot be cast to class
org.apache.flink.connector.lance.converter.RowDataConverter$Double8Vector
at org.apache.flink.connector.lance.converter.RowDataConverter.readArrayData(RowDataConverter.java:280)
Root cause
The DoubleType branch of RowDataConverter.readArrayData casts the child vector to the private inner class Double8Vector — a wrapper whose javadoc literally says "alias for Float8Vector" — instead of using org.apache.arrow.vector.Float8Vector directly. The wrapper is never instantiated anywhere in the codebase; it is a leftover from an unfinished refactor. At runtime the child vector is an Arrow Float8Vector, which is unrelated to the inner class, so the cast can never succeed.
For comparison, the FloatType branch of the same method and the write path's DoubleType branch both cast to the Arrow vector directly; only this one branch was missed.
Impact
- Every read entry point funnels into this one private method —
LanceSource, LanceInputFormat, LanceAggregateSource, LanceVectorSearch — so f64 vector columns are entirely unreadable.
- The type layer lets the query through:
LanceTypeConverter documents FixedSizeList<Float64> <-> ARRAY<DOUBLE> as a supported mapping and maps both List and FixedSizeList to ArrayType, so schema validation passes and the failure only happens at scan time (accept-then-crash).
- Affected version: 0.1.0.
Symptom
Reading any
ARRAY<DOUBLE>column — both a plain ArrowList<Float64>and aFixedSizeList<Float64>(a Lance f64 vector column) — always fails with:Root cause
The
DoubleTypebranch ofRowDataConverter.readArrayDatacasts the child vector to the private inner classDouble8Vector— a wrapper whose javadoc literally says "alias for Float8Vector" — instead of usingorg.apache.arrow.vector.Float8Vectordirectly. The wrapper is never instantiated anywhere in the codebase; it is a leftover from an unfinished refactor. At runtime the child vector is an ArrowFloat8Vector, which is unrelated to the inner class, so the cast can never succeed.For comparison, the
FloatTypebranch of the same method and the write path'sDoubleTypebranch both cast to the Arrow vector directly; only this one branch was missed.Impact
LanceSource,LanceInputFormat,LanceAggregateSource,LanceVectorSearch— so f64 vector columns are entirely unreadable.LanceTypeConverterdocumentsFixedSizeList<Float64> <-> ARRAY<DOUBLE>as a supported mapping and maps bothListandFixedSizeListtoArrayType, so schema validation passes and the failure only happens at scan time (accept-then-crash).