Timothy Higinbottom created ARROW-15852:
-------------------------------------------
Summary: Table getByteLength and indexOf don't work
Key: ARROW-15852
URL: https://issues.apache.org/jira/browse/ARROW-15852
Project: Apache Arrow
Issue Type: Bug
Components: JavaScript
Affects Versions: 7.0.0
Reporter: Timothy Higinbottom
The functions {{table.getByteLength() and table.indexOf() }}don't return the
correct values.
They are bound dynamically to the Table class, in a way I don't fully
understand, with the following code:
[https://github.com/apache/arrow/blob/1b796ec3f9caeb5e86e3348ba940bef8d95915c5/js/src/table.ts#L378-L390]
The other functions like that, {{get(), set(), }}and{{ isValid() }}all seem to
work. However, {{getByteLength() and indexOf() }}return the
placeholder/sentinel values of 0 and -1 respectively that are defined in the
no-op code here:
[https://github.com/apache/arrow/blob/1b796ec3f9caeb5e86e3348ba940bef8d95915c5/js/src/table.ts#L207-L221,]
which I assume is to generate the right type definitions, and thus
documentation.
It's fairly simple for a user to implement the right logic themselves (at least
for getByteLength) and it's a quick patch to define the functions normally
instead of on the prototype, e.g.:
{{/**}}
{{ * Get the size in bytes of an element by index.}}
{{ * @param index The index at which to get the byteLength.}}
{{ */}}
{{// @ts-ignore}}
{{public getByteLength(index: number): number \{ return
this.data[index].byteLength; }}}
{{ /**}}
{{ * Get the size in bytes of a table.}}
{{ */}}
{{//@ts-ignore}}
{{public getByteLength(): number { }}
{{return this.data.map((batch) => batch.byteLength).reduce((sum, newLength) =>
sum + newLength);}}
{{ }}}
Here's a Github repo of a minimal reproduction of the issue in NodeJS:
https://github.com/alexkreidler/apache-arrow-js-small-bug
And an observable notebook for in the browser (although I couldn't get ESM
working): [https://observablehq.com/@08027ecfa2b2f7bb/arrow-7-canary]
Thanks to all for your work on Arrow!
--
This message was sent by Atlassian Jira
(v8.20.1#820001)