1
1
{{define "queryCodeStd"}}
2
2
{{range $.AllQueries .SourceName}}
3
+ {{$query := .}}
3
4
const {{.ConstantName}} = {{$.Q}}-- name: {{.MethodName}} {{.Cmd}}
4
5
{{escape .SQL}}
5
6
{{$.Q}}
@@ -34,11 +35,7 @@ func (r *{{ .MethodName }}Stmt) bind(q *{{ .ReceiverType }}, {{ .Arg.Pair }}) {
34
35
{{- if .Arg.HasSqlcSlices }}
35
36
{{- range .Arg.Fields }}
36
37
{{- if .HasSqlcSlice }}
37
- if len({{ .VariableForField }}) > 0 {
38
- query = strings.Replace(query, "/*SLICE:{{.Column.Name}}*/?", strings.Repeat(",?", len({{ .VariableForField }}))[1:], 1)
39
- } else {
40
- query = strings.Replace(query, "/*SLICE:{{.Column.Name}}*/?", "NULL", 1)
41
- }
38
+ query = strings.Replace(query, "/*SLICE:{{.Column.Name}}*/?", slicePlaceholders(len({{ .VariableForField }})), 1)
42
39
{{- end }}
43
40
{{- end }}
44
41
{{- end }}
@@ -74,7 +71,14 @@ func (r *{{ .MethodName }}Stmt) Next() bool {
74
71
if r.err != nil {
75
72
return false
76
73
}
77
- {{- if ne .Cmd ":exec" }}
74
+ return r.Fetch()
75
+ }
76
+
77
+ func (r *{{ .MethodName }}Stmt) Fetch() bool {
78
+ if r.err != nil {
79
+ return false
80
+ }
81
+
78
82
{{ $fields := .Ret.Fields }}
79
83
{{- if $fields }}
80
84
col := 0
@@ -85,7 +89,7 @@ func (r *{{ .MethodName }}Stmt) Next() bool {
85
89
{{- template "fetchColumn" . }}
86
90
{{- end }}
87
91
{{- end }}
88
- {{- end }}
92
+
89
93
return r.err == nil
90
94
}
91
95
@@ -95,14 +99,14 @@ func (q *{{ .ReceiverType }}) {{.MethodName}}({{ .Arg.Pair }}) (result {{.Ret.De
95
99
r.bind(q, {{ .Arg.Names }})
96
100
defer r.reset()
97
101
ok := r.Next()
98
- err = r.Err ()
102
+ err = r.takeErr ()
99
103
if err != nil {
100
104
return
101
105
}
102
106
if !ok {
103
- err = lib.ErrorWithDepth (errNoRows, 2 )
107
+ err = lib.WrapWithDepth (errNoRows, 3 )
104
108
} else if r.Next() {
105
- err = lib.ErrorWithDepth (errTooManyRows, 2 )
109
+ err = lib.WrapWithDepth (errTooManyRows, 3 )
106
110
} else {
107
111
result = r.Row
108
112
}
@@ -118,7 +122,7 @@ func (q *{{ .ReceiverType }}) {{.MethodName}}({{ .Arg.Pair }}) (results []{{.Ret
118
122
for r.Next() {
119
123
results = append(results, r.Row)
120
124
}
121
- err = r.Err ()
125
+ err = r.takeErr ()
122
126
if err != nil {
123
127
results = nil
124
128
}
@@ -132,7 +136,7 @@ func (q *{{ .ReceiverType }}) {{.MethodName}}({{ .Arg.Pair }}) (results map[{{.R
132
136
r.bind(q, {{ .Arg.Names }})
133
137
defer r.reset()
134
138
if !r.Next() {
135
- err = r.Err ()
139
+ err = r.takeErr ()
136
140
return
137
141
}
138
142
results = map[{{.Ret.KeyType}}]{{.Ret.DefineType}}{
@@ -141,7 +145,7 @@ func (q *{{ .ReceiverType }}) {{.MethodName}}({{ .Arg.Pair }}) (results map[{{.R
141
145
for r.Next() {
142
146
results[r.Key] = r.Row
143
147
}
144
- err = r.Err ()
148
+ err = r.takeErr ()
145
149
if err != nil {
146
150
results = nil
147
151
}
@@ -150,20 +154,79 @@ func (q *{{ .ReceiverType }}) {{.MethodName}}({{ .Arg.Pair }}) (results map[{{.R
150
154
{{end}}
151
155
152
156
{{if eq .Cmd ":iter"}}
153
- type {{.MethodName}}Iterator func(yield func(row {{.Ret.DefineType}}) bool)
157
+ func (r *{{ .MethodName }}Stmt) HasNext() bool {
158
+ if !r.iter.Next() {
159
+ return false
160
+ }
161
+ if r.err != nil {
162
+ return false
163
+ }
164
+ return r.err == nil
165
+ }
154
166
155
- func (q *{{ .ReceiverType }}) {{.MethodName}}Cursor({{ .Arg.Pair }}) {{.MethodName}}Iterator {
156
- r := &q.{{ .FieldName }}
157
- r.bind(q, {{ .Arg.Names }})
167
+ func (r *{{ .MethodName }}Stmt) Close() *lib.Error {
168
+ err := r.takeErr()
169
+ r.reset()
170
+ return err
171
+ }
172
+
173
+ func (r *{{ .MethodName }}Stmt) Range() func(yield func(row {{.Ret.DefineType}}) bool) {
158
174
return func(yield func(row {{.Ret.DefineType}}) bool) {
159
175
defer r.reset()
160
176
for r.Next() && yield(r.Row) {}
161
177
}
162
178
}
163
179
164
- func (_ {{.MethodName}}Iterator) Close(q *{{ .ReceiverType }}) *lib.Error {
165
- return q.{{ .FieldName }}.Err()
180
+ func (q *{{ .ReceiverType }}) {{.MethodName}}Cursor({{ .Arg.Pair }}) *{{ .MethodName }}Stmt {
181
+ r := &q.{{ .FieldName }}
182
+ r.bind(q, {{ .Arg.Names }})
183
+ return r
184
+ }
185
+
186
+ {{- range $index, $field := .Ret.Fields }}
187
+ {{- if $field.IsNullable }}
188
+ func (r *{{ $query.MethodName }}Stmt) Peek{{ $field.Name }}() {{ $field.BindType }} {
189
+ const col = {{$index}}
190
+ return {{ $field.FetchMethod }}(col)
191
+ }
192
+ {{- else }}
193
+ func (r *{{ $query.MethodName }}Stmt) Peek{{ $field.Name }}() (val {{ $field.BindType }}, isNull bool) {
194
+ const col = {{$index}}
195
+ if r.stmt.ColumnIsNull(col) {
196
+ isNull = true
197
+ return
198
+ }
199
+ val = {{ $field.FetchMethod }}(col)
200
+ return
201
+ }
202
+ {{- end }}
203
+
204
+ func (r *{{ $query.MethodName }}Stmt) Get{{ $field.Name }}() (val {{ $field.Type }}, ok bool) {
205
+ var raw {{ $field.BindType }}
206
+ {{- if $field.IsNullable }}
207
+ raw = r.Peek{{ $field.Name }}()
208
+ {{- else }}
209
+ var isNull bool
210
+ raw, isNull = r.Peek{{ $field.Name }}()
211
+ if isNull {
212
+ return val, true
213
+ }
214
+ {{- end }}
215
+ {{- if $field.Deserialize }}
216
+ var err *lib.Error
217
+ val, err = {{ $field.DeserializeMethod }}(raw)
218
+ if err != nil {
219
+ r.setErr(err)
220
+ return val, false
221
+ }
222
+ {{- else if $field.NeedsCast $field.BindType }}
223
+ val = {{ $field.Type }}(raw)
224
+ {{- else }}
225
+ val = raw
226
+ {{- end }}
227
+ return val, true
166
228
}
229
+ {{- end }}
167
230
{{end}}
168
231
169
232
{{if eq .Cmd ":exec"}}
@@ -172,7 +235,7 @@ func (q *{{ .ReceiverType }}) {{.MethodName}}({{ .Arg.Pair }}) *lib.Error {
172
235
r.bind(q, {{ .Arg.Names }})
173
236
defer r.reset()
174
237
r.Next()
175
- return r.Err ()
238
+ return r.takeErr ()
176
239
}
177
240
{{end}}
178
241
@@ -253,7 +316,7 @@ func (q *{{ .ReceiverType }}) {{.MethodName}}({{ .Arg.Pair }}) *lib.Error {
253
316
{
254
317
{{- end }}
255
318
raw := {{ .FetchMethod }}(col)
256
- {{- if .Serialize }}
319
+ {{- if .Deserialize }}
257
320
v, err := {{ .DeserializeMethod }}(raw)
258
321
if err != nil {
259
322
r.setErr(err)
0 commit comments