main_private.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package gorm
  2. import (
  3. "regexp"
  4. "time"
  5. )
  6. func (s *DB) clone() *DB {
  7. db := DB{db: s.db, parent: s.parent, logMode: s.logMode, Value: s.Value, Error: s.Error, values: map[string]interface{}{}}
  8. for key, value := range s.values {
  9. db.values[key] = value
  10. }
  11. if s.search == nil {
  12. db.search = &search{}
  13. } else {
  14. db.search = s.search.clone()
  15. }
  16. db.search.db = &db
  17. return &db
  18. }
  19. func (s *DB) new() *DB {
  20. s.search = nil
  21. return s.clone()
  22. }
  23. func (s *DB) err(err error) error {
  24. if err != nil {
  25. if err != RecordNotFound {
  26. if s.logMode == 0 {
  27. go s.print(fileWithLineNum(), err)
  28. } else {
  29. s.log(err)
  30. }
  31. if regexp.MustCompile(`^sql: Scan error on column index`).MatchString(err.Error()) {
  32. return nil
  33. }
  34. }
  35. s.Error = err
  36. }
  37. return err
  38. }
  39. func (s *DB) print(v ...interface{}) {
  40. s.parent.logger.(logger).Print(v...)
  41. }
  42. func (s *DB) log(v ...interface{}) {
  43. if s != nil && s.logMode == 2 {
  44. s.print(append([]interface{}{"log", fileWithLineNum()}, v...)...)
  45. }
  46. }
  47. func (s *DB) slog(sql string, t time.Time, vars ...interface{}) {
  48. if s.logMode == 2 {
  49. s.print("sql", fileWithLineNum(), NowFunc().Sub(t), sql, vars)
  50. }
  51. }