@@ -14,8 +14,7 @@ type QueryFn func(context.Context, string, ...interface{}) (*stdsql.Rows, error)
1414
1515type DB struct {
1616 Client * stdsql.DB
17- Driver string
18- URL string
17+ Logger * slog.Logger
1918}
2019
2120func (db * DB ) Ping () error {
@@ -25,18 +24,26 @@ func (db *DB) Ping() error {
2524// Run any query on the database client, passing parameters optionally. Returns sql.Result.
2625func (db * DB ) Exec (ctx context.Context , sql string , params ... interface {}) (stdsql.Result , error ) {
2726 start := time .Now ()
28- result , error := db .Client .ExecContext (ctx , sql , params ... )
29- slog .DebugContext (ctx , "Executed SQL query" , "sql" , sql , "took" , time .Since (start ))
30- return result , error
27+ result , err := db .Client .ExecContext (ctx , sql , params ... )
28+
29+ if db .Logger != nil {
30+ db .Logger .DebugContext (ctx , "Executed SQL query" , "sql" , sql , "took" , time .Since (start ), "error" , err )
31+ }
32+
33+ return result , err
3134}
3235
3336// Run any query on the database client, passing parameters optionally. Its difference with
3437// `Exec` method is returning `sql.Rows` instead of `sql.Result`.
3538func (db * DB ) Query (ctx context.Context , sql string , params ... interface {}) (* stdsql.Rows , error ) {
3639 start := time .Now ()
37- result , error := db .Client .QueryContext (ctx , sql , params ... )
38- slog .DebugContext (ctx , "Ran SQL query" , "sql" , sql , "took" , time .Since (start ))
39- return result , error
40+ result , err := db .Client .QueryContext (ctx , sql , params ... )
41+
42+ if db .Logger != nil {
43+ db .Logger .DebugContext (ctx , "Ran SQL query" , "sql" , sql , "took" , time .Since (start ), "error" , err )
44+ }
45+
46+ return result , err
4047}
4148
4249// Takes any valid struct and creates a SQL table from it.
@@ -168,20 +175,20 @@ func (db *DB) Begin(ctx context.Context, readOnly bool) (*Tx, error) {
168175
169176 return & Tx {
170177 Client : client ,
178+ Logger : db .Logger ,
171179 }, nil
172180}
173181
174182// Establish DB connection and return a crud.DB instance w/ methods needed for accessing / writing the database.
175183// Example call: Connect("mysql", "root:123456@tcp(localhost:3306)/database_name?parseTime=true")
176- func Connect (driver , url string ) (* DB , error ) {
184+ func Connect (driver , url string , logger * slog. Logger ) (* DB , error ) {
177185 client , err := stdsql .Open (driver , url )
178186 if err != nil {
179187 return nil , err
180188 }
181189
182190 return & DB {
183191 Client : client ,
184- Driver : driver ,
185- URL : url ,
192+ Logger : logger ,
186193 }, nil
187194}
0 commit comments