diff --git a/sqlite3.go b/sqlite3.go index c3abc78..9993b18 100644 --- a/sqlite3.go +++ b/sqlite3.go @@ -134,65 +134,67 @@ func (c *SQLiteConn) AutoCommit() bool { return int(C.sqlite3_get_autocommit(c.db)) != 0 } -// 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() - query = tail - } -} - -// 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() - query = tail - } -} +// TODO: Execer & Queryer currently disabled +// https://github.com/mattn/go-sqlite3/issues/82 +//// 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() +// query = tail +// } +//} +// +//// 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() +// query = tail +// } +//} func (c *SQLiteConn) exec(cmd string) error { pcmd := C.CString(cmd) diff --git a/sqlite3_test.go b/sqlite3_test.go index 5b4a05f..ec86aef 100644 --- a/sqlite3_test.go +++ b/sqlite3_test.go @@ -580,67 +580,69 @@ func TestTransaction(t *testing.T) { } } -func TestExecer(t *testing.T) { - tempFilename := TempFilename() - db, err := sql.Open("sqlite3", tempFilename) - if err != nil { - t.Fatal("Failed to open database:", err) - } - defer os.Remove(tempFilename) - defer db.Close() - - _, err = db.Exec(` - create table foo (id integer); - insert into foo(id) values(?); - insert into foo(id) values(?); - insert into foo(id) values(?); - `, 1, 2, 3) - if err != nil { - t.Error("Failed to call db.Exec:", err) - } - if err != nil { - t.Error("Failed to call res.RowsAffected:", err) - } -} - -func TestQueryer(t *testing.T) { - tempFilename := TempFilename() - db, err := sql.Open("sqlite3", tempFilename) - if err != nil { - t.Fatal("Failed to open database:", err) - } - defer os.Remove(tempFilename) - defer db.Close() - - _, err = db.Exec(` - create table foo (id integer); - `) - if err != nil { - t.Error("Failed to call db.Query:", err) - } - - rows, err := db.Query(` - insert into foo(id) values(?); - insert into foo(id) values(?); - insert into foo(id) values(?); - select id from foo order by id; - `, 3, 2, 1) - if err != nil { - t.Error("Failed to call db.Query:", err) - } - defer rows.Close() - n := 1 - if rows != nil { - for rows.Next() { - var id int - err = rows.Scan(&id) - if err != nil { - t.Error("Failed to db.Query:", err) - } - if id != n { - t.Error("Failed to db.Query: not matched results") - } - } - } -} +// TODO: Execer & Queryer currently disabled +// https://github.com/mattn/go-sqlite3/issues/82 +//func TestExecer(t *testing.T) { +// tempFilename := TempFilename() +// db, err := sql.Open("sqlite3", tempFilename) +// if err != nil { +// t.Fatal("Failed to open database:", err) +// } +// defer os.Remove(tempFilename) +// defer db.Close() +// +// _, err = db.Exec(` +// create table foo (id integer); +// insert into foo(id) values(?); +// insert into foo(id) values(?); +// insert into foo(id) values(?); +// `, 1, 2, 3) +// if err != nil { +// t.Error("Failed to call db.Exec:", err) +// } +// if err != nil { +// t.Error("Failed to call res.RowsAffected:", err) +// } +//} +// +//func TestQueryer(t *testing.T) { +// tempFilename := TempFilename() +// db, err := sql.Open("sqlite3", tempFilename) +// if err != nil { +// t.Fatal("Failed to open database:", err) +// } +// defer os.Remove(tempFilename) +// defer db.Close() +// +// _, err = db.Exec(` +// create table foo (id integer); +// `) +// if err != nil { +// t.Error("Failed to call db.Query:", err) +// } +// +// rows, err := db.Query(` +// insert into foo(id) values(?); +// insert into foo(id) values(?); +// insert into foo(id) values(?); +// select id from foo order by id; +// `, 3, 2, 1) +// if err != nil { +// t.Error("Failed to call db.Query:", err) +// } +// defer rows.Close() +// n := 1 +// if rows != nil { +// for rows.Next() { +// var id int +// err = rows.Scan(&id) +// if err != nil { +// t.Error("Failed to db.Query:", err) +// } +// if id != n { +// t.Error("Failed to db.Query: not matched results") +// } +// } +// } +//}