Skip to content

Commit c0fd2f9

Browse files
committed
use the dictionary of the last chunked vector list for chunked dictionary vectors
1 parent e33c068 commit c0fd2f9

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

js/src/vector.ts

+11-6
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
// specific language governing permissions and limitations
1616
// under the License.
1717

18-
import { Data, ChunkedData, FlatData, BoolData, FlatListData, NestedData } from './data';
18+
import { Data, ChunkedData, FlatData, BoolData, FlatListData, NestedData, DictionaryData } from './data';
1919
import { VisitorNode, TypeVisitor, VectorVisitor } from './visitor';
2020
import { DataType, ListType, FlatType, NestedType, FlatListType, TimeUnit } from './type';
2121
import { IterableArrayLike, Precision, DateUnit, IntervalUnit, UnionMode } from './type';
@@ -373,16 +373,21 @@ export class DictionaryVector<T extends DataType = DataType> extends Vector<Dict
373373
public readonly dictionary: Vector<T>;
374374
constructor(data: Data<Dictionary<T>>, view: View<Dictionary<T>> = new DictionaryView<T>(data.dictionary, new IntVector(data.indicies))) {
375375
super(data as Data<any>, view);
376-
if (view instanceof DictionaryView) {
376+
if (data instanceof DictionaryData && view instanceof DictionaryView) {
377377
this.indicies = view.indicies;
378-
this.dictionary = view.dictionary;
379-
} else if (view instanceof ChunkedView) {
380-
this.dictionary = (view.chunks[0] as DictionaryVector<T>).dictionary;
381-
this.indicies = (view.chunks as DictionaryVector<T>[]).reduce<Vector<Int> | null>(
378+
this.dictionary = data.dictionary;
379+
} else if (data instanceof ChunkedData && view instanceof ChunkedView) {
380+
const chunks = view.chunks as DictionaryVector<T>[];
381+
// Assume the last chunk's dictionary data is the most up-to-date,
382+
// including data from DictionaryBatches that were marked as deltas
383+
this.dictionary = chunks[chunks.length - 1].dictionary;
384+
this.indicies = chunks.reduce<Vector<Int> | null>(
382385
(idxs: Vector<Int> | null, dict: DictionaryVector<T>) =>
383386
!idxs ? dict.indicies! : idxs.concat(dict.indicies!),
384387
null
385388
)!;
389+
} else {
390+
throw new TypeError(`Unrecognized DictionaryVector view`);
386391
}
387392
}
388393
public getKey(index: number) { return this.indicies.get(index); }

0 commit comments

Comments
 (0)