-
Notifications
You must be signed in to change notification settings - Fork 1
/
where_in_values.go
63 lines (56 loc) · 1.46 KB
/
where_in_values.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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package xpg
import (
"bytes"
"strconv"
)
// WhereInValues Адаптор для передачи слайсов, в запрос WHERE IN
type WhereInValues struct {
values []interface{}
}
// Int Загрузка ...int
func (w *WhereInValues) Int(in ...int) *WhereInValues {
w.values = make([]interface{}, len(in))
for i, v := range in {
w.values[i] = v
}
return w
}
// Int64 Загрузка ...int64
func (w *WhereInValues) Int64(in ...int64) *WhereInValues {
w.values = make([]interface{}, len(in))
for i, v := range in {
w.values[i] = v
}
return w
}
// String Загрузка ...string
func (w *WhereInValues) String(in ...string) *WhereInValues {
w.values = make([]interface{}, len(in))
for i, v := range in {
w.values[i] = v
}
return w
}
// Interface Загрузка ...interface{}
func (w *WhereInValues) Interface(in ...interface{}) *WhereInValues {
w.values = make([]interface{}, len(in))
copy(w.values, in)
return w
}
// Sql Вернёт подготовленную строку запроса и дополненный слайс аргументов
func (w *WhereInValues) Sql(args []interface{}) (string, []interface{}) {
var buff bytes.Buffer
var start = len(args) + 1
args = append(args, w.values...)
var end = len(args)
buff.WriteString(" IN(")
for i := start; i <= end; i++ {
buff.WriteString("$")
buff.WriteString(strconv.Itoa(i))
if i < end {
buff.WriteString(",")
}
}
buff.WriteString(")")
return buff.String(), args
}