From d9e7576acf68be8413097aa1ffd7d53989262080 Mon Sep 17 00:00:00 2001 From: mattn Date: Thu, 26 Jun 2014 03:54:09 +0900 Subject: Fix error on Execer. Close #124 --- sqlite3.go | 87 ++++++++++++++++++++++++++++++++------------------------------ 1 file changed, 45 insertions(+), 42 deletions(-) (limited to 'sqlite3.go') diff --git a/sqlite3.go b/sqlite3.go index 0ce9c30..98dcc0b 100644 --- a/sqlite3.go +++ b/sqlite3.go @@ -144,52 +144,55 @@ func (c *SQLiteConn) lastError() Error { // Implements Execer func (c *SQLiteConn) Exec(query string, args []driver.Value) (driver.Result, error) { - if len(args) == 0 { - return c.exec(query) - } - - for { - s, err := c.Prepare(query) - if err != nil { - return nil, err - } - na := s.NumInput() - res, err := s.Exec(args[:na]) - if err != nil && err != driver.ErrSkip { - s.Close() - return nil, err - } - args = args[na:] - tail := s.(*SQLiteStmt).t - if tail == "" { - return res, nil - } - s.Close() - query = tail - } + if len(args) == 0 { + return c.exec(query) + } + + for { + s, err := c.Prepare(query) + if err != nil { + return nil, err + } + var res driver.Result + if s.(*SQLiteStmt).s != nil { + na := s.NumInput() + res, err = s.Exec(args[:na]) + if err != nil && err != driver.ErrSkip { + s.Close() + return nil, err + } + args = args[na:] + } + tail := s.(*SQLiteStmt).t + if tail == "" { + return res, nil + } + s.Close() + query = tail + } } // Implements Queryer func (c *SQLiteConn) Query(query string, args []driver.Value) (driver.Rows, error) { - for { - s, err := c.Prepare(query) - if err != nil { - return nil, err - } - na := s.NumInput() - rows, err := s.Query(args[:na]) - if err != nil && err != driver.ErrSkip { - s.Close() - return nil, err - } - args = args[na:] - tail := s.(*SQLiteStmt).t - if tail == "" { - return rows, nil - } - s.Close() - query = tail - } + for { + s, err := c.Prepare(query) + if err != nil { + return nil, err + } + na := s.NumInput() + rows, err := s.Query(args[:na]) + if err != nil && err != driver.ErrSkip { + s.Close() + return nil, err + } + args = args[na:] + tail := s.(*SQLiteStmt).t + if tail == "" { + return rows, nil + } + s.Close() + query = tail + } } func (c *SQLiteConn) exec(cmd string) (driver.Result, error) { -- cgit v1.2.3