Skip to content

Commit 81a3ee8

Browse files
committed
Added support for statement reset and clear bindings
1 parent 5973de7 commit 81a3ee8

2 files changed

Lines changed: 62 additions & 0 deletions

File tree

goliat.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,22 @@ func newDatabaseStatement(db *Connection, handle *statementHandle) *Statement {
168168
return result
169169
}
170170

171+
func (s *Statement) Reset() error {
172+
ec := C.sqlite3_reset(s.h.ptr)
173+
if ec != C.SQLITE_OK {
174+
return s.db.newDatabaseError()
175+
}
176+
return nil
177+
}
178+
179+
func (s *Statement) ClearBindings() error {
180+
ec := C.sqlite3_clear_bindings(s.h.ptr)
181+
if ec != C.SQLITE_OK {
182+
return s.db.newDatabaseError()
183+
}
184+
return nil
185+
}
186+
171187
type Connection struct {
172188
h *connectionHandle
173189
}

goliat_test.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -488,3 +488,49 @@ func TestBindZeroBlob(t *testing.T) {
488488
assert.Equal(t, byte(0), b)
489489
}
490490
}
491+
492+
func TestStatementReset(t *testing.T) {
493+
db, err := goliat.Open(":memory:")
494+
assert.NoError(t, err)
495+
defer db.Close()
496+
497+
err = db.Exec("CREATE TABLE foo (bar TEXT)")
498+
assert.NoError(t, err)
499+
500+
stmt, err := db.Prepare("INSERT INTO foo (bar) VALUES (?)")
501+
assert.NoError(t, err)
502+
503+
stmt.Bind("baz")
504+
assert.Equal(t, goliat.DONE, stmt.Step())
505+
506+
stmt.Reset()
507+
508+
stmt.Bind("qux")
509+
assert.Equal(t, goliat.DONE, stmt.Step())
510+
511+
var count int
512+
err = db.QueryRow("SELECT COUNT(*) FROM foo WHERE bar IN (?, ?)", "baz", "qux").Scan(&count)
513+
assert.NoError(t, err)
514+
assert.Equal(t, 2, count)
515+
}
516+
517+
func TestStatementClearBindings(t *testing.T) {
518+
db, err := goliat.Open(":memory:")
519+
assert.NoError(t, err)
520+
defer db.Close()
521+
522+
err = db.Exec("CREATE TABLE foo (bar TEXT)")
523+
assert.NoError(t, err)
524+
stmt, err := db.Prepare("INSERT INTO foo (bar) VALUES (?)")
525+
assert.NoError(t, err)
526+
527+
stmt.Bind("baz")
528+
stmt.ClearBindings()
529+
stmt.Bind("qux")
530+
assert.Equal(t, goliat.DONE, stmt.Step())
531+
532+
var count int
533+
err = db.QueryRow("SELECT COUNT(*) FROM foo WHERE bar = ?", "qux").Scan(&count)
534+
assert.NoError(t, err)
535+
assert.Equal(t, 1, count)
536+
}

0 commit comments

Comments
 (0)