From ae62a1bd365fca4c41d8b29d62cca240ab45b212 Mon Sep 17 00:00:00 2001 From: Austin Clements Date: Thu, 11 Dec 2025 13:55:33 -0500 Subject: Revert "database/sql: allow drivers to override Scan behavior" This reverts CL 588435. This new API is difficult to use correctly, and in many cases cannot be used efficiently. We're going to work on this problem a bit more. The release notes are removed by CL 729340, since they were moved to the x/website repository since the original CL was made. Reopens #67546. Change-Id: I2a2bd25f2fce5f02e4d28cd33a9cc651bf35ab50 Reviewed-on: https://go-review.googlesource.com/c/go/+/729360 Reviewed-by: Damien Neil LUCI-TryBot-Result: Go LUCI Reviewed-by: Sean Liao --- src/database/sql/sql_test.go | 96 -------------------------------------------- 1 file changed, 96 deletions(-) (limited to 'src/database/sql/sql_test.go') diff --git a/src/database/sql/sql_test.go b/src/database/sql/sql_test.go index 6ee8505855..e8a6560097 100644 --- a/src/database/sql/sql_test.go +++ b/src/database/sql/sql_test.go @@ -4200,102 +4200,6 @@ func TestNamedValueCheckerSkip(t *testing.T) { } } -type rcsDriver struct { - fakeDriver -} - -func (d *rcsDriver) Open(dsn string) (driver.Conn, error) { - c, err := d.fakeDriver.Open(dsn) - fc := c.(*fakeConn) - fc.db.allowAny = true - return &rcsConn{fc}, err -} - -type rcsConn struct { - *fakeConn -} - -func (c *rcsConn) PrepareContext(ctx context.Context, q string) (driver.Stmt, error) { - stmt, err := c.fakeConn.PrepareContext(ctx, q) - if err != nil { - return stmt, err - } - return &rcsStmt{stmt.(*fakeStmt)}, nil -} - -type rcsStmt struct { - *fakeStmt -} - -func (s *rcsStmt) QueryContext(ctx context.Context, args []driver.NamedValue) (driver.Rows, error) { - rows, err := s.fakeStmt.QueryContext(ctx, args) - if err != nil { - return rows, err - } - return &rcsRows{rows.(*rowsCursor)}, nil -} - -type rcsRows struct { - *rowsCursor -} - -func (r *rcsRows) ScanColumn(dest any, index int) error { - switch d := dest.(type) { - case *int64: - *d = 42 - return nil - } - - return driver.ErrSkip -} - -func TestRowsColumnScanner(t *testing.T) { - Register("RowsColumnScanner", &rcsDriver{}) - db, err := Open("RowsColumnScanner", "") - if err != nil { - t.Fatal(err) - } - defer db.Close() - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - _, err = db.ExecContext(ctx, "CREATE|t|str=string,n=int64") - if err != nil { - t.Fatal("exec create", err) - } - - _, err = db.ExecContext(ctx, "INSERT|t|str=?,n=?", "foo", int64(1)) - if err != nil { - t.Fatal("exec insert", err) - } - var ( - str string - i64 int64 - i int - f64 float64 - ui uint - ) - err = db.QueryRowContext(ctx, "SELECT|t|str,n,n,n,n|").Scan(&str, &i64, &i, &f64, &ui) - if err != nil { - t.Fatal("select", err) - } - - list := []struct{ got, want any }{ - {str, "foo"}, - {i64, int64(42)}, - {i, int(1)}, - {f64, float64(1)}, - {ui, uint(1)}, - } - - for index, item := range list { - if !reflect.DeepEqual(item.got, item.want) { - t.Errorf("got %#v wanted %#v for index %d", item.got, item.want, index) - } - } -} - func TestOpenConnector(t *testing.T) { Register("testctx", &fakeDriverCtx{}) db, err := Open("testctx", "people") -- cgit v1.3