Time improvements.

This commit is contained in:
Nuno Cruces
2025-09-19 11:13:23 +01:00
parent c3ebb04045
commit cc353e4848
3 changed files with 14 additions and 10 deletions

View File

@@ -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
}

View File

@@ -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)
}
}

View File

@@ -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: