Disable Execer/Queryer until database/sql/driver implement QueryRow: #82

systemlib
mattn 2013-09-12 10:46:35 +09:00
parent 1c16dbe609
commit 1ca536cf83
2 changed files with 126 additions and 122 deletions

View File

@ -134,65 +134,67 @@ func (c *SQLiteConn) AutoCommit() bool {
return int(C.sqlite3_get_autocommit(c.db)) != 0 return int(C.sqlite3_get_autocommit(c.db)) != 0
} }
// Implements Execer // TODO: Execer & Queryer currently disabled
func (c *SQLiteConn) Exec(query string, args []driver.Value) (driver.Result, error) { // https://github.com/mattn/go-sqlite3/issues/82
tx, err := c.Begin() //// Implements Execer
if err != nil { //func (c *SQLiteConn) Exec(query string, args []driver.Value) (driver.Result, error) {
return nil, err // tx, err := c.Begin()
} // if err != nil {
for { // return nil, err
s, err := c.Prepare(query) // }
if err != nil { // for {
tx.Rollback() // s, err := c.Prepare(query)
return nil, err // if err != nil {
} // tx.Rollback()
na := s.NumInput() // return nil, err
res, err := s.Exec(args[:na]) // }
if err != nil && err != driver.ErrSkip { // na := s.NumInput()
tx.Rollback() // res, err := s.Exec(args[:na])
s.Close() // if err != nil && err != driver.ErrSkip {
return nil, err // tx.Rollback()
} // s.Close()
args = args[na:] // return nil, err
tail := s.(*SQLiteStmt).t // }
if tail == "" { // args = args[na:]
tx.Commit() // tail := s.(*SQLiteStmt).t
return res, nil // if tail == "" {
} // tx.Commit()
s.Close() // return res, nil
query = tail // }
} // s.Close()
} // query = tail
// }
// Implements Queryer //}
func (c *SQLiteConn) Query(query string, args []driver.Value) (driver.Rows, error) { //
tx, err := c.Begin() //// Implements Queryer
if err != nil { //func (c *SQLiteConn) Query(query string, args []driver.Value) (driver.Rows, error) {
return nil, err // tx, err := c.Begin()
} // if err != nil {
for { // return nil, err
s, err := c.Prepare(query) // }
if err != nil { // for {
tx.Rollback() // s, err := c.Prepare(query)
return nil, err // if err != nil {
} // tx.Rollback()
na := s.NumInput() // return nil, err
rows, err := s.Query(args[:na]) // }
if err != nil && err != driver.ErrSkip { // na := s.NumInput()
tx.Rollback() // rows, err := s.Query(args[:na])
s.Close() // if err != nil && err != driver.ErrSkip {
return nil, err // tx.Rollback()
} // s.Close()
args = args[na:] // return nil, err
tail := s.(*SQLiteStmt).t // }
if tail == "" { // args = args[na:]
tx.Commit() // tail := s.(*SQLiteStmt).t
return rows, nil // if tail == "" {
} // tx.Commit()
s.Close() // return rows, nil
query = tail // }
} // s.Close()
} // query = tail
// }
//}
func (c *SQLiteConn) exec(cmd string) error { func (c *SQLiteConn) exec(cmd string) error {
pcmd := C.CString(cmd) pcmd := C.CString(cmd)

View File

@ -580,67 +580,69 @@ func TestTransaction(t *testing.T) {
} }
} }
func TestExecer(t *testing.T) { // TODO: Execer & Queryer currently disabled
tempFilename := TempFilename() // https://github.com/mattn/go-sqlite3/issues/82
db, err := sql.Open("sqlite3", tempFilename) //func TestExecer(t *testing.T) {
if err != nil { // tempFilename := TempFilename()
t.Fatal("Failed to open database:", err) // db, err := sql.Open("sqlite3", tempFilename)
} // if err != nil {
defer os.Remove(tempFilename) // t.Fatal("Failed to open database:", err)
defer db.Close() // }
// defer os.Remove(tempFilename)
_, err = db.Exec(` // defer db.Close()
create table foo (id integer); //
insert into foo(id) values(?); // _, err = db.Exec(`
insert into foo(id) values(?); // create table foo (id integer);
insert into foo(id) values(?); // insert into foo(id) values(?);
`, 1, 2, 3) // insert into foo(id) values(?);
if err != nil { // insert into foo(id) values(?);
t.Error("Failed to call db.Exec:", err) // `, 1, 2, 3)
} // if err != nil {
if err != nil { // t.Error("Failed to call db.Exec:", err)
t.Error("Failed to call res.RowsAffected:", 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) //func TestQueryer(t *testing.T) {
if err != nil { // tempFilename := TempFilename()
t.Fatal("Failed to open database:", err) // db, err := sql.Open("sqlite3", tempFilename)
} // if err != nil {
defer os.Remove(tempFilename) // t.Fatal("Failed to open database:", err)
defer db.Close() // }
// defer os.Remove(tempFilename)
_, err = db.Exec(` // defer db.Close()
create table foo (id integer); //
`) // _, err = db.Exec(`
if err != nil { // create table foo (id integer);
t.Error("Failed to call db.Query:", err) // `)
} // 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(?); // rows, err := db.Query(`
insert into foo(id) values(?); // insert into foo(id) values(?);
select id from foo order by id; // insert into foo(id) values(?);
`, 3, 2, 1) // insert into foo(id) values(?);
if err != nil { // select id from foo order by id;
t.Error("Failed to call db.Query:", err) // `, 3, 2, 1)
} // if err != nil {
defer rows.Close() // t.Error("Failed to call db.Query:", err)
n := 1 // }
if rows != nil { // defer rows.Close()
for rows.Next() { // n := 1
var id int // if rows != nil {
err = rows.Scan(&id) // for rows.Next() {
if err != nil { // var id int
t.Error("Failed to db.Query:", err) // err = rows.Scan(&id)
} // if err != nil {
if id != n { // t.Error("Failed to db.Query:", err)
t.Error("Failed to db.Query: not matched results") // }
} // if id != n {
} // t.Error("Failed to db.Query: not matched results")
} // }
} // }
// }
//}