Skip to content

Commit

Permalink
add a case in Next scan to fix issue 190 and issue 316
Browse files Browse the repository at this point in the history
  • Loading branch information
B1nj0y committed Oct 16, 2017
1 parent 5160b48 commit 9c8272d
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 1 deletion.
21 changes: 21 additions & 0 deletions sqlite3.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand Down
2 changes: 1 addition & 1 deletion sqlite3_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand Down

0 comments on commit 9c8272d

Please sign in to comment.