Skip to content

Commit a4e9b9a

Browse files
authored
feat: add OrWhereBetween and OrWhereNotBetween methods (#417)
1 parent c12a383 commit a4e9b9a

File tree

5 files changed

+128
-0
lines changed

5 files changed

+128
-0
lines changed

contracts/database/orm/orm.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,10 @@ type Query interface {
104104
OrWhereIn(column string, values []any) Query
105105
// OrWhereNotIn adds an "or where column not in" clause to the query.
106106
OrWhereNotIn(column string, values []any) Query
107+
// OrWhereBetween adds an "or where column between x and y" clause to the query.
108+
OrWhereBetween(column string, x, y any) Query
109+
// OrWhereNotBetween adds an "or where column not between x and y" clause to the query.
110+
OrWhereNotBetween(column string, x, y any) Query
107111
// Paginate the given query into a simple paginator.
108112
Paginate(page, limit int, dest any, total *int64) error
109113
// Pluck retrieves a single column from the database.

database/gorm/query.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -717,6 +717,14 @@ func (r *QueryImpl) WhereNotBetween(column string, x, y any) ormcontract.Query {
717717
return r.Where(fmt.Sprintf("%s NOT BETWEEN %v AND %v", column, x, y))
718718
}
719719

720+
func (r *QueryImpl) OrWhereBetween(column string, x, y any) ormcontract.Query {
721+
return r.OrWhere(fmt.Sprintf("%s BETWEEN %v AND %v", column, x, y))
722+
}
723+
724+
func (r *QueryImpl) OrWhereNotBetween(column string, x, y any) ormcontract.Query {
725+
return r.OrWhere(fmt.Sprintf("%s NOT BETWEEN %v AND %v", column, x, y))
726+
}
727+
720728
func (r *QueryImpl) WhereNull(column string) ormcontract.Query {
721729
return r.Where(fmt.Sprintf("%s IS NULL", column))
722730
}

database/gorm/query_test.go

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2909,6 +2909,58 @@ func (s *QueryTestSuite) TestWhereNotBetween() {
29092909
}
29102910
}
29112911

2912+
func (s *QueryTestSuite) TestOrWhereBetween() {
2913+
for driver, query := range s.queries {
2914+
s.Run(driver.String(), func() {
2915+
user := User{Name: "or_where_between_user", Avatar: "or_where_between_avatar"}
2916+
s.Nil(query.Create(&user))
2917+
s.True(user.ID > 0)
2918+
2919+
user1 := User{Name: "or_where_between_user_1", Avatar: "or_where_between_avatar_1"}
2920+
s.Nil(query.Create(&user1))
2921+
s.True(user1.ID > 0)
2922+
2923+
user2 := User{Name: "or_where_between_user_2", Avatar: "or_where_between_avatar_2"}
2924+
s.Nil(query.Create(&user2))
2925+
s.True(user2.ID > 0)
2926+
2927+
user3 := User{Name: "or_where_between_user_3", Avatar: "or_where_between_avatar_3"}
2928+
s.Nil(query.Create(&user3))
2929+
s.True(user3.ID > 0)
2930+
2931+
var users []User
2932+
s.Nil(query.Where("name = ?", "or_where_between_user_3").OrWhereBetween("id", user.ID, user2.ID).Find(&users))
2933+
s.True(len(users) == 4)
2934+
})
2935+
}
2936+
}
2937+
2938+
func (s *QueryTestSuite) TestOrWhereNotBetween() {
2939+
for driver, query := range s.queries {
2940+
s.Run(driver.String(), func() {
2941+
user := User{Name: "or_where_between_user", Avatar: "or_where_between_avatar"}
2942+
s.Nil(query.Create(&user))
2943+
s.True(user.ID > 0)
2944+
2945+
user1 := User{Name: "or_where_between_user_1", Avatar: "or_where_between_avatar_1"}
2946+
s.Nil(query.Create(&user1))
2947+
s.True(user1.ID > 0)
2948+
2949+
user2 := User{Name: "or_where_between_user_2", Avatar: "or_where_between_avatar_2"}
2950+
s.Nil(query.Create(&user2))
2951+
s.True(user2.ID > 0)
2952+
2953+
user3 := User{Name: "or_where_between_user_3", Avatar: "or_where_between_avatar_3"}
2954+
s.Nil(query.Create(&user3))
2955+
s.True(user3.ID > 0)
2956+
2957+
var users []User
2958+
s.Nil(query.Where("name = ?", "or_where_between_user_3").OrWhereNotBetween("id", user.ID, user2.ID).Find(&users))
2959+
s.True(len(users) >= 1)
2960+
})
2961+
}
2962+
}
2963+
29122964
func (s *QueryTestSuite) TestWhereNull() {
29132965
for driver, query := range s.queries {
29142966
s.Run(driver.String(), func() {

mocks/database/orm/Query.go

Lines changed: 32 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mocks/database/orm/Transaction.go

Lines changed: 32 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)