@@ -122,16 +122,6 @@ func (b *BunAdapter) SetMetricsEnabled(enabled bool) *BunAdapter {
122122 return b
123123}
124124
125- // EnableMetrics enables query metrics for this adapter.
126- func (b * BunAdapter ) EnableMetrics () * BunAdapter {
127- return b .SetMetricsEnabled (true )
128- }
129-
130- // DisableMetrics disables query metrics for this adapter.
131- func (b * BunAdapter ) DisableMetrics () * BunAdapter {
132- return b .SetMetricsEnabled (false )
133- }
134-
135125func (b * BunAdapter ) getDB () * bun.DB {
136126 b .dbMu .RLock ()
137127 defer b .dbMu .RUnlock ()
@@ -1249,30 +1239,28 @@ func (b *BunSelectQuery) Having(having string, args ...interface{}) common.Selec
12491239}
12501240
12511241func (b * BunSelectQuery ) Scan (ctx context.Context , dest interface {}) (err error ) {
1242+ startedAt := time .Now ()
12521243 defer func () {
12531244 if r := recover (); r != nil {
12541245 err = logger .HandlePanic ("BunSelectQuery.Scan" , r )
12551246 }
1247+ recordQueryMetrics (b .metricsEnabled , "SELECT" , b .schema , b .entity , b .tableName , startedAt , err )
12561248 }()
1257- startedAt := time .Now ()
12581249 if dest == nil {
1259- return fmt .Errorf ("destination cannot be nil" )
1250+ err = fmt .Errorf ("destination cannot be nil" )
1251+ return err
12601252 }
12611253
12621254 err = b .query .Scan (ctx , dest )
12631255 if err != nil {
1264- // Log SQL string for debugging
12651256 sqlStr := b .query .String ()
12661257 logger .Error ("BunSelectQuery.Scan failed. SQL: %s. Error: %v" , sqlStr , err )
1267- recordQueryMetrics (b .metricsEnabled , "SELECT" , b .schema , b .entity , b .tableName , startedAt , err )
1268- return err
12691258 }
1270-
1271- recordQueryMetrics (b .metricsEnabled , "SELECT" , b .schema , b .entity , b .tableName , startedAt , nil )
1272- return nil
1259+ return err
12731260}
12741261
12751262func (b * BunSelectQuery ) ScanModel (ctx context.Context ) (err error ) {
1263+ startedAt := time .Now ()
12761264 defer func () {
12771265 if r := recover (); r != nil {
12781266 // Enhanced panic recovery with model information
@@ -1282,7 +1270,6 @@ func (b *BunSelectQuery) ScanModel(ctx context.Context) (err error) {
12821270 modelValue := model .Value ()
12831271 modelInfo = fmt .Sprintf ("Model type: %T" , modelValue )
12841272
1285- // Try to get the model's underlying struct type
12861273 v := reflect .ValueOf (modelValue )
12871274 if v .Kind () == reflect .Ptr {
12881275 v = v .Elem ()
@@ -1302,11 +1289,12 @@ func (b *BunSelectQuery) ScanModel(ctx context.Context) (err error) {
13021289 logger .Error ("Panic in BunSelectQuery.ScanModel: %v. %s. SQL: %s" , r , modelInfo , sqlStr )
13031290 err = logger .HandlePanic ("BunSelectQuery.ScanModel" , r )
13041291 }
1292+ recordQueryMetrics (b .metricsEnabled , "SELECT" , b .schema , b .entity , b .tableName , startedAt , err )
13051293 }()
13061294 if b .query .GetModel () == nil {
1307- return fmt .Errorf ("model is nil" )
1295+ err = fmt .Errorf ("model is nil" )
1296+ return err
13081297 }
1309- startedAt := time .Now ()
13101298
13111299 // Optional: Enable detailed field-level debugging (set to true to debug)
13121300 const enableDetailedDebug = true
@@ -1321,45 +1309,40 @@ func (b *BunSelectQuery) ScanModel(ctx context.Context) (err error) {
13211309
13221310 err = b .query .Scan (ctx )
13231311 if err != nil {
1324- // Log SQL string for debugging
13251312 sqlStr := b .query .String ()
13261313 logger .Error ("BunSelectQuery.ScanModel failed. SQL: %s. Error: %v" , sqlStr , err )
1327- recordQueryMetrics (b .metricsEnabled , "SELECT" , b .schema , b .entity , b .tableName , startedAt , err )
13281314 return err
13291315 }
13301316
13311317 // After main query, load custom preloads using separate queries
13321318 if len (b .customPreloads ) > 0 {
13331319 logger .Info ("Loading %d custom preload(s) with separate queries" , len (b .customPreloads ))
1334- if err : = b .loadCustomPreloads (ctx ); err != nil {
1320+ if err = b .loadCustomPreloads (ctx ); err != nil {
13351321 logger .Error ("Failed to load custom preloads: %v" , err )
1336- recordQueryMetrics (b .metricsEnabled , "SELECT" , b .schema , b .entity , b .tableName , startedAt , err )
13371322 return err
13381323 }
13391324 }
13401325
1341- recordQueryMetrics (b .metricsEnabled , "SELECT" , b .schema , b .entity , b .tableName , startedAt , nil )
13421326 return nil
13431327}
13441328
13451329func (b * BunSelectQuery ) Count (ctx context.Context ) (count int , err error ) {
1330+ startedAt := time .Now ()
13461331 defer func () {
13471332 if r := recover (); r != nil {
13481333 err = logger .HandlePanic ("BunSelectQuery.Count" , r )
13491334 count = 0
13501335 }
1336+ recordQueryMetrics (b .metricsEnabled , "COUNT" , b .schema , b .entity , b .tableName , startedAt , err )
13511337 }()
1352- startedAt := time .Now ()
13531338 // If Model() was set, use bun's native Count() which works properly
13541339 if b .hasModel {
1355- count , err : = b .query .Count (ctx )
1340+ count , err = b .query .Count (ctx ) // assign to named returns, not shadow vars
13561341 if err != nil {
1357- // Log SQL string for debugging
13581342 sqlStr := b .query .String ()
13591343 logger .Error ("BunSelectQuery.Count failed. SQL: %s. Error: %v" , sqlStr , err )
13601344 }
1361- recordQueryMetrics (b .metricsEnabled , "COUNT" , b .schema , b .entity , b .tableName , startedAt , err )
1362- return count , err
1345+ return
13631346 }
13641347
13651348 // Otherwise, wrap as subquery to avoid "Model(nil)" error
@@ -1369,30 +1352,27 @@ func (b *BunSelectQuery) Count(ctx context.Context) (count int, err error) {
13691352 ColumnExpr ("COUNT(*)" )
13701353 err = countQuery .Scan (ctx , & count )
13711354 if err != nil {
1372- // Log SQL string for debugging
13731355 sqlStr := countQuery .String ()
13741356 logger .Error ("BunSelectQuery.Count (subquery) failed. SQL: %s. Error: %v" , sqlStr , err )
13751357 }
1376- recordQueryMetrics (b .metricsEnabled , "COUNT" , b .schema , b .entity , b .tableName , startedAt , err )
1377- return count , err
1358+ return
13781359}
13791360
13801361func (b * BunSelectQuery ) Exists (ctx context.Context ) (exists bool , err error ) {
1362+ startedAt := time .Now ()
13811363 defer func () {
13821364 if r := recover (); r != nil {
13831365 err = logger .HandlePanic ("BunSelectQuery.Exists" , r )
13841366 exists = false
13851367 }
1368+ recordQueryMetrics (b .metricsEnabled , "EXISTS" , b .schema , b .entity , b .tableName , startedAt , err )
13861369 }()
1387- startedAt := time .Now ()
13881370 exists , err = b .query .Exists (ctx )
13891371 if err != nil {
1390- // Log SQL string for debugging
13911372 sqlStr := b .query .String ()
13921373 logger .Error ("BunSelectQuery.Exists failed. SQL: %s. Error: %v" , sqlStr , err )
13931374 }
1394- recordQueryMetrics (b .metricsEnabled , "EXISTS" , b .schema , b .entity , b .tableName , startedAt , err )
1395- return exists , err
1375+ return
13961376}
13971377
13981378// BunInsertQuery implements InsertQuery for Bun
0 commit comments