aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/dbx/db.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/dbx/db.go')
-rw-r--r--src/dbx/db.go100
1 files changed, 0 insertions, 100 deletions
diff --git a/src/dbx/db.go b/src/dbx/db.go
index b8ec7f9..b839531 100644
--- a/src/dbx/db.go
+++ b/src/dbx/db.go
@@ -131,103 +131,3 @@ func applyMigrations(dir fs.FS) error {
return nil
}
-
-/* func scanToStruct[T any](rs *sql.Rows) (T, error) {
- return scanToStruct2[T](rs, true)
- }
-
- func scanToStructs[T any](rs *sql.Rows) ([]T, error) {
- xs := []T{}
- for rs.Next() {
- x, err := scanToStruct2[T](rs, false)
- if err != nil {
- return nil, err
- }
- xs = append(xs, x)
- }
- return xs, rs.Err()
- }
-
- func scanToStruct2[T any](rs *sql.Rows, callNextP bool) (T, error) {
- var t, zero T
-
- cols, err := rs.Columns()
- if err != nil {
- return zero, err
- }
-
- v := reflect.ValueOf(&t).Elem()
- tType := v.Type()
-
- rawValues := make([]any, len(cols))
- for i := range rawValues {
- var zero any
- rawValues[i] = &zero
- }
-
- if callNextP {
- rs.Next()
- if err := rs.Err(); err != nil {
- return zero, err
- }
- }
- if err := rs.Scan(rawValues...); err != nil {
- return zero, err
- }
-
- /\* col idx → [field idx, array idx] *\/
- arrayTargets := make(map[int][2]int)
- colToField := make(map[string]int)
-
- for i := 0; i < tType.NumField(); i++ {
- field := tType.Field(i)
- tag := field.Tag.Get("db")
- if tag == "" {
- continue
- }
-
- if strings.Contains(tag, ";") {
- dbcols := strings.Split(tag, ";")
- fv := v.Field(i)
- if fv.Kind() != reflect.Array {
- return zero, fmt.Errorf("field ‘%s’ is not array",
- field.Name)
- }
- if len(dbcols) != fv.Len() {
- return zero, fmt.Errorf("field ‘%s’ array length mismatch",
- field.Name)
- }
- for j, colName := range cols {
- for k, dbColName := range dbcols {
- if colName == dbColName {
- arrayTargets[j] = [2]int{i, k}
- }
- }
- }
- } else {
- colToField[tag] = i
- }
- }
-
- for i, col := range cols {
- vp := rawValues[i].(*any)
- if fieldIdx, ok := colToField[col]; ok {
- assignValue(v.Field(fieldIdx), *vp)
- } else if target, ok := arrayTargets[i]; ok {
- assignValue(v.Field(target[0]).Index(target[1]), *vp)
- }
- }
-
- return t, nil
- } */
-
-/* func assignValue(fv reflect.Value, val any) {
- if val == nil {
- fv.Set(reflect.Zero(fv.Type()))
- return
- }
- v := reflect.ValueOf(val)
- if v.Type().ConvertibleTo(fv.Type()) {
- fv.Set(v.Convert(fv.Type()))
- }
-} */