aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormattn <mattn.jp@gmail.com>2012-02-06 20:19:51 -0800
committermattn <mattn.jp@gmail.com>2012-02-06 20:19:51 -0800
commit93ab2db4080df2323777eae75c542cdc53b6178e (patch)
treed592973524b57e0e482f4dfa7155a3972d8e97dc
parentfixed package name. (diff)
parentFor boolean values, marshal true to SQLite 1, not -1 (diff)
downloadgolite-93ab2db4080df2323777eae75c542cdc53b6178e.tar.gz
golite-93ab2db4080df2323777eae75c542cdc53b6178e.tar.xz
Merge pull request #6 from lye/master
Fix marshaling error in Go->SQLite boolean values
-rw-r--r--sqlite3.go2
-rw-r--r--sqlite3_test.go51
2 files changed, 52 insertions, 1 deletions
diff --git a/sqlite3.go b/sqlite3.go
index 088b110..d8f7756 100644
--- a/sqlite3.go
+++ b/sqlite3.go
@@ -169,7 +169,7 @@ func (s *SQLiteStmt) bind(args []interface{}) error {
rv = C.sqlite3_bind_int(s.s, n, C.int(v))
case bool:
if bool(v) {
- rv = C.sqlite3_bind_int(s.s, n, -1)
+ rv = C.sqlite3_bind_int(s.s, n, 1)
} else {
rv = C.sqlite3_bind_int(s.s, n, 0)
}
diff --git a/sqlite3_test.go b/sqlite3_test.go
index 035ffa8..a76d86f 100644
--- a/sqlite3_test.go
+++ b/sqlite3_test.go
@@ -209,3 +209,54 @@ func TestDelete(t *testing.T) {
t.Errorf("Fetched row but expected not rows")
}
}
+
+func TestBooleanRoundtrip(t *testing.T) {
+ db, err := sql.Open("sqlite3", "./foo.db")
+ if err != nil {
+ t.Errorf("Tailed to open database:", err)
+ return
+ }
+ defer os.Remove("./foo.db")
+
+ _, err = db.Exec("DROP TABLE foo")
+ _, err = db.Exec("CREATE TABLE foo(id INTEGER, value BOOL)")
+ if err != nil {
+ t.Errorf("Failed to create table:", err)
+ return
+ }
+
+ _, err = db.Exec("INSERT INTO foo(id, value) VALUES(1, ?)", true)
+ if err != nil {
+ t.Errorf("Failed to insert true value:", err)
+ return
+ }
+
+ _, err = db.Exec("INSERT INTO foo(id, value) VALUES(2, ?)", false)
+ if err != nil {
+ t.Errorf("Failed to insert false value:", err)
+ return
+ }
+
+ rows, err := db.Query("SELECT id, value FROM foo")
+ if err != nil {
+ t.Errorf("Unable to query foo table:", err)
+ return
+ }
+
+ for rows.Next() {
+ var id int
+ var value bool
+
+ if err := rows.Scan(&id, &value) ; err != nil {
+ t.Errorf("Unable to scan results:", err)
+ continue
+ }
+
+ if id == 1 && !value {
+ t.Errorf("Value for id 1 should be true, not false")
+
+ } else if id == 2 && value {
+ t.Errorf("Value for id 2 should be false, not true")
+ }
+ }
+}