From 9ead679e9419480ce159b9d8b6aa18ed20c9488f Mon Sep 17 00:00:00 2001 From: sjkim Date: Sat, 21 Mar 2026 10:48:49 +0900 Subject: [PATCH] NULL handling fix --- mods/bridge/internal/base.go | 9 +++++---- mods/bridge/util_datum.go | 6 +++++- mods/server/server.go | 2 +- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/mods/bridge/internal/base.go b/mods/bridge/internal/base.go index b1d8072bd..97f6bc408 100644 --- a/mods/bridge/internal/base.go +++ b/mods/bridge/internal/base.go @@ -4,7 +4,6 @@ import ( "context" "database/sql" "math" - "time" "github.com/machbase/neo-client/api" ) @@ -209,7 +208,7 @@ func scanTypeToDataType(sqlType string) api.DataType { return api.DataTypeFloat64 case "string", "sql.NullString": return api.DataTypeString - case "time.Time", "sql.NullTime": + case "time.Time", "sql.NullTime", "*time.Time": return api.DataTypeDatetime case "[]byte", "sql.RawBytes": return api.DataTypeBinary @@ -245,7 +244,7 @@ func (b *SqlBridgeBase) NewScanType(reflectType string, databaseTypeName string) case "sql.NullString": return new(string) case "sql.NullTime": - return new(time.Time) + return new(sql.NullTime) case "sql.RawBytes": return new([]byte) case "[]uint8": @@ -259,7 +258,9 @@ func (b *SqlBridgeBase) NewScanType(reflectType string, databaseTypeName string) case "string": return new(string) case "time.Time": - return new(time.Time) + return new(sql.NullTime) + case "*time.Time": + return new(sql.NullTime) } return nil } diff --git a/mods/bridge/util_datum.go b/mods/bridge/util_datum.go index c61991413..14ae5c315 100644 --- a/mods/bridge/util_datum.go +++ b/mods/bridge/util_datum.go @@ -51,7 +51,11 @@ func ConvertToDatum(arr ...any) ([]*bridgerpc.Datum, error) { case time.Time: ret[i] = &bridgerpc.Datum{Value: &bridgerpc.Datum_VTime{VTime: v.UnixNano()}} case *time.Time: - ret[i] = &bridgerpc.Datum{Value: &bridgerpc.Datum_VTime{VTime: v.UnixNano()}} + if v == nil { + ret[i] = &bridgerpc.Datum{Value: &bridgerpc.Datum_VNull{VNull: true}} + } else { + ret[i] = &bridgerpc.Datum{Value: &bridgerpc.Datum_VTime{VTime: v.UnixNano()}} + } case *sql.NullBool: if v.Valid { ret[i] = &bridgerpc.Datum{Value: &bridgerpc.Datum_VBool{VBool: v.Bool}} diff --git a/mods/server/server.go b/mods/server/server.go index 2c41fce2f..03e19f5a7 100644 --- a/mods/server/server.go +++ b/mods/server/server.go @@ -1223,7 +1223,7 @@ func (s *Server) fetchResultBridge(handle string) (BridgeQueryRow, error) { case *bridgerpc.Datum_VBool: ret.Values = append(ret.Values, val.VBool) case *bridgerpc.Datum_VTime: - t := time.UnixMilli(val.VTime) + t := time.Unix(0, val.VTime).In(time.Local).Format("2006-01-02 15:04:05") ret.Values = append(ret.Values, t) case *bridgerpc.Datum_VIp: ret.Values = append(ret.Values, val.VIp)