Skip to content

Commit

Permalink
database/sql: use reflect.TypeFor for known types
Browse files Browse the repository at this point in the history
For golang#60088

Change-Id: Ib05ba3d456b22f7370459037b3d263c4b3ebe3b1
Reviewed-on: https://go-review.googlesource.com/c/go/+/514975
Reviewed-by: Daniel Theophanes <[email protected]>
Run-TryBot: Ian Lance Taylor <[email protected]>
TryBot-Result: Gopher Robot <[email protected]>
Reviewed-by: Ian Lance Taylor <[email protected]>
Run-TryBot: Ian Lance Taylor <[email protected]>
Auto-Submit: Ian Lance Taylor <[email protected]>
Reviewed-by: Michael Knyszek <[email protected]>
  • Loading branch information
ianlancetaylor authored and gopherbot committed Aug 8, 2023
1 parent 0c13bd6 commit 6d8d88a
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 17 deletions.
2 changes: 1 addition & 1 deletion src/database/sql/convert.go
Original file line number Diff line number Diff line change
Expand Up @@ -529,7 +529,7 @@ func asBytes(buf []byte, rv reflect.Value) (b []byte, ok bool) {
return
}

var valuerReflectType = reflect.TypeOf((*driver.Valuer)(nil)).Elem()
var valuerReflectType = reflect.TypeFor[driver.Valuer]()

// callValuerValue returns vr.Value(), with one exception:
// If vr.Value is an auto-generated method on a pointer type and the
Expand Down
2 changes: 1 addition & 1 deletion src/database/sql/driver/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ type defaultConverter struct{}

var _ ValueConverter = defaultConverter{}

var valuerReflectType = reflect.TypeOf((*Valuer)(nil)).Elem()
var valuerReflectType = reflect.TypeFor[Valuer]()

// callValuerValue returns vr.Value(), with one exception:
// If vr.Value is an auto-generated method on a pointer type and the
Expand Down
28 changes: 14 additions & 14 deletions src/database/sql/fakedb_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1251,33 +1251,33 @@ func converterForType(typ string) driver.ValueConverter {
func colTypeToReflectType(typ string) reflect.Type {
switch typ {
case "bool":
return reflect.TypeOf(false)
return reflect.TypeFor[bool]()
case "nullbool":
return reflect.TypeOf(NullBool{})
return reflect.TypeFor[NullBool]()
case "int16":
return reflect.TypeOf(int16(0))
return reflect.TypeFor[int16]()
case "nullint16":
return reflect.TypeOf(NullInt16{})
return reflect.TypeFor[NullInt16]()
case "int32":
return reflect.TypeOf(int32(0))
return reflect.TypeFor[int32]()
case "nullint32":
return reflect.TypeOf(NullInt32{})
return reflect.TypeFor[NullInt32]()
case "string":
return reflect.TypeOf("")
return reflect.TypeFor[string]()
case "nullstring":
return reflect.TypeOf(NullString{})
return reflect.TypeFor[NullString]()
case "int64":
return reflect.TypeOf(int64(0))
return reflect.TypeFor[int64]()
case "nullint64":
return reflect.TypeOf(NullInt64{})
return reflect.TypeFor[NullInt64]()
case "float64":
return reflect.TypeOf(float64(0))
return reflect.TypeFor[float64]()
case "nullfloat64":
return reflect.TypeOf(NullFloat64{})
return reflect.TypeFor[NullFloat64]()
case "datetime":
return reflect.TypeOf(time.Time{})
return reflect.TypeFor[time.Time]()
case "any":
return reflect.TypeOf(new(any)).Elem()
return reflect.TypeFor[any]()
}
panic("invalid fakedb column type of " + typ)
}
2 changes: 1 addition & 1 deletion src/database/sql/sql.go
Original file line number Diff line number Diff line change
Expand Up @@ -3244,7 +3244,7 @@ func rowsColumnInfoSetupConnLocked(rowsi driver.Rows) []*ColumnType {
if prop, ok := rowsi.(driver.RowsColumnTypeScanType); ok {
ci.scanType = prop.ColumnTypeScanType(i)
} else {
ci.scanType = reflect.TypeOf(new(any)).Elem()
ci.scanType = reflect.TypeFor[any]()
}
if prop, ok := rowsi.(driver.RowsColumnTypeDatabaseTypeName); ok {
ci.databaseType = prop.ColumnTypeDatabaseTypeName(i)
Expand Down

0 comments on commit 6d8d88a

Please sign in to comment.