condition.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package operations
  2. import "gorm.io/gorm"
  3. type Conditions struct {
  4. queries []string
  5. queryArgs [][]any
  6. }
  7. func NewConditions() *Conditions {
  8. return &Conditions{
  9. queries: make([]string, 0),
  10. queryArgs: make([][]any, 0),
  11. }
  12. }
  13. func (clause *Conditions) Equal(columnName string, value any) *Conditions {
  14. clause.queries = append(clause.queries, columnName+" = ?")
  15. clause.queryArgs = append(clause.queryArgs, []any{value})
  16. return clause
  17. }
  18. func (clause *Conditions) Like(columnName string, value any) *Conditions {
  19. clause.queries = append(clause.queries, columnName+" LIKE ?")
  20. clause.queryArgs = append(clause.queryArgs, []any{value})
  21. return clause
  22. }
  23. func (clause *Conditions) In(columnName string, value any) *Conditions {
  24. clause.queries = append(clause.queries, columnName+" IN ?")
  25. clause.queryArgs = append(clause.queryArgs, []any{value})
  26. return clause
  27. }
  28. func (clause *Conditions) NotIn(columnName string, value any) *Conditions {
  29. clause.queries = append(clause.queries, columnName+" NOT IN ?")
  30. clause.queryArgs = append(clause.queryArgs, []any{value})
  31. return clause
  32. }
  33. func (clause *Conditions) Not(columnName string, value any) *Conditions {
  34. clause.queries = append(clause.queries, columnName+" != ?")
  35. clause.queryArgs = append(clause.queryArgs, []any{value})
  36. return clause
  37. }
  38. func (clause *Conditions) LessThan(columnName string, value any) *Conditions {
  39. clause.queries = append(clause.queries, columnName+" < ?")
  40. clause.queryArgs = append(clause.queryArgs, []any{value})
  41. return clause
  42. }
  43. func (clause *Conditions) LessThanAndEqual(columnName string, value any) *Conditions {
  44. clause.queries = append(clause.queries, columnName+" <= ?")
  45. clause.queryArgs = append(clause.queryArgs, []any{value})
  46. return clause
  47. }
  48. func (clause *Conditions) GreaterThan(columnName string, value any) *Conditions {
  49. clause.queries = append(clause.queries, columnName+" > ?")
  50. clause.queryArgs = append(clause.queryArgs, []any{value})
  51. return clause
  52. }
  53. func (clause *Conditions) GreaterThanAndEqual(columnName string, value any) *Conditions {
  54. clause.queries = append(clause.queries, columnName+" >= ?")
  55. clause.queryArgs = append(clause.queryArgs, []any{value})
  56. return clause
  57. }
  58. func (clause *Conditions) where(db *gorm.DB) *gorm.DB {
  59. for i, query := range clause.queries {
  60. db = db.Where(query, clause.queryArgs[i]...)
  61. }
  62. return db
  63. }
  64. func (clause *Conditions) or(db *gorm.DB) *gorm.DB {
  65. for i, query := range clause.queries {
  66. db = db.Or(query, clause.queryArgs[i]...)
  67. }
  68. return db
  69. }
  70. func (clause *Conditions) having(db *gorm.DB) *gorm.DB {
  71. for i, query := range clause.queries {
  72. db = db.Having(query, clause.queryArgs[i]...)
  73. }
  74. return db
  75. }