|
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