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)
|
t = t.In(rc.s.c.loc)
|
||||||
}
|
}
|
||||||
dest[i] = t
|
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:
|
default:
|
||||||
dest[i] = []byte(s)
|
dest[i] = []byte(s)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1111,7 +1111,7 @@ func TestDateTimeNow(t *testing.T) {
|
||||||
defer db.Close()
|
defer db.Close()
|
||||||
|
|
||||||
var d time.Time
|
var d time.Time
|
||||||
err = db.QueryRow("SELECT datetime('now')").Scan(TimeStamp{&d})
|
err = db.QueryRow("SELECT datetime('now')").Scan(&d)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal("Failed to scan datetime:", err)
|
t.Fatal("Failed to scan datetime:", err)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue