@@ -2,92 +2,75 @@ package gq
2
2
3
3
import (
4
4
"fmt"
5
- "regexp"
6
5
"strings"
7
6
)
8
7
9
8
// Eq 等于 =
10
- func Eq (name string , v any ) * Cond {
11
- return & Cond {Name : name , Value : v , Operator : "=" }
9
+ func Eq [ T any ] (name string , v T , skip ... func ( T ) bool ) * Cond {
10
+ return & Cond {Name : name , Value : v , Opr : "=" , isSkip : skip != nil && skip [ 0 ]( v ) }
12
11
}
13
12
14
13
// Gt 大于 >
15
- func Gt (name string , v any ) * Cond {
16
- return & Cond {Name : name , Value : v , Operator : ">" }
14
+ func Gt [ T any ] (name string , v T , skip ... func ( T ) bool ) * Cond {
15
+ return & Cond {Name : name , Value : v , Opr : ">" , isSkip : skip != nil && skip [ 0 ]( v ) }
17
16
}
18
17
19
18
// Ge 大于等于 ≥
20
- func Ge (name string , v any ) * Cond {
21
- return & Cond {Name : name , Value : v , Operator : ">=" }
19
+ func Ge [ T any ] (name string , v T , skip ... func ( T ) bool ) * Cond {
20
+ return & Cond {Name : name , Value : v , Opr : ">=" , isSkip : skip != nil && skip [ 0 ]( v ) }
22
21
}
23
22
24
23
// Lt 小于 <
25
- func Lt (name string , v any ) * Cond {
26
- return & Cond {Name : name , Value : v , Operator : "<" }
24
+ func Lt [ T any ] (name string , v T , skip ... func ( T ) bool ) * Cond {
25
+ return & Cond {Name : name , Value : v , Opr : "<" , isSkip : skip != nil && skip [ 0 ]( v ) }
27
26
}
28
27
29
28
// Le 小于等于 ≤
30
- func Le (name string , v any ) * Cond {
31
- return & Cond {Name : name , Value : v , Operator : "<=" }
29
+ func Le [ T any ] (name string , v T , skip ... func ( T ) bool ) * Cond {
30
+ return & Cond {Name : name , Value : v , Opr : "<=" , isSkip : skip != nil && skip [ 0 ]( v ) }
32
31
}
33
32
34
33
// Ne 不等于 != <>
35
- func Ne (name string , v any ) * Cond {
36
- return & Cond {Name : name , Value : v , Operator : "!=" }
34
+ func Ne [ T any ] (name string , v T , skip ... func ( T ) bool ) * Cond {
35
+ return & Cond {Name : name , Value : v , Opr : "!=" , isSkip : skip != nil && skip [ 0 ]( v ) }
37
36
}
38
37
39
38
// Between 区间
40
- func Between (name string , first , second any ) * Cond {
39
+ func Between [ T any ] (name string , first , second T , skip ... func ( T , T ) bool ) * Cond {
41
40
return & Cond {
42
- Name : name ,
43
- Value : [2 ]any {first , second },
44
- Operator : "BETWEEN" ,
41
+ Name : name ,
42
+ Value : [2 ]any {first , second },
43
+ Opr : "BETWEEN" ,
44
+ isSkip : skip != nil && skip [0 ](first , second ),
45
45
}
46
46
}
47
47
48
48
// In 范围
49
- func In (name string , a ... any ) * Cond {
50
- if len (a ) == 1 {
49
+ func In [T any ](name string , a ... T ) * Cond {
50
+ if a != nil {
51
+ // 是否切片或数组
51
52
if strings .HasPrefix (fmt .Sprintf ("%T" , a [0 ]), "[" ) {
52
- return & Cond {Name : name , Value : a [0 ], Operator : "IN" }
53
+ return & Cond {Name : name , Value : a [0 ], Opr : "IN" }
53
54
}
54
55
}
55
- return & Cond {Name : name , Value : a , Operator : "IN" }
56
+ return & Cond {Name : name , Value : a , Opr : "IN" }
56
57
}
57
58
58
59
// Like 模糊查询
59
- func Like (name string , v string ) * Cond {
60
- return & Cond {Name : name , Value : v , Operator : "LIKE" }
60
+ func Like (name string , v string , skip ... func ( string ) bool ) * Cond {
61
+ return & Cond {Name : name , Value : v , Opr : "LIKE" , isSkip : skip != nil && skip [ 0 ]( v ) }
61
62
}
62
63
63
64
// Or 或者条件
64
- func Or (a ... Builder ) * WhereBuilder {
65
- return & WhereBuilder { List : a , Sep : "OR" }
65
+ func Or (a ... Builder ) * List {
66
+ return & List { Builders : a , Sep : "OR" }
66
67
}
67
68
68
69
// And 并且条件
69
- func And (a ... Builder ) * WhereBuilder {
70
- return & WhereBuilder { List : a , Sep : "AND" }
70
+ func And (a ... Builder ) * List {
71
+ return & List { Builders : a , Sep : "AND" }
71
72
}
72
73
73
- func Where (a ... Builder ) (sql string ) {
74
- re := regexp .MustCompile ("^\n ? +AND |\n ? +AND $" )
75
- for _ , c := range a {
76
- s := c .SQL ()
77
- if s == "" {
78
- continue
79
- }
80
-
81
- if _ , ok := c .(* WhereBuilder ); ok {
82
- s += "\n "
83
- }
84
-
85
- if strings .HasSuffix (s , "\n " ) {
86
- sql = re .ReplaceAllString (sql , "" ) + "\n AND " + s + " AND "
87
- } else {
88
- sql += s + " AND "
89
- }
90
- }
91
-
92
- return re .ReplaceAllString (sql , "" )
74
+ func Where (a ... Builder ) * WhereBuilder {
75
+ return & WhereBuilder {Builders : a }
93
76
}
0 commit comments