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)