Add driver.StmtExecContext support to stdlib.Stmt

batch-wip
Jack Christensen 2017-05-19 16:18:54 -05:00
parent f9cb22e4b8
commit 7f226539a0
2 changed files with 52 additions and 0 deletions

View File

@ -388,6 +388,10 @@ func (s *Stmt) Exec(argsV []driver.Value) (driver.Result, error) {
return s.conn.Exec(s.ps.Name, argsV)
}
func (s *Stmt) ExecContext(ctx context.Context, argsV []driver.NamedValue) (driver.Result, error) {
return s.conn.ExecContext(ctx, s.ps.Name, argsV)
}
func (s *Stmt) Query(argsV []driver.Value) (driver.Rows, error) {
return s.conn.queryPrepared(s.ps.Name, argsV)
}

View File

@ -1100,3 +1100,51 @@ func TestRowsColumnTypeDatabaseTypeName(t *testing.T) {
ensureConnValid(t, db)
}
func TestStmtExecContextSuccess(t *testing.T) {
db := openDB(t)
defer closeDB(t, db)
_, err := db.Exec("create temporary table t(id int primary key)")
if err != nil {
t.Fatalf("db.Exec failed: %v", err)
}
stmt, err := db.Prepare("insert into t(id) values ($1::int4)")
if err != nil {
t.Fatal(err)
}
defer stmt.Close()
_, err = stmt.ExecContext(context.Background(), 42)
if err != nil {
t.Fatal(err)
}
ensureConnValid(t, db)
}
func TestStmtExecContextCancel(t *testing.T) {
db := openDB(t)
defer closeDB(t, db)
_, err := db.Exec("create temporary table t(id int primary key)")
if err != nil {
t.Fatalf("db.Exec failed: %v", err)
}
stmt, err := db.Prepare("insert into t(id) select $1::int4 from pg_sleep(5)")
if err != nil {
t.Fatal(err)
}
defer stmt.Close()
ctx, _ := context.WithTimeout(context.Background(), 100*time.Millisecond)
_, err = stmt.ExecContext(ctx, 42)
if err != context.DeadlineExceeded {
t.Errorf("err => %v, want %v", err, context.DeadlineExceeded)
}
ensureConnValid(t, db)
}