mirror of https://github.com/mattn/go-sqlite3.git
add a case in Next scan to fix issue 190 and issue 316
This commit is contained in:
parent
5160b48509
commit
9c8272d9f6
21
sqlite3.go
21
sqlite3.go
|
@ -1150,6 +1150,27 @@ func (rc *SQLiteRows) Next(dest []driver.Value) error {
|
|||
t = t.In(rc.s.c.loc)
|
||||
}
|
||||
dest[i] = t
|
||||
// this case is for a nullable datetime typed colomn a chance to be parsed
|
||||
// to resolve the problem in issue #190 and issue #316
|
||||
case "":
|
||||
var t time.Time
|
||||
s = strings.TrimSuffix(s, "Z")
|
||||
for _, format := range SQLiteTimestampFormats {
|
||||
if timeVal, err = time.ParseInLocation(format, s, time.UTC); err == nil {
|
||||
t = timeVal
|
||||
break
|
||||
}
|
||||
}
|
||||
// if not parsed as a datetime type successfully, do as the default case does
|
||||
if err != nil {
|
||||
dest[i] = []byte(s)
|
||||
} else {
|
||||
if rc.s.c.loc != nil {
|
||||
t = t.In(rc.s.c.loc)
|
||||
}
|
||||
dest[i] = t
|
||||
}
|
||||
|
||||
default:
|
||||
dest[i] = []byte(s)
|
||||
}
|
||||
|
|
|
@ -1111,7 +1111,7 @@ func TestDateTimeNow(t *testing.T) {
|
|||
defer db.Close()
|
||||
|
||||
var d time.Time
|
||||
err = db.QueryRow("SELECT datetime('now')").Scan(TimeStamp{&d})
|
||||
err = db.QueryRow("SELECT datetime('now')").Scan(&d)
|
||||
if err != nil {
|
||||
t.Fatal("Failed to scan datetime:", err)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue