wrapper.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package mysql
  2. import (
  3. "database/sql"
  4. "errors"
  5. )
  6. type Wrapper struct {
  7. drv *sql.DB
  8. row *sql.Rows
  9. query string
  10. Err error
  11. }
  12. var ErrDriverNotReady = errors.New("driver not ready")
  13. func (this *Wrapper) Query(query string, args ...interface{}) *Wrapper {
  14. if this.drv == nil {
  15. this.Err = ErrDriverNotReady
  16. return this
  17. }
  18. this.query = query
  19. this.row, this.Err = this.drv.Query(query, args...)
  20. //log.Println("rows=", this.row)
  21. return this
  22. }
  23. func (this *Wrapper) Execute(query string, args ...interface{}) *Wrapper {
  24. if this.drv == nil {
  25. this.Err = ErrDriverNotReady
  26. return this
  27. }
  28. this.query = query
  29. _, this.Err = this.drv.Exec(query, args...)
  30. return this
  31. }
  32. func (this *Wrapper) Each(cb func(wrapper *Wrapper) bool) *Wrapper {
  33. if this.Err != nil {
  34. return this
  35. }
  36. if this.drv == nil {
  37. this.Err = ErrDriverNotReady
  38. return this
  39. }
  40. for this.row.Next() {
  41. if !cb(this) {
  42. break
  43. }
  44. if this.Err != nil {
  45. return this
  46. }
  47. }
  48. this.row.Close()
  49. return this
  50. }
  51. func (this *Wrapper) Scan(dest ...interface{}) error {
  52. this.Err = this.row.Scan(dest...)
  53. if this.Err != nil {
  54. return this.Err
  55. }
  56. return nil
  57. }
  58. func NewWrapper(drv *sql.DB) *Wrapper {
  59. return &Wrapper{
  60. drv: drv,
  61. }
  62. }