forked from mirror/go-sqlite3
Merge pull request #15 from jander/master
Handle bool values with "BOOLEAN" columns.
This commit is contained in:
commit
a407c70cfd
|
@ -284,9 +284,12 @@ func (rc *SQLiteRows) Next(dest []driver.Value) error {
|
||||||
switch C.sqlite3_column_type(rc.s.s, C.int(i)) {
|
switch C.sqlite3_column_type(rc.s.s, C.int(i)) {
|
||||||
case C.SQLITE_INTEGER:
|
case C.SQLITE_INTEGER:
|
||||||
val := int64(C.sqlite3_column_int64(rc.s.s, C.int(i)))
|
val := int64(C.sqlite3_column_int64(rc.s.s, C.int(i)))
|
||||||
if rc.decltype[i] == "timestamp" {
|
switch rc.decltype[i]{
|
||||||
|
case "timestamp":
|
||||||
dest[i] = time.Unix(val, 0)
|
dest[i] = time.Unix(val, 0)
|
||||||
} else {
|
case "boolean":
|
||||||
|
dest[i] = val>0
|
||||||
|
default:
|
||||||
dest[i] = val
|
dest[i] = val
|
||||||
}
|
}
|
||||||
case C.SQLITE_FLOAT:
|
case C.SQLITE_FLOAT:
|
||||||
|
|
107
sqlite3_test.go
107
sqlite3_test.go
|
@ -339,3 +339,110 @@ func TestTimestamp(t *testing.T) {
|
||||||
t.Errorf("Expected error from \"nonsense\" timestamp")
|
t.Errorf("Expected error from \"nonsense\" timestamp")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func TestBoolean(t *testing.T) {
|
||||||
|
db, err := sql.Open("sqlite3", "./foo.db")
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Failed to open database:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
defer os.Remove("./foo.db")
|
||||||
|
|
||||||
|
_, err = db.Exec("CREATE TABLE foo(id INTEGER, fbool BOOLEAN)")
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Failed to create table:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
bool1 := true
|
||||||
|
_, err = db.Exec("INSERT INTO foo(id, fbool) VALUES(1, ?)", bool1)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Failed to insert boolean:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
bool2 := false
|
||||||
|
_, err = db.Exec("INSERT INTO foo(id, fbool) VALUES(2, ?)", bool2)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Failed to insert boolean:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
bool3 := "nonsense"
|
||||||
|
_, err = db.Exec("INSERT INTO foo(id, fbool) VALUES(3, ?)", bool3)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Failed to insert nonsense:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
rows, err := db.Query("SELECT id, fbool FROM foo where fbool is ?", bool1)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Unable to query foo table:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
counter := 0
|
||||||
|
|
||||||
|
var id int
|
||||||
|
var fbool bool
|
||||||
|
|
||||||
|
for rows.Next(){
|
||||||
|
if err := rows.Scan(&id, &fbool); err != nil {
|
||||||
|
t.Errorf("Unable to scan results:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
counter ++
|
||||||
|
}
|
||||||
|
|
||||||
|
if counter != 1{
|
||||||
|
t.Errorf("Expected 1 row but %v", counter)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if id!=1 && fbool != true {
|
||||||
|
t.Errorf("Value for id 1 should be %v, not %v", bool1, fbool)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
rows, err = db.Query("SELECT id, fbool FROM foo where fbool is ?", bool2)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Unable to query foo table:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
counter = 0
|
||||||
|
|
||||||
|
for rows.Next(){
|
||||||
|
if err := rows.Scan(&id, &fbool); err != nil {
|
||||||
|
t.Errorf("Unable to scan results:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
counter ++
|
||||||
|
}
|
||||||
|
|
||||||
|
if counter != 1{
|
||||||
|
t.Errorf("Expected 1 row but %v", counter)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if id != 2 && fbool != false {
|
||||||
|
t.Errorf("Value for id 2 should be %v, not %v", bool2, fbool)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// make sure "nonsense" triggered an error
|
||||||
|
rows, err = db.Query("SELECT id, fbool FROM foo where id=?;", 3)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Unable to query foo table:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
rows.Next()
|
||||||
|
err = rows.Scan(&id, &fbool)
|
||||||
|
if err == nil {
|
||||||
|
t.Errorf("Expected error from \"nonsense\" bool")
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue