v0.0.387 bf
All checks were successful
Build Docker and Deploy / Run goext test-suite (push) Successful in 3m24s
All checks were successful
Build Docker and Deploy / Run goext test-suite (push) Successful in 3m24s
This commit is contained in:
@@ -44,7 +44,7 @@ func InsertAndQuerySingle[TData any](ctx context.Context, q Queryable, tableName
|
||||
|
||||
rval := reflect.ValueOf(v)
|
||||
|
||||
idRVal := rval.FieldByName(idColumn)
|
||||
idRVal := fieldByTag(rval, "db", idColumn)
|
||||
if !idRVal.IsValid() || idRVal.IsZero() {
|
||||
return *new(TData), fmt.Errorf("failed to find idColumn '%s' in %T", idColumn, v)
|
||||
}
|
||||
@@ -67,6 +67,22 @@ func InsertAndQuerySingle[TData any](ctx context.Context, q Queryable, tableName
|
||||
return QuerySingle[TData](ctx, q, sqlstr, pp, mode, sec)
|
||||
}
|
||||
|
||||
func fieldByTag(rval reflect.Value, tagkey string, tagval string) reflect.Value {
|
||||
rtyp := rval.Type()
|
||||
for i := 0; i < rtyp.NumField(); i++ {
|
||||
rsfield := rtyp.Field(i)
|
||||
|
||||
if !rsfield.IsExported() {
|
||||
continue
|
||||
}
|
||||
|
||||
if rsfield.Tag.Get(tagkey) == tagval {
|
||||
return rval.Field(i)
|
||||
}
|
||||
}
|
||||
panic(fmt.Sprintf("tag %s = '%s' not found in %s", tagkey, tagval, rtyp.Name()))
|
||||
}
|
||||
|
||||
func InsertMultiple[TData any](ctx context.Context, q Queryable, tableName string, vArr []TData, maxBatch int) ([]sql.Result, error) {
|
||||
|
||||
if len(vArr) == 0 {
|
||||
@@ -122,7 +138,7 @@ func UpdateAndQuerySingle[TData any](ctx context.Context, q Queryable, tableName
|
||||
|
||||
rval := reflect.ValueOf(v)
|
||||
|
||||
idRVal := rval.FieldByName(idColumn)
|
||||
idRVal := fieldByTag(rval, "db", idColumn)
|
||||
if !idRVal.IsValid() || idRVal.IsZero() {
|
||||
return *new(TData), fmt.Errorf("failed to find idColumn '%s' in %T", idColumn, v)
|
||||
}
|
||||
|
Reference in New Issue
Block a user