From cc353e4848448bbe729f6c058c125d9c588565ec Mon Sep 17 00:00:00 2001 From: Nuno Cruces Date: Fri, 19 Sep 2025 11:13:23 +0100 Subject: [PATCH] Time improvements. --- driver/driver.go | 20 ++++++++++++-------- ext/uuid/uuid.go | 2 +- time.go | 2 +- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/driver/driver.go b/driver/driver.go index 27496f6..37b5ac5 100644 --- a/driver/driver.go +++ b/driver/driver.go @@ -834,20 +834,24 @@ func (r *rows) Next(dest []driver.Value) error { func (r *rows) ScanColumn(dest any, index int) error { // notest // Go 1.26 - var ptr *time.Time + var tm *time.Time + var ok *bool switch d := dest.(type) { case *time.Time: - ptr = d + tm = d case *sql.NullTime: - ptr = &d.Time + tm = &d.Time + ok = &d.Valid case *sql.Null[time.Time]: - ptr = &d.V + tm = &d.V + ok = &d.Valid default: return driver.ErrSkip } - if t := r.Stmt.ColumnTime(index, r.tmRead); !t.IsZero() { - *ptr = t - return nil + *tm = r.Stmt.ColumnTime(index, r.tmRead) + err := r.Stmt.Err() + if ok != nil && err == nil { + *ok = r.stmt.ColumnType(index) != sqlite3.NULL } - return driver.ErrSkip + return err } diff --git a/ext/uuid/uuid.go b/ext/uuid/uuid.go index febf4de..bf62de9 100644 --- a/ext/uuid/uuid.go +++ b/ext/uuid/uuid.go @@ -194,7 +194,7 @@ func timestamp(ctx sqlite3.Context, arg ...sqlite3.Value) { switch u.Version() { case 1, 2, 6, 7: ctx.ResultTime( - time.Unix(u.Time().UnixTime()), + time.Unix(u.Time().UnixTime()).UTC(), sqlite3.TimeFormatDefault) } } diff --git a/time.go b/time.go index d9c516c..19bcd2b 100644 --- a/time.go +++ b/time.go @@ -94,7 +94,7 @@ func (f TimeFormat) Encode(t time.Time) any { case TimeFormatUnix: return t.Unix() case TimeFormatUnixFrac: - return float64(t.Unix()) + float64(t.Nanosecond())*1e-9 + return math.FMA(1e-9, float64(t.Nanosecond()), float64(t.Unix())) case TimeFormatUnixMilli: return t.UnixMilli() case TimeFormatUnixMicro: