Skip to content

Commit d9e7576

Browse files
committed
Fix error on Execer. Close #124
1 parent d56eb93 commit d9e7576

File tree

2 files changed

+67
-66
lines changed

2 files changed

+67
-66
lines changed

sqlite3.go

Lines changed: 45 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -144,52 +144,55 @@ func (c *SQLiteConn) lastError() Error {
144144

145145
// Implements Execer
146146
func (c *SQLiteConn) Exec(query string, args []driver.Value) (driver.Result, error) {
147-
if len(args) == 0 {
148-
return c.exec(query)
149-
}
150-
151-
for {
152-
s, err := c.Prepare(query)
153-
if err != nil {
154-
return nil, err
155-
}
156-
na := s.NumInput()
157-
res, err := s.Exec(args[:na])
158-
if err != nil && err != driver.ErrSkip {
159-
s.Close()
160-
return nil, err
161-
}
162-
args = args[na:]
163-
tail := s.(*SQLiteStmt).t
164-
if tail == "" {
165-
return res, nil
166-
}
167-
s.Close()
168-
query = tail
169-
}
147+
if len(args) == 0 {
148+
return c.exec(query)
149+
}
150+
151+
for {
152+
s, err := c.Prepare(query)
153+
if err != nil {
154+
return nil, err
155+
}
156+
var res driver.Result
157+
if s.(*SQLiteStmt).s != nil {
158+
na := s.NumInput()
159+
res, err = s.Exec(args[:na])
160+
if err != nil && err != driver.ErrSkip {
161+
s.Close()
162+
return nil, err
163+
}
164+
args = args[na:]
165+
}
166+
tail := s.(*SQLiteStmt).t
167+
if tail == "" {
168+
return res, nil
169+
}
170+
s.Close()
171+
query = tail
172+
}
170173
}
171174

172175
// Implements Queryer
173176
func (c *SQLiteConn) Query(query string, args []driver.Value) (driver.Rows, error) {
174-
for {
175-
s, err := c.Prepare(query)
176-
if err != nil {
177-
return nil, err
178-
}
179-
na := s.NumInput()
180-
rows, err := s.Query(args[:na])
181-
if err != nil && err != driver.ErrSkip {
182-
s.Close()
183-
return nil, err
184-
}
185-
args = args[na:]
186-
tail := s.(*SQLiteStmt).t
187-
if tail == "" {
188-
return rows, nil
189-
}
190-
s.Close()
191-
query = tail
192-
}
177+
for {
178+
s, err := c.Prepare(query)
179+
if err != nil {
180+
return nil, err
181+
}
182+
na := s.NumInput()
183+
rows, err := s.Query(args[:na])
184+
if err != nil && err != driver.ErrSkip {
185+
s.Close()
186+
return nil, err
187+
}
188+
args = args[na:]
189+
tail := s.(*SQLiteStmt).t
190+
if tail == "" {
191+
return rows, nil
192+
}
193+
s.Close()
194+
query = tail
195+
}
193196
}
194197

195198
func (c *SQLiteConn) exec(cmd string) (driver.Result, error) {

sqlite3_test.go

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
package sqlite3
22

33
import (
4-
"./sqltest"
54
"crypto/rand"
65
"database/sql"
76
"encoding/hex"
87
"os"
98
"path/filepath"
109
"testing"
1110
"time"
11+
12+
"./sqltest"
1213
)
1314

1415
func TempFilename() string {
@@ -639,29 +640,26 @@ func TestSuite(t *testing.T) {
639640

640641
// TODO: Execer & Queryer currently disabled
641642
// https://github.com/mattn/go-sqlite3/issues/82
642-
//func TestExecer(t *testing.T) {
643-
// tempFilename := TempFilename()
644-
// db, err := sql.Open("sqlite3", tempFilename)
645-
// if err != nil {
646-
// t.Fatal("Failed to open database:", err)
647-
// }
648-
// defer os.Remove(tempFilename)
649-
// defer db.Close()
650-
//
651-
// _, err = db.Exec(`
652-
// create table foo (id integer);
653-
// insert into foo(id) values(?);
654-
// insert into foo(id) values(?);
655-
// insert into foo(id) values(?);
656-
// `, 1, 2, 3)
657-
// if err != nil {
658-
// t.Error("Failed to call db.Exec:", err)
659-
// }
660-
// if err != nil {
661-
// t.Error("Failed to call res.RowsAffected:", err)
662-
// }
663-
//}
664-
//
643+
func TestExecer(t *testing.T) {
644+
tempFilename := TempFilename()
645+
db, err := sql.Open("sqlite3", tempFilename)
646+
if err != nil {
647+
t.Fatal("Failed to open database:", err)
648+
}
649+
defer os.Remove(tempFilename)
650+
defer db.Close()
651+
652+
_, err = db.Exec(`
653+
create table foo (id integer); -- one comment
654+
insert into foo(id) values(?);
655+
insert into foo(id) values(?);
656+
insert into foo(id) values(?); -- another comment
657+
`, 1, 2, 3)
658+
if err != nil {
659+
t.Error("Failed to call db.Exec:", err)
660+
}
661+
}
662+
665663
//func TestQueryer(t *testing.T) {
666664
// tempFilename := TempFilename()
667665
// db, err := sql.Open("sqlite3", tempFilename)

0 commit comments

Comments
 (0)