Skip to content

Commit ecacb2b

Browse files
committed
demo: upgrade hightable
1 parent d8cc46b commit ecacb2b

File tree

8 files changed

+46
-37
lines changed

8 files changed

+46
-37
lines changed

demo/App.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ function parquetDataFrame(from: AsyncBufferFrom, metadata: FileMetaData): DataFr
102102
*/
103103
rows(rowStart, rowEnd, orderBy) {
104104
console.log(`reading rows ${rowStart}-${rowEnd}`, orderBy)
105-
return parquetQueryWorker({ asyncBuffer: from, metadata, rowStart, rowEnd, orderBy })
105+
return parquetQueryWorker({ from, metadata, rowStart, rowEnd, orderBy })
106106
},
107107
sortable: true,
108108
}

demo/bundle.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

demo/bundle.min.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

demo/workers/parquetWorker.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@ import { parquetQuery } from '../../src/query.js'
33
import { asyncBufferFrom } from './parquetWorkerClient.js'
44

55
self.onmessage = async ({ data }) => {
6-
const { metadata, asyncBuffer, rowStart, rowEnd, orderBy, queryId, chunks } = data
7-
const file = await asyncBufferFrom(asyncBuffer)
6+
const { metadata, from, rowStart, rowEnd, orderBy, columns, queryId, chunks } = data
7+
const file = await asyncBufferFrom(from)
88
/**
99
* @typedef {import('../../src/hyparquet.js').ColumnData} ColumnData
1010
* @type {((chunk: ColumnData) => void) | undefined}
1111
*/
1212
const onChunk = chunks ? chunk => self.postMessage({ chunk, queryId }) : undefined
1313
try {
1414
const result = await parquetQuery({
15-
metadata, file, rowStart, rowEnd, orderBy, compressors, onChunk,
15+
metadata, file, rowStart, rowEnd, orderBy, columns, compressors, onChunk,
1616
})
1717
self.postMessage({ result, queryId })
1818
} catch (error) {

demo/workers/parquetWorkerClient.ts

Lines changed: 32 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -15,47 +15,56 @@ export type AsyncBufferFrom = AsyncBufferFromFile | AsyncBufferFromUrl
1515

1616
// Same as ParquetReadOptions, but AsyncBufferFrom instead of AsyncBuffer
1717
interface ParquetReadWorkerOptions extends Omit<ParquetReadOptions, 'file'> {
18-
asyncBuffer: AsyncBufferFrom
18+
from: AsyncBufferFrom
1919
orderBy?: string
2020
}
2121

2222
let worker: Worker | undefined
2323
let nextQueryId = 0
24-
const pending = new Map<number, { resolve: (value: any) => void, reject: (error: any) => void }>()
24+
interface QueryAgent {
25+
resolve: (value: any) => void
26+
reject: (error: any) => void
27+
onChunk?: (chunk: any) => void
28+
}
29+
const pending = new Map<number, QueryAgent>()
30+
31+
function getWorker() {
32+
if (!worker) {
33+
worker = new Worker(new URL('demo/workers/worker.min.js', import.meta.url))
34+
worker.onmessage = ({ data }) => {
35+
const { resolve, reject, onChunk } = pending.get(data.queryId)!
36+
if (data.error) {
37+
reject(data.error)
38+
} else if (data.result) {
39+
resolve(data.result)
40+
} else if (data.chunk) {
41+
onChunk?.(data.chunk)
42+
} else {
43+
reject(new Error('Unexpected message from worker'))
44+
}
45+
}
46+
}
47+
return worker
48+
}
2549

2650
/**
2751
* Presents almost the same interface as parquetRead, but runs in a worker.
2852
* This is useful for reading large parquet files without blocking the main thread.
29-
* Instead of taking an AsyncBuffer, it takes a FileContent, because it needs
53+
* Instead of taking an AsyncBuffer, it takes a AsyncBufferFrom, because it needs
3054
* to be serialized to the worker.
3155
*/
3256
export function parquetQueryWorker(
33-
{ metadata, asyncBuffer, rowStart, rowEnd, orderBy, onChunk }: ParquetReadWorkerOptions
57+
{ metadata, from, rowStart, rowEnd, orderBy, onChunk }: ParquetReadWorkerOptions
3458
): Promise<Record<string, any>[]> {
3559
return new Promise((resolve, reject) => {
3660
const queryId = nextQueryId++
37-
pending.set(queryId, { resolve, reject })
38-
// Create a worker
39-
if (!worker) {
40-
worker = new Worker(new URL('demo/workers/worker.min.js', import.meta.url))
41-
worker.onmessage = ({ data }) => {
42-
const { resolve, reject } = pending.get(data.queryId)!
43-
// Convert postmessage data to callbacks
44-
if (data.error) {
45-
reject(data.error)
46-
} else if (data.result) {
47-
resolve(data.result)
48-
} else if (data.chunk) {
49-
onChunk?.(data.chunk)
50-
} else {
51-
reject(new Error('Unexpected message from worker'))
52-
}
53-
}
54-
}
61+
pending.set(queryId, { resolve, reject, onChunk })
62+
const worker = getWorker()
63+
5564
// If caller provided an onChunk callback, worker will send chunks as they are parsed
5665
const chunks = onChunk !== undefined
5766
worker.postMessage({
58-
queryId, metadata, asyncBuffer, rowStart, rowEnd, orderBy, chunks
67+
queryId, metadata, from, rowStart, rowEnd, orderBy, chunks,
5968
})
6069
})
6170
}

demo/workers/worker.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

demo/workers/worker.min.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,20 +32,20 @@
3232
"@rollup/plugin-replace": "6.0.1",
3333
"@rollup/plugin-terser": "0.4.4",
3434
"@rollup/plugin-typescript": "12.1.1",
35-
"@types/node": "22.7.9",
35+
"@types/node": "22.8.2",
3636
"@types/react": "18.3.12",
3737
"@types/react-dom": "18.3.1",
38-
"@vitest/coverage-v8": "2.1.3",
38+
"@vitest/coverage-v8": "2.1.4",
3939
"eslint": "9.13.0",
4040
"eslint-plugin-jsdoc": "50.4.3",
41-
"hightable": "0.6.0",
41+
"hightable": "0.6.3",
4242
"http-server": "14.1.1",
4343
"hyparquet-compressors": "0.1.4",
4444
"react": "18.3.1",
4545
"react-dom": "18.3.1",
46-
"rollup": "4.24.0",
46+
"rollup": "4.24.2",
4747
"typescript": "5.6.3",
48-
"typescript-eslint": "8.11.0",
49-
"vitest": "2.1.3"
48+
"typescript-eslint": "8.12.1",
49+
"vitest": "2.1.4"
5050
}
5151
}

0 commit comments

Comments
 (0)