You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@arrow.apache.org by "Dominik Moritz (Jira)" <ji...@apache.org> on 2022/04/01 17:40:00 UTC
[jira] [Resolved] (ARROW-15852) [JS] Table getByteLength and indexOf don't work
[ https://issues.apache.org/jira/browse/ARROW-15852?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Dominik Moritz resolved ARROW-15852.
------------------------------------
Fix Version/s: 8.0.0
Resolution: Fixed
Issue resolved by pull request 12771
[https://github.com/apache/arrow/pull/12771]
> [JS] 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
> Assignee: Paul Taylor
> Priority: Major
> Labels: pull-request-available
> Fix For: 8.0.0
>
> Time Spent: 20m
> Remaining Estimate: 0h
>
> 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.:
>
> {code:java}
> /**
> * 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);
> } {code}
> I'd be happy to send this as a PR if that's an OK alternative to the way it's currently implemented.
> 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)