diff options
author | Yasuhiro Matsumoto <mattn.jp@gmail.com> | 2016-11-06 20:46:27 +0900 |
---|---|---|
committer | Yasuhiro Matsumoto <mattn.jp@gmail.com> | 2016-11-06 20:46:27 +0900 |
commit | deed33aec73ebdd869ff5fc6dcb9a3bd5a039a7f (patch) | |
tree | 010349e8e274d87e93f95317c747027226d6e136 | |
parent | cancel (diff) | |
download | golite-deed33aec73ebdd869ff5fc6dcb9a3bd5a039a7f.tar.gz golite-deed33aec73ebdd869ff5fc6dcb9a3bd5a039a7f.tar.xz |
cancel
-rw-r--r-- | sqlite3.go | 12 |
1 files changed, 12 insertions, 0 deletions
@@ -817,6 +817,17 @@ func (s *SQLiteStmt) exec(ctx context.Context, args []namedValue) (driver.Result C.sqlite3_clear_bindings(s.s) return nil, err } + + done := make(chan struct{}) + defer close(done) + go func() { + select { + case <-ctx.Done(): + C.sqlite3_interrupt(s.c.db) + case <-done: + } + }() + var rowid, changes C.longlong rv := C._sqlite3_step(s.s, &rowid, &changes) if rv != C.SQLITE_ROW && rv != C.SQLITE_OK && rv != C.SQLITE_DONE { @@ -825,6 +836,7 @@ func (s *SQLiteStmt) exec(ctx context.Context, args []namedValue) (driver.Result C.sqlite3_clear_bindings(s.s) return nil, err } + return &SQLiteResult{int64(rowid), int64(changes)}, nil } |