Change queryStruct to use tx.Get instead of queryFunc

Using queryFunc meant that the performance logging was inaccurate due to the query actually being executed during the call to Scan.
This commit is contained in:
WithoutPants 2025-12-05 16:39:33 +11:00
parent 39fd8a6550
commit 8e10798fc4

View file

@ -119,13 +119,12 @@ func (r *repository) queryFunc(ctx context.Context, query string, args []interfa
return nil return nil
} }
// queryStruct executes a query and scans the result into the provided struct.
// Unlike the other query methods, this will return an error if no rows are found.
func (r *repository) queryStruct(ctx context.Context, query string, args []interface{}, out interface{}) error { func (r *repository) queryStruct(ctx context.Context, query string, args []interface{}, out interface{}) error {
if err := r.queryFunc(ctx, query, args, true, func(rows *sqlx.Rows) error { // changed from queryFunc, since it was not logging the performance correctly,
if err := rows.StructScan(out); err != nil { // since the query doesn't actually execute until Scan is called
return err if err := dbWrapper.Get(ctx, out, query, args...); err != nil {
}
return nil
}); err != nil {
return fmt.Errorf("executing query: %s [%v]: %w", query, args, err) return fmt.Errorf("executing query: %s [%v]: %w", query, args, err)
} }