|
15 | 15 | // specific language governing permissions and limitations
|
16 | 16 | // under the License.
|
17 | 17 |
|
18 |
| -import { Data, ChunkedData, FlatData, BoolData, FlatListData, NestedData } from './data'; |
| 18 | +import { Data, ChunkedData, FlatData, BoolData, FlatListData, NestedData, DictionaryData } from './data'; |
19 | 19 | import { VisitorNode, TypeVisitor, VectorVisitor } from './visitor';
|
20 | 20 | import { DataType, ListType, FlatType, NestedType, FlatListType, TimeUnit } from './type';
|
21 | 21 | import { IterableArrayLike, Precision, DateUnit, IntervalUnit, UnionMode } from './type';
|
@@ -373,16 +373,21 @@ export class DictionaryVector<T extends DataType = DataType> extends Vector<Dict
|
373 | 373 | public readonly dictionary: Vector<T>;
|
374 | 374 | constructor(data: Data<Dictionary<T>>, view: View<Dictionary<T>> = new DictionaryView<T>(data.dictionary, new IntVector(data.indicies))) {
|
375 | 375 | super(data as Data<any>, view);
|
376 |
| - if (view instanceof DictionaryView) { |
| 376 | + if (data instanceof DictionaryData && view instanceof DictionaryView) { |
377 | 377 | 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>( |
382 | 385 | (idxs: Vector<Int> | null, dict: DictionaryVector<T>) =>
|
383 | 386 | !idxs ? dict.indicies! : idxs.concat(dict.indicies!),
|
384 | 387 | null
|
385 | 388 | )!;
|
| 389 | + } else { |
| 390 | + throw new TypeError(`Unrecognized DictionaryVector view`); |
386 | 391 | }
|
387 | 392 | }
|
388 | 393 | public getKey(index: number) { return this.indicies.get(index); }
|
|
0 commit comments