aboutsummaryrefslogtreecommitdiff
path: root/sqlite3.go
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2013-05-11 21:43:31 +0900
committermattn <mattn.jp@gmail.com>2013-05-11 21:45:25 +0900
commitd93259577c756481bb6f913d93c9e5a831f13c84 (patch)
treebad642cccff8af6ed786425a3a4d59e05cd40ea9 /sqlite3.go
parentTreat int as 64bit (diff)
downloadgolite-d93259577c756481bb6f913d93c9e5a831f13c84.tar.gz
golite-d93259577c756481bb6f913d93c9e5a831f13c84.tar.xz
the SQLiteResult refers to the connection after it should no longer be referring to the connection. The fix is to fetch the answers before Exec returns, just in case someone wants them.
Diffstat (limited to 'sqlite3.go')
-rw-r--r--sqlite3.go14
1 files changed, 10 insertions, 4 deletions
diff --git a/sqlite3.go b/sqlite3.go
index 660982d..e9cb790 100644
--- a/sqlite3.go
+++ b/sqlite3.go
@@ -99,7 +99,8 @@ type SQLiteStmt struct {
// Result struct.
type SQLiteResult struct {
- s *SQLiteStmt
+ id int64
+ changes int64
}
// Rows struct.
@@ -295,12 +296,12 @@ func (s *SQLiteStmt) Query(args []driver.Value) (driver.Rows, error) {
// Return last inserted ID.
func (r *SQLiteResult) LastInsertId() (int64, error) {
- return int64(C._sqlite3_last_insert_rowid(r.s.c.db)), nil
+ return r.id, nil
}
// Return how many rows affected.
func (r *SQLiteResult) RowsAffected() (int64, error) {
- return int64(C._sqlite3_changes(r.s.c.db)), nil
+ return r.changes, nil
}
// Execute the statement with arguments. Return result object.
@@ -312,7 +313,12 @@ func (s *SQLiteStmt) Exec(args []driver.Value) (driver.Result, error) {
if rv != C.SQLITE_ROW && rv != C.SQLITE_OK && rv != C.SQLITE_DONE {
return nil, errors.New(C.GoString(C.sqlite3_errmsg(s.c.db)))
}
- return &SQLiteResult{s}, nil
+
+ res := &SQLiteResult{
+ int64(C._sqlite3_last_insert_rowid(s.c.db)),
+ int64(C._sqlite3_changes(s.c.db)),
+ }
+ return res, nil
}
// Close the rows.