davidhcoe opened a new issue, #2811:
URL: https://github.com/apache/arrow-adbc/issues/2811
### What happened?
If you run the query for
```
select TO_TIMESTAMP('9999-12-31 00:00:00') As December31,
TO_TIMESTAMP('9999-12-30 00:00:00') As December30"
```
You get incorrect values because the epoch from Snowflake () gets converted
to -4852202631933722624, which is actually March 29, 1816 at 05:56:08.066278.
I believe this is because during the call to:
```
v, err := arrow.TimestampFromTime(time.Unix(epoch[i], int64(fraction[i])),
dt.TimeUnit())
```
The correct epoch value gets passed in, but with the TimeUnit of
Nanoseconds, the internals of TimestampFromTime convert the large epoch value
to nanoseconds again, causing the int64 value to overflow to the negative
number:
```
func TimestampFromTime(val time.Time, unit TimeUnit) (Timestamp, error) {
switch unit {
case Second:
return Timestamp(val.Unix()), nil
case Millisecond:
return Timestamp(val.Unix()*1e3 + int64(val.Nanosecond())/1e6),
nil
case Microsecond:
return Timestamp(val.Unix()*1e6 + int64(val.Nanosecond())/1e3),
nil
case Nanosecond:
**return Timestamp(val.UnixNano()), nil** // <-- problematic
line
default:
return 0, fmt.Errorf("%w: unexpected timestamp unit: %s",
ErrInvalid, unit)
}
}
```
However, the Time value already comes in at the correct date. I am working
on a proposed fix.
### Stack Trace
_No response_
### How can we reproduce the bug?
_No response_
### Environment/Setup
_No response_
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]