diff options
author | mattn <mattn.jp@gmail.com> | 2013-09-12 09:11:01 +0900 |
---|---|---|
committer | mattn <mattn.jp@gmail.com> | 2013-09-12 09:11:01 +0900 |
commit | 7dadd98d75d57061b14288a4b934ce5f8af804fb (patch) | |
tree | a8394be7fdd498151d577ea84382e7584d038067 | |
parent | Fixes test (diff) | |
download | golite-7dadd98d75d57061b14288a4b934ce5f8af804fb.tar.gz golite-7dadd98d75d57061b14288a4b934ce5f8af804fb.tar.xz |
Execer/Queryer should use transaction
-rw-r--r-- | sqlite3.go | 14 |
1 files changed, 14 insertions, 0 deletions
@@ -136,20 +136,27 @@ func (c *SQLiteConn) AutoCommit() bool { // Implements Execer func (c *SQLiteConn) Exec(query string, args []driver.Value) (driver.Result, error) { + tx, err := c.Begin() + if err != nil { + return nil, err + } for { s, err := c.Prepare(query) if err != nil { + tx.Rollback() return nil, err } na := s.NumInput() res, err := s.Exec(args[:na]) if err != nil && err != driver.ErrSkip { + tx.Rollback() s.Close() return nil, err } args = args[na:] tail := s.(*SQLiteStmt).t if tail == "" { + tx.Commit() return res, nil } s.Close() @@ -159,20 +166,27 @@ func (c *SQLiteConn) Exec(query string, args []driver.Value) (driver.Result, err // Implements Queryer func (c *SQLiteConn) Query(query string, args []driver.Value) (driver.Rows, error) { + tx, err := c.Begin() + if err != nil { + return nil, err + } for { s, err := c.Prepare(query) if err != nil { + tx.Rollback() return nil, err } na := s.NumInput() rows, err := s.Query(args[:na]) if err != nil && err != driver.ErrSkip { + tx.Rollback() s.Close() return nil, err } args = args[na:] tail := s.(*SQLiteStmt).t if tail == "" { + tx.Commit() return rows, nil } s.Close() |