-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmultifilter.go
47 lines (38 loc) · 851 Bytes
/
multifilter.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package patcher
import "strings"
type Filter interface {
Joiner
Wherer
}
type MultiFilter interface {
Filter
Add(filter any)
}
type multiFilter struct {
joinSql *strings.Builder
joinArgs []any
whereSql *strings.Builder
whereArgs []any
}
func (m *multiFilter) Join() (sqlStr string, args []any) {
return m.joinSql.String(), m.joinArgs
}
func (m *multiFilter) Where() (sqlStr string, args []any) {
return m.whereSql.String(), m.whereArgs
}
func (m *multiFilter) Add(filter any) {
if joiner, ok := filter.(Joiner); ok {
appendJoin(joiner, m.joinSql, &m.joinArgs)
}
if wherer, ok := filter.(Wherer); ok {
appendWhere(wherer, m.whereSql, &m.whereArgs)
}
}
func NewMultiFilter() MultiFilter {
return &multiFilter{
joinSql: new(strings.Builder),
joinArgs: nil,
whereSql: new(strings.Builder),
whereArgs: nil,
}
}