"fmt"
"io"
"reflect"
- "sort"
+ "slices"
"strconv"
"strings"
"sync"
}
func (t *table) columnIndex(name string) int {
- for n, nname := range t.colname {
- if name == nname {
- return n
- }
- }
- return -1
+ return slices.Index(t.colname, name)
}
type row struct {
Register("test", fdriver)
}
-func contains(list []string, y string) bool {
- for _, x := range list {
- if x == y {
- return true
- }
- }
- return false
-}
-
type Dummy struct {
driver.Driver
}
Register("test", fdriver)
Register("invalid", Dummy{})
all := Drivers()
- if len(all) < 2 || !sort.StringsAreSorted(all) || !contains(all, "test") || !contains(all, "invalid") {
+ if len(all) < 2 || !slices.IsSorted(all) || !slices.Contains(all, "test") || !slices.Contains(all, "invalid") {
t.Fatalf("Drivers = %v, want sorted list with at least [invalid, test]", all)
}
}
if !ok {
return
}
- for n, cname := range t.colname {
- if cname == column {
- return t.coltype[n], true
- }
+ if i := slices.Index(t.colname, column); i != -1 {
+ return t.coltype[i], true
}
return "", false
}
return nil, fmt.Errorf("fakedb: unimplemented statement Exec command type of %q", s.cmd)
}
+func valueFromPlaceholderName(args []driver.NamedValue, name string) driver.Value {
+ for i := range args {
+ if args[i].Name == name {
+ return args[i].Value
+ }
+ }
+ return nil
+}
+
// When doInsert is true, add the row to the table.
// When doInsert is false do prep-work and error checking, but don't
// actually add the row to the table.
val = args[argPos].Value
} else {
// Assign value from argument placeholder name.
- for _, a := range args {
- if a.Name == strvalue[1:] {
- val = a.Value
- break
- }
+ if v := valueFromPlaceholderName(args, strvalue[1:]); v != nil {
+ val = v
}
}
argPos++
if wcol.Placeholder == "?" {
argValue = args[wcol.Ordinal-1].Value
} else {
- // Assign arg value from placeholder name.
- for _, a := range args {
- if a.Name == wcol.Placeholder[1:] {
- argValue = a.Value
- break
- }
+ if v := valueFromPlaceholderName(args, wcol.Placeholder[1:]); v != nil {
+ argValue = v
}
}
if fmt.Sprintf("%v", tcol) != fmt.Sprintf("%v", argValue) {
"math/rand/v2"
"reflect"
"runtime"
- "sort"
+ "slices"
"strconv"
"sync"
"sync/atomic"
for name := range drivers {
list = append(list, name)
}
- sort.Strings(list)
+ slices.Sort(list)
return list
}
// they were obtained from the network anyway) But for now we
// don't care.
defer r.rows.Close()
- for _, dp := range dest {
- if _, ok := dp.(*RawBytes); ok {
- return errors.New("sql: RawBytes isn't allowed on Row.Scan")
- }
+ if scanArgsContainRawBytes(dest) {
+ return errors.New("sql: RawBytes isn't allowed on Row.Scan")
}
if !r.rows.Next() {
freedFrom[c] = s
}
putConnHook = func(db *DB, c *driverConn) {
- idx := -1
- for i, v := range db.freeConn {
- if v == c {
- idx = i
- break
- }
- }
- if idx >= 0 {
+ if slices.Contains(db.freeConn, c) {
// print before panic, as panic may get lost due to conflicting panic
// (all goroutines asleep) elsewhere, since we might not unlock
// the mutex in freeConn here.
{age: 2, name: "Bob"},
{age: 3, name: "Chris"},
}
- if !reflect.DeepEqual(got, want) {
+ if !slices.Equal(got, want) {
t.Errorf("mismatch.\n got: %#v\nwant: %#v", got, want)
}
{age: 1, name: "Alice"},
{age: 2, name: "Bob"},
}
- if !reflect.DeepEqual(got, want) {
+ if !slices.Equal(got, want) {
t.Errorf("mismatch.\n got: %#v\nwant: %#v", got, want)
}
{age: 2, name: "Bob"},
{age: 3, name: "Chris"},
}
- if !reflect.DeepEqual(got1, want1) {
+ if !slices.Equal(got1, want1) {
t.Errorf("mismatch.\n got1: %#v\nwant: %#v", got1, want1)
}
{name: "Bob"},
{name: "Chris"},
}
- if !reflect.DeepEqual(got2, want2) {
+ if !slices.Equal(got2, want2) {
t.Errorf("mismatch.\n got: %#v\nwant: %#v", got2, want2)
}
if rows.NextResultSet() {
want := []row{
{age: 2, name: "Bob"},
}
- if !reflect.DeepEqual(got, want) {
+ if !slices.Equal(got, want) {
t.Errorf("mismatch.\n got: %#v\nwant: %#v", got, want)
}
t.Fatalf("Columns: %v", err)
}
want := []string{"age", "name"}
- if !reflect.DeepEqual(cols, want) {
+ if !slices.Equal(cols, want) {
t.Errorf("got %#v; want %#v", cols, want)
}
if err := rows.Close(); err != nil {
t.Fatalf("photo QueryRow+Scan: %v", err)
}
want := []byte("APHOTO")
- if !reflect.DeepEqual(photo, want) {
+ if !slices.Equal(photo, want) {
t.Errorf("photo = %q; want %q", photo, want)
}
}