44package  sqlbuilder
55
66import  (
7- 	"fmt" 
87	"strings" 
98)
109
@@ -15,17 +14,25 @@ type Cond struct {
1514
1615// Equal represents "field = value". 
1716func  (c  * Cond ) Equal (field  string , value  interface {}) string  {
18- 	return  fmt .Sprintf ("%s = %s" , Escape (field ), c .Args .Add (value ))
17+ 	buf  :=  & strings.Builder {}
18+ 	buf .WriteString (Escape (field ))
19+ 	buf .WriteString (" = " )
20+ 	buf .WriteString (c .Args .Add (value ))
21+ 	return  buf .String ()
1922}
2023
2124// E is an alias of Equal. 
2225func  (c  * Cond ) E (field  string , value  interface {}) string  {
2326	return  c .Equal (field , value )
2427}
2528
26- // NotEqual represents "field !=  value". 
29+ // NotEqual represents "field <>  value". 
2730func  (c  * Cond ) NotEqual (field  string , value  interface {}) string  {
28- 	return  fmt .Sprintf ("%s <> %s" , Escape (field ), c .Args .Add (value ))
31+ 	buf  :=  & strings.Builder {}
32+ 	buf .WriteString (Escape (field ))
33+ 	buf .WriteString (" <> " )
34+ 	buf .WriteString (c .Args .Add (value ))
35+ 	return  buf .String ()
2936}
3037
3138// NE is an alias of NotEqual. 
@@ -35,7 +42,11 @@ func (c *Cond) NE(field string, value interface{}) string {
3542
3643// GreaterThan represents "field > value". 
3744func  (c  * Cond ) GreaterThan (field  string , value  interface {}) string  {
38- 	return  fmt .Sprintf ("%s > %s" , Escape (field ), c .Args .Add (value ))
45+ 	buf  :=  & strings.Builder {}
46+ 	buf .WriteString (Escape (field ))
47+ 	buf .WriteString (" > " )
48+ 	buf .WriteString (c .Args .Add (value ))
49+ 	return  buf .String ()
3950}
4051
4152// G is an alias of GreaterThan. 
@@ -45,7 +56,11 @@ func (c *Cond) G(field string, value interface{}) string {
4556
4657// GreaterEqualThan represents "field >= value". 
4758func  (c  * Cond ) GreaterEqualThan (field  string , value  interface {}) string  {
48- 	return  fmt .Sprintf ("%s >= %s" , Escape (field ), c .Args .Add (value ))
59+ 	buf  :=  & strings.Builder {}
60+ 	buf .WriteString (Escape (field ))
61+ 	buf .WriteString (" >= " )
62+ 	buf .WriteString (c .Args .Add (value ))
63+ 	return  buf .String ()
4964}
5065
5166// GE is an alias of GreaterEqualThan. 
@@ -55,7 +70,11 @@ func (c *Cond) GE(field string, value interface{}) string {
5570
5671// LessThan represents "field < value". 
5772func  (c  * Cond ) LessThan (field  string , value  interface {}) string  {
58- 	return  fmt .Sprintf ("%s < %s" , Escape (field ), c .Args .Add (value ))
73+ 	buf  :=  & strings.Builder {}
74+ 	buf .WriteString (Escape (field ))
75+ 	buf .WriteString (" < " )
76+ 	buf .WriteString (c .Args .Add (value ))
77+ 	return  buf .String ()
5978}
6079
6180// L is an alias of LessThan. 
@@ -65,7 +84,11 @@ func (c *Cond) L(field string, value interface{}) string {
6584
6685// LessEqualThan represents "field <= value". 
6786func  (c  * Cond ) LessEqualThan (field  string , value  interface {}) string  {
68- 	return  fmt .Sprintf ("%s <= %s" , Escape (field ), c .Args .Add (value ))
87+ 	buf  :=  & strings.Builder {}
88+ 	buf .WriteString (Escape (field ))
89+ 	buf .WriteString (" <= " )
90+ 	buf .WriteString (c .Args .Add (value ))
91+ 	return  buf .String ()
6992}
7093
7194// LE is an alias of LessEqualThan. 
@@ -81,7 +104,12 @@ func (c *Cond) In(field string, value ...interface{}) string {
81104		vs  =  append (vs , c .Args .Add (v ))
82105	}
83106
84- 	return  fmt .Sprintf ("%s IN (%s)" , Escape (field ), strings .Join (vs , ", " ))
107+ 	buf  :=  & strings.Builder {}
108+ 	buf .WriteString (Escape (field ))
109+ 	buf .WriteString (" IN (" )
110+ 	buf .WriteString (strings .Join (vs , ", " ))
111+ 	buf .WriteString (")" )
112+ 	return  buf .String ()
85113}
86114
87115// NotIn represents "field NOT IN (value...)". 
@@ -92,47 +120,158 @@ func (c *Cond) NotIn(field string, value ...interface{}) string {
92120		vs  =  append (vs , c .Args .Add (v ))
93121	}
94122
95- 	return  fmt .Sprintf ("%s NOT IN (%s)" , Escape (field ), strings .Join (vs , ", " ))
123+ 	buf  :=  & strings.Builder {}
124+ 	buf .WriteString (Escape (field ))
125+ 	buf .WriteString (" NOT IN (" )
126+ 	buf .WriteString (strings .Join (vs , ", " ))
127+ 	buf .WriteString (")" )
128+ 	return  buf .String ()
96129}
97130
98131// Like represents "field LIKE value". 
99132func  (c  * Cond ) Like (field  string , value  interface {}) string  {
100- 	return  fmt .Sprintf ("%s LIKE %s" , Escape (field ), c .Args .Add (value ))
133+ 	buf  :=  & strings.Builder {}
134+ 	buf .WriteString (Escape (field ))
135+ 	buf .WriteString (" LIKE " )
136+ 	buf .WriteString (c .Args .Add (value ))
137+ 	return  buf .String ()
101138}
102139
103140// NotLike represents "field NOT LIKE value". 
104141func  (c  * Cond ) NotLike (field  string , value  interface {}) string  {
105- 	return  fmt .Sprintf ("%s NOT LIKE %s" , Escape (field ), c .Args .Add (value ))
142+ 	buf  :=  & strings.Builder {}
143+ 	buf .WriteString (Escape (field ))
144+ 	buf .WriteString (" NOT LIKE " )
145+ 	buf .WriteString (c .Args .Add (value ))
146+ 	return  buf .String ()
106147}
107148
108149// IsNull represents "field IS NULL". 
109150func  (c  * Cond ) IsNull (field  string ) string  {
110- 	return  fmt .Sprintf ("%s IS NULL" , Escape (field ))
151+ 	buf  :=  & strings.Builder {}
152+ 	buf .WriteString (Escape (field ))
153+ 	buf .WriteString (" IS NULL" )
154+ 	return  buf .String ()
111155}
112156
113157// IsNotNull represents "field IS NOT NULL". 
114158func  (c  * Cond ) IsNotNull (field  string ) string  {
115- 	return  fmt .Sprintf ("%s IS NOT NULL" , Escape (field ))
159+ 	buf  :=  & strings.Builder {}
160+ 	buf .WriteString (Escape (field ))
161+ 	buf .WriteString (" IS NOT NULL" )
162+ 	return  buf .String ()
116163}
117164
118165// Between represents "field BETWEEN lower AND upper". 
119166func  (c  * Cond ) Between (field  string , lower , upper  interface {}) string  {
120- 	return  fmt .Sprintf ("%s BETWEEN %s AND %s" , Escape (field ), c .Args .Add (lower ), c .Args .Add (upper ))
167+ 	buf  :=  & strings.Builder {}
168+ 	buf .WriteString (Escape (field ))
169+ 	buf .WriteString (" BETWEEN " )
170+ 	buf .WriteString (c .Args .Add (lower ))
171+ 	buf .WriteString (" AND " )
172+ 	buf .WriteString (c .Args .Add (upper ))
173+ 	return  buf .String ()
121174}
122175
123176// NotBetween represents "field NOT BETWEEN lower AND upper". 
124177func  (c  * Cond ) NotBetween (field  string , lower , upper  interface {}) string  {
125- 	return  fmt .Sprintf ("%s NOT BETWEEN %s AND %s" , Escape (field ), c .Args .Add (lower ), c .Args .Add (upper ))
178+ 	buf  :=  & strings.Builder {}
179+ 	buf .WriteString (Escape (field ))
180+ 	buf .WriteString (" NOT BETWEEN " )
181+ 	buf .WriteString (c .Args .Add (lower ))
182+ 	buf .WriteString (" AND " )
183+ 	buf .WriteString (c .Args .Add (upper ))
184+ 	return  buf .String ()
126185}
127186
128187// Or represents OR logic like "expr1 OR expr2 OR expr3". 
129188func  (c  * Cond ) Or (orExpr  ... string ) string  {
130- 	return  fmt .Sprintf ("(%s)" , strings .Join (orExpr , " OR " ))
189+ 	buf  :=  & strings.Builder {}
190+ 	buf .WriteString ("(" )
191+ 	buf .WriteString (strings .Join (orExpr , " OR " ))
192+ 	buf .WriteString (")" )
193+ 	return  buf .String ()
131194}
132195
133196// And represents AND logic like "expr1 AND expr2 AND expr3". 
134197func  (c  * Cond ) And (andExpr  ... string ) string  {
135- 	return  fmt .Sprintf ("(%s)" , strings .Join (andExpr , " AND " ))
198+ 	buf  :=  & strings.Builder {}
199+ 	buf .WriteString ("(" )
200+ 	buf .WriteString (strings .Join (andExpr , " AND " ))
201+ 	buf .WriteString (")" )
202+ 	return  buf .String ()
203+ }
204+ 
205+ // Exists represents "EXISTS (subquery)". 
206+ func  (c  * Cond ) Exists (subquery  interface {}) string  {
207+ 	buf  :=  & strings.Builder {}
208+ 	buf .WriteString ("EXISTS (" )
209+ 	buf .WriteString (c .Args .Add (subquery ))
210+ 	buf .WriteString (")" )
211+ 	return  buf .String ()
212+ }
213+ 
214+ // NotExists represents "NOT EXISTS (subquery)". 
215+ func  (c  * Cond ) NotExists (subquery  interface {}) string  {
216+ 	buf  :=  & strings.Builder {}
217+ 	buf .WriteString ("NOT EXISTS (" )
218+ 	buf .WriteString (c .Args .Add (subquery ))
219+ 	buf .WriteString (")" )
220+ 	return  buf .String ()
221+ }
222+ 
223+ // Any represents "field op ANY (value...)". 
224+ func  (c  * Cond ) Any (field , op  string , value  ... interface {}) string  {
225+ 	vs  :=  make ([]string , 0 , len (value ))
226+ 
227+ 	for  _ , v  :=  range  value  {
228+ 		vs  =  append (vs , c .Args .Add (v ))
229+ 	}
230+ 
231+ 	buf  :=  & strings.Builder {}
232+ 	buf .WriteString (Escape (field ))
233+ 	buf .WriteString (" " )
234+ 	buf .WriteString (op )
235+ 	buf .WriteString (" ANY (" )
236+ 	buf .WriteString (strings .Join (vs , ", " ))
237+ 	buf .WriteString (")" )
238+ 	return  buf .String ()
239+ }
240+ 
241+ // All represents "field op ALL (value...)". 
242+ func  (c  * Cond ) All (field , op  string , value  ... interface {}) string  {
243+ 	vs  :=  make ([]string , 0 , len (value ))
244+ 
245+ 	for  _ , v  :=  range  value  {
246+ 		vs  =  append (vs , c .Args .Add (v ))
247+ 	}
248+ 
249+ 	buf  :=  & strings.Builder {}
250+ 	buf .WriteString (Escape (field ))
251+ 	buf .WriteString (" " )
252+ 	buf .WriteString (op )
253+ 	buf .WriteString (" ALL (" )
254+ 	buf .WriteString (strings .Join (vs , ", " ))
255+ 	buf .WriteString (")" )
256+ 	return  buf .String ()
257+ }
258+ 
259+ // Some represents "field op SOME (value...)". 
260+ func  (c  * Cond ) Some (field , op  string , value  ... interface {}) string  {
261+ 	vs  :=  make ([]string , 0 , len (value ))
262+ 
263+ 	for  _ , v  :=  range  value  {
264+ 		vs  =  append (vs , c .Args .Add (v ))
265+ 	}
266+ 
267+ 	buf  :=  & strings.Builder {}
268+ 	buf .WriteString (Escape (field ))
269+ 	buf .WriteString (" " )
270+ 	buf .WriteString (op )
271+ 	buf .WriteString (" SOME (" )
272+ 	buf .WriteString (strings .Join (vs , ", " ))
273+ 	buf .WriteString (")" )
274+ 	return  buf .String ()
136275}
137276
138277// Var returns a placeholder for value. 
0 commit comments