Mercurial > gemma
comparison pkg/controllers/importqueue.go @ 2682:9a493d27bf3f import-overview-rework
Added /api/imports?count=true to only count the results.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Fri, 15 Mar 2019 12:29:12 +0100 |
parents | 097b4b964ed9 |
children | 0f467af6bf5c |
comparison
equal
deleted
inserted
replaced
2681:097b4b964ed9 | 2682:9a493d27bf3f |
---|---|
37 WITH warned AS ( | 37 WITH warned AS ( |
38 SELECT distinct(import_id) AS id | 38 SELECT distinct(import_id) AS id |
39 FROM import.import_logs | 39 FROM import.import_logs |
40 WHERE kind = 'warn'::log_type | 40 WHERE kind = 'warn'::log_type |
41 )` | 41 )` |
42 selectImportsCountSQL = warningSQLPrefix + ` | |
43 SELECT count(*) | |
44 FROM import.imports | |
45 WHERE | |
46 ` | |
42 selectImportsSQL = warningSQLPrefix + ` | 47 selectImportsSQL = warningSQLPrefix + ` |
43 SELECT | 48 SELECT |
44 imports.id AS id, | 49 imports.id AS id, |
45 state::varchar, | 50 state::varchar, |
46 enqueued, | 51 enqueued, |
157 a = new(filterBuilder) | 162 a = new(filterBuilder) |
158 b = new(filterBuilder) | 163 b = new(filterBuilder) |
159 | 164 |
160 var noBefore, noAfter bool | 165 var noBefore, noAfter bool |
161 | 166 |
162 l.stmt.WriteString(selectImportsSQL) | 167 var counting bool |
168 | |
169 switch count := strings.ToLower(req.FormValue("count")); count { | |
170 case "1", "t", "true": | |
171 counting = true | |
172 l.stmt.WriteString(selectImportsCountSQL) | |
173 default: | |
174 l.stmt.WriteString(selectImportsSQL) | |
175 } | |
163 a.stmt.WriteString(selectAfterSQL) | 176 a.stmt.WriteString(selectAfterSQL) |
164 b.stmt.WriteString(selectBeforeSQL) | 177 b.stmt.WriteString(selectBeforeSQL) |
165 | 178 |
166 cond := func(format string, v ...interface{}) { | 179 cond := func(format string, v ...interface{}) { |
167 l.cond(format, v...) | 180 l.cond(format, v...) |
226 } | 239 } |
227 if !a.hasCond { | 240 if !a.hasCond { |
228 a.stmt.WriteString(" TRUE ") | 241 a.stmt.WriteString(" TRUE ") |
229 } | 242 } |
230 | 243 |
231 l.stmt.WriteString(" ORDER BY enqueued DESC ") | 244 if !counting { |
232 a.stmt.WriteString(" ORDER BY enqueued LIMIT 1") | 245 l.stmt.WriteString(" ORDER BY enqueued DESC ") |
233 b.stmt.WriteString(" ORDER BY enqueued LIMIT 1") | 246 a.stmt.WriteString(" ORDER BY enqueued LIMIT 1") |
247 b.stmt.WriteString(" ORDER BY enqueued LIMIT 1") | |
248 } | |
234 | 249 |
235 if noBefore { | 250 if noBefore { |
236 b = nil | 251 b = nil |
237 } | 252 } |
238 if noAfter { | 253 if noAfter { |
266 if list, before, after, err = buildFilters(req); err != nil { | 281 if list, before, after, err = buildFilters(req); err != nil { |
267 return | 282 return |
268 } | 283 } |
269 | 284 |
270 ctx := req.Context() | 285 ctx := req.Context() |
286 | |
287 // Fast path for counting | |
288 | |
289 switch count := strings.ToLower(req.FormValue("count")); count { | |
290 case "1", "t", "true": | |
291 var count int64 | |
292 err = conn.QueryRowContext(ctx, list.stmt.String(), list.args...).Scan(&count) | |
293 switch { | |
294 case err == sql.ErrNoRows: | |
295 count, err = 0, nil | |
296 case err != nil: | |
297 return | |
298 } | |
299 jr = JSONResult{Result: count} | |
300 return | |
301 } | |
302 | |
303 // Generate the list | |
271 | 304 |
272 var rows *sql.Rows | 305 var rows *sql.Rows |
273 if rows, err = conn.QueryContext(ctx, list.stmt.String(), list.args...); err != nil { | 306 if rows, err = conn.QueryContext(ctx, list.stmt.String(), list.args...); err != nil { |
274 return | 307 return |
275 } | 308 } |