tx.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package common
  2. import (
  3. "context"
  4. "database/sql"
  5. "time"
  6. )
  7. type Tx struct {
  8. tx *sql.Tx
  9. Debug bool
  10. Driver string
  11. t time.Time
  12. }
  13. func (db *Tx) fixQuery(query string) string {
  14. if db.Driver == "mysql" {
  15. return rSqlParam.ReplaceAllString(query, "?")
  16. }
  17. return query
  18. }
  19. func (db *Tx) Commit() error {
  20. if db.Debug {
  21. err := db.tx.Commit()
  22. log("[func Commit]", db.t, err, true, "")
  23. return err
  24. }
  25. return db.tx.Commit()
  26. }
  27. func (db *Tx) Exec(ctx context.Context, query string, args ...any) (sql.Result, error) {
  28. if db.Debug {
  29. t := time.Now()
  30. res, err := db.tx.ExecContext(ctx, db.fixQuery(query), args...)
  31. log("[func Exec]", t, err, true, db.fixQuery(query), args...)
  32. return res, err
  33. }
  34. return db.tx.ExecContext(ctx, db.fixQuery(query), args...)
  35. }
  36. func (db *Tx) Query(ctx context.Context, query string, args ...any) (*sql.Rows, error) {
  37. if db.Debug {
  38. t := time.Now()
  39. rows, err := db.tx.QueryContext(ctx, db.fixQuery(query), args...)
  40. log("[func Query]", t, err, true, db.fixQuery(query), args...)
  41. return rows, err
  42. }
  43. return db.tx.QueryContext(ctx, db.fixQuery(query), args...)
  44. }
  45. func (db *Tx) QueryRow(ctx context.Context, query string, args ...any) *sql.Row {
  46. if db.Debug {
  47. t := time.Now()
  48. row := db.tx.QueryRowContext(ctx, db.fixQuery(query), args...)
  49. log("[func QueryRow]", t, nil, true, db.fixQuery(query), args...)
  50. return row
  51. }
  52. return db.tx.QueryRowContext(ctx, db.fixQuery(query), args...)
  53. }
  54. func (db *Tx) Rollback() error {
  55. if db.Debug {
  56. err := db.tx.Rollback()
  57. log("[func Rollback]", db.t, err, true, "")
  58. return err
  59. }
  60. return db.tx.Rollback()
  61. }