From 58a6b963a1a4382cf099e483a4fa2cf09c6f5f26 Mon Sep 17 00:00:00 2001 From: Kenny Daniel Date: Mon, 22 Jul 2024 12:03:02 -0700 Subject: [PATCH] Fix out of order columns in onComplete --- src/read.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/read.js b/src/read.js index 427338a..057ab01 100644 --- a/src/read.js +++ b/src/read.js @@ -110,8 +110,6 @@ export async function readRowGroup(options, rowGroup, groupStart, rowLimit) { groupBuffer = await file.slice(groupStartByte, groupEndByte) } - /** @type {any[][]} */ - const groupColumnData = [] const promises = [] // Top-level columns to assemble const { children } = getSchemaPath(metadata.schema, [])[0] @@ -182,14 +180,20 @@ export async function readRowGroup(options, rowGroup, groupStart, rowLimit) { rowStart: groupStart, rowEnd: groupStart + columnData.length, }) - // save column data only if onComplete is defined - if (options.onComplete) groupColumnData.push(columnData) })) } await Promise.all(promises) if (options.onComplete) { // transpose columns into rows - return groupColumnData[0].map((_, row) => groupColumnData.map(col => col[row])) + const groupData = new Array(rowLimit) + const includedColumns = children + .map(child => child.element.name) + .filter(name => !columns || columns.includes(name)) + .map(name => subcolumnData.get(name)) + for (let row = 0; row < rowLimit; row++) { + groupData[row] = includedColumns.map(column => column[row]) + } + return groupData } return [] }