Skip to content

Commit

Permalink
Merge pull request #28 from lye/master
Browse files Browse the repository at this point in the history
Add support for extracting 2006-01-02 formatted timestamps.
  • Loading branch information
mattn committed Nov 5, 2012
2 parents 76996fe + dcd44f5 commit 68952ca
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 1 deletion.
6 changes: 5 additions & 1 deletion sqlite3.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import (
)

const SQLiteTimestampFormat = "2006-01-02 15:04:05"
const SQLiteDateFormat = "2006-01-02"

func init() {
sql.Register("sqlite3", &SQLiteDriver{})
Expand Down Expand Up @@ -313,7 +314,10 @@ func (rc *SQLiteRows) Next(dest []driver.Value) error {
if rc.decltype[i] == "timestamp" {
dest[i], err = time.Parse(SQLiteTimestampFormat, s)
if err != nil {
return err
dest[i], err = time.Parse(SQLiteDateFormat, s)
if err != nil {
return err
}
}
} else {
dest[i] = s
Expand Down
60 changes: 60 additions & 0 deletions sqlite3_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -400,3 +400,63 @@ func TestBoolean(t *testing.T) {
t.Error("Expected error from \"nonsense\" bool")
}
}

func TestDateOnlyTimestamp(t *testing.T) {
// make sure that timestamps without times are extractable. these are generated when
// e.g., you use the sqlite `DATE()` built-in.

db, er := sql.Open("sqlite3", "db.sqlite")
if er != nil {
t.Fatal(er)
}
defer func() {
db.Close()
os.Remove("db.sqlite")
}()

_, er = db.Exec(`
CREATE TABLE test
( entry_id INTEGER PRIMARY KEY AUTOINCREMENT
, entry_published TIMESTAMP NOT NULL
)
`)
if er != nil {
t.Fatal(er)
}

_, er = db.Exec(`
INSERT INTO test VALUES ( 1, '2012-11-04')
`)
if er != nil {
t.Fatal(er)
}

rows, er := db.Query("SELECT entry_id, entry_published FROM test")
if er != nil {
t.Fatal(er)
}
defer rows.Close()

if !rows.Next() {
if er := rows.Err() ; er != nil {
t.Fatal(er)
} else {
t.Fatalf("Unable to extract row containing date-only timestamp")
}
}

var entryId int64
var entryPublished time.Time

if er := rows.Scan(&entryId, &entryPublished) ; er != nil {
t.Fatal(er)
}

if entryId != 1 {
t.Errorf("EntryId does not match inserted value")
}

if entryPublished.Year() != 2012 || entryPublished.Month() != 11 || entryPublished.Day() != 4 {
t.Errorf("Extracted time does not match inserted value")
}
}

0 comments on commit 68952ca

Please sign in to comment.