apache / apache/arrow-js

[JS] Regression in roundtripping JS Date objects from apache-arrow@15 to apache-arrow@16

Open
#53 1 comment 0 reactions 0 assignees View on GitHub
Type: bug
Dominant language
TypeScript
Stars
112
Forks
23
Avg merge
21h 18m
Merged PRs (30d)
8

Description

### Describe the bug, including details regarding any error messages, version, and platform.

The [Create a Table from JavaScript arrays](https://arrow.apache.org/docs/js/#md:create-a-table-from-javascript-arrays) example from the documentation is sufficient:

```js
import { tableFromArrays } from 'apache-arrow';

const LENGTH = 2000;

const rainAmounts = Float32Array.from(
{ length: LENGTH },
() => Number((Math.random() * 20).toFixed(1)));

const rainDates = Array.from(
{ length: LENGTH },
(_, i) => new Date(Date.now() - 1000 * 60 * 60 * 24 * i));

const rainfall = tableFromArrays({
precipitation: rainAmounts,
date: rainDates
});

console.table([...rainfall]);
```

When running this code with `apache-arrow@15.0.2` installed, the date column in the resulting table is a column of JavaScript Date objects. With `apache-arrow@16.0.0` installed, it is a column of JavaScript numbers representing epoch timestamps. This is a *surprising* result, I think; while there's no reason why Arrow would be required to map Date objects to something which maps back to Date objects, it is an unusual choice which is not documented and which has clearly been changed recently.

Tested under Node 20.15.0 on Apple Silicon, but I have no reason to believe this is platform-specific.

PR apache/arrow#40892 appears to have gone through some iteration after I tested it in , and these follow-up changes caused this regression. Perhaps it's desirable—but I'm not quite convinced this was the correct outcome? Feel free to close as by design (but I think it would be worth documenting all of the. type mappings going from JS to Arrow and back, at the very least).

### Component(s)

JavaScript

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.