store - filters.go
1 package store
2
3 type Filter interface {
4 SQL() string
5 Vars() []interface{}
6 }
7
8 type And []Filter
9
10 func (a And) SQL() string {
11 sql := "("
12 for n, f := range a {
13 if n > 0 {
14 sql += " AND "
15 }
16 sql += f.SQL()
17 }
18 sql += ")"
19 return sql
20 }
21
22 func (a And) Vars() []interface{} {
23 var vars []interface{}
24 for _, f := range a {
25 vars = append(vars, f.Vars()...)
26 }
27 return vars
28 }
29
30 type Or []Filter
31
32 func (o Or) SQL() string {
33 sql := "("
34 for n, f := range o {
35 if n > 0 {
36 sql += " OR "
37 }
38 sql += f.SQL()
39 }
40 sql += ")"
41 return sql
42 }
43
44 func (o Or) Vars() []interface{} {
45 var vars []interface{}
46 for _, f := range o {
47 vars = append(vars, f.Vars()...)
48 }
49 return vars
50 }