-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuilder.go
126 lines (111 loc) · 2.61 KB
/
builder.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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package pgxjrep
import (
"context"
"fmt"
"github.com/tidwall/gjson"
)
type Builder struct {
*DbSchema
}
func NewBuilder(conn PgxConn, ctx context.Context) (*Builder, error) {
dbSchema, err := NewSchema(conn, ctx)
if err != nil {
return nil, err
}
return &Builder{
DbSchema: dbSchema,
}, nil
}
func (b *Builder) Query(target string) *QueryStatement {
p := ¶ms{}
q := &QueryStatement{
builder: b,
schema: b.DbSchema,
target: target,
whereClause: &whereClause{
schema: b.DbSchema,
target: target,
statementArgs: make([]interface{}, 0),
values: make(map[string]interface{}),
filter: make(map[string]interface{}),
params: p,
},
params: p,
}
return q
}
func (b *Builder) Insert(target string) *InsertStatement {
return &InsertStatement{
builder: b,
schema: b.DbSchema,
target: target,
returningClause: &returningClause{
schema: b.DbSchema,
target: target,
},
params: ¶ms{},
}
}
func (b *Builder) Update(target string) *UpdateStatement {
p := ¶ms{}
return &UpdateStatement{
builder: b,
schema: b.DbSchema,
target: target,
values: make(map[string]interface{}),
whereClause: &whereClause{
schema: b.DbSchema,
target: target,
values: make(map[string]interface{}),
filter: make(map[string]interface{}),
params: p,
},
returningClause: &returningClause{
schema: b.DbSchema,
target: target,
},
params: p,
}
}
func (b *Builder) Delete(target string) *DeleteStatement {
p := ¶ms{}
return &DeleteStatement{
builder: b,
schema: b.DbSchema,
target: target,
whereClause: &whereClause{
schema: b.DbSchema,
target: target,
values: make(map[string]interface{}),
filter: make(map[string]interface{}),
params: p,
},
returningClause: &returningClause{
schema: b.DbSchema,
target: target,
},
params: p,
}
}
func (b *Builder) Exec(conn PgxConn, ctx context.Context, sql string, args []interface{}) (string, error) {
ct, err := conn.Exec(ctx, sql, args...)
if err != nil {
return "", err
}
return fmt.Sprintf("{\"rowsAffected\": %v}", ct.RowsAffected()), nil
}
func (b *Builder) One(conn PgxConn, ctx context.Context, sql string, args []interface{}) (string, error) {
json := new(string)
err := conn.QueryRow(ctx, sql, args...).Scan(json)
if err != nil {
return "", err
}
return *json, nil
}
func (b *Builder) OneMap(conn PgxConn, ctx context.Context, sql string, args []interface{}) (map[string]interface{}, error) {
json, err := b.One(conn, ctx, sql, args)
if err != nil {
return nil, err
}
return gjson.Parse(json).Value().(map[string]interface{}), nil
}