Mercurial > gemma
comparison pkg/controllers/importqueue.go @ 1315:24e4c60c2606
Simplified and fixed filtering of import queue listing.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Fri, 23 Nov 2018 19:41:31 +0100 |
parents | 486d66a9565c |
children | d753ce6cf588 |
comparison
equal
deleted
inserted
replaced
1314:97d9e689520b | 1315:24e4c60c2606 |
---|---|
12 // * Sascha L. Teichmann <sascha.teichmann@intevation.de> | 12 // * Sascha L. Teichmann <sascha.teichmann@intevation.de> |
13 | 13 |
14 package controllers | 14 package controllers |
15 | 15 |
16 import ( | 16 import ( |
17 "context" | |
18 "database/sql" | 17 "database/sql" |
19 "fmt" | 18 "fmt" |
20 "log" | 19 "log" |
21 "net/http" | 20 "net/http" |
22 "strconv" | 21 "strconv" |
89 return &ta | 88 return &ta |
90 } | 89 } |
91 | 90 |
92 func queryImportListStmt( | 91 func queryImportListStmt( |
93 conn *sql.Conn, | 92 conn *sql.Conn, |
94 ctx context.Context, | 93 req *http.Request, |
95 vars map[string]string, | |
96 ) (*sql.Rows, error) { | 94 ) (*sql.Rows, error) { |
97 | 95 |
98 var ( | 96 var ( |
99 stmt strings.Builder | 97 stmt strings.Builder |
100 args []interface{} | 98 args []interface{} |
101 states *pgtype.TextArray | 99 states *pgtype.TextArray |
102 kinds *pgtype.TextArray | 100 kinds *pgtype.TextArray |
103 ) | 101 ) |
104 | 102 |
105 if st, found := vars["states"]; found { | 103 arg := func(format string, v interface{}) { |
104 fmt.Fprintf(&stmt, format, len(args)+1) | |
105 args = append(args, v) | |
106 } | |
107 | |
108 if st := req.FormValue("states"); st != "" { | |
106 states = toTextArray(st, imports.ImportStateNames) | 109 states = toTextArray(st, imports.ImportStateNames) |
107 } | 110 } |
108 | 111 |
109 if ks, found := vars["kinds"]; found { | 112 if ks := req.FormValue("kinds"); ks != "" { |
110 kinds = toTextArray(ks, imports.ImportKindNames) | 113 kinds = toTextArray(ks, imports.ImportKindNames) |
111 } | 114 } |
112 | 115 |
113 stmt.WriteString(selectImportsSQL) | 116 stmt.WriteString(selectImportsSQL) |
114 if states != nil || kinds != nil { | 117 if states != nil || kinds != nil { |
115 stmt.WriteString(" WHERE ") | 118 stmt.WriteString(" WHERE ") |
116 } | 119 } |
117 | 120 |
118 if states != nil { | 121 if states != nil { |
119 fmt.Fprintf(&stmt, " states = ANY($%d) ", len(args)+1) | 122 arg(" state = ANY($%d) ", states) |
120 args = append(args, states) | |
121 } | 123 } |
122 | 124 |
123 if states != nil && kinds != nil { | 125 if states != nil && kinds != nil { |
124 stmt.WriteString("AND") | 126 stmt.WriteString("AND") |
125 } | 127 } |
126 | 128 |
127 if kinds != nil { | 129 if kinds != nil { |
128 fmt.Fprintf(&stmt, " kind = ANY($%d) ", len(args)+1) | 130 arg(" kind = ANY($%d) ", kinds) |
129 args = append(args, kinds) | |
130 } | 131 } |
131 | 132 |
132 stmt.WriteString(" ORDER BY enqueued DESC ") | 133 stmt.WriteString(" ORDER BY enqueued DESC ") |
133 | 134 |
134 if lim, found := vars["limit"]; found { | 135 if lim := req.FormValue("limit"); lim != "" { |
135 fmt.Fprintf(&stmt, " LIMIT $%d ", len(args)+1) | 136 limit, err := strconv.ParseInt(lim, 10, 64) |
136 limit, _ := strconv.ParseInt(lim, 10, 64) | 137 if err != nil { |
137 args = append(args, limit) | 138 return nil, err |
138 } | 139 } |
139 | 140 arg(" LIMIT $%d ", limit) |
140 if ofs, found := vars["offset"]; found { | 141 } |
141 fmt.Fprintf(&stmt, " OFFSET $%d ", len(args)+1) | 142 |
142 offset, _ := strconv.ParseInt(ofs, 10, 64) | 143 if ofs := req.FormValue("offset"); ofs != "" { |
143 args = append(args, offset) | 144 offset, err := strconv.ParseInt(ofs, 10, 64) |
144 } | 145 if err != nil { |
145 | 146 return nil, err |
146 return conn.QueryContext(ctx, stmt.String(), args...) | 147 } |
148 arg(" OFFSET $%d ", offset) | |
149 } | |
150 | |
151 return conn.QueryContext(req.Context(), stmt.String(), args...) | |
147 } | 152 } |
148 | 153 |
149 func listImports( | 154 func listImports( |
150 _ interface{}, | 155 _ interface{}, |
151 req *http.Request, | 156 req *http.Request, |
152 conn *sql.Conn, | 157 conn *sql.Conn, |
153 ) (jr JSONResult, err error) { | 158 ) (jr JSONResult, err error) { |
154 | 159 |
155 var rows *sql.Rows | 160 var rows *sql.Rows |
156 rows, err = queryImportListStmt(conn, req.Context(), mux.Vars(req)) | 161 rows, err = queryImportListStmt(conn, req) |
157 if err != nil { | 162 if err != nil { |
158 return | 163 return |
159 } | 164 } |
160 defer rows.Close() | 165 defer rows.Close() |
161 | 166 |