Mercurial > gemma
comparison pkg/controllers/importqueue.go @ 3190:54a3e40cfbed
controllers: moved filter builder to a separate file.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Wed, 08 May 2019 10:50:14 +0200 |
parents | 813309225e35 |
children | eeff2cc4ff9d |
comparison
equal
deleted
inserted
replaced
3189:6f8fb2053881 | 3190:54a3e40cfbed |
---|---|
130 return nil | 130 return nil |
131 } | 131 } |
132 return &ta | 132 return &ta |
133 } | 133 } |
134 | 134 |
135 type filterBuilder struct { | |
136 stmt strings.Builder | |
137 args []interface{} | |
138 hasCond bool | |
139 } | |
140 | |
141 func (fb *filterBuilder) arg(format string, v ...interface{}) { | |
142 indices := make([]interface{}, len(v)) | |
143 for i := range indices { | |
144 indices[i] = len(fb.args) + i + 1 | |
145 } | |
146 fmt.Fprintf(&fb.stmt, format, indices...) | |
147 fb.args = append(fb.args, v...) | |
148 } | |
149 | |
150 func (fb *filterBuilder) cond(format string, v ...interface{}) { | |
151 if fb.hasCond { | |
152 fb.stmt.WriteString(" AND ") | |
153 } else { | |
154 fb.hasCond = true | |
155 } | |
156 fb.arg(format, v...) | |
157 } | |
158 | |
159 func buildFilters(req *http.Request) (l, b, a *filterBuilder, err error) { | 135 func buildFilters(req *http.Request) (l, b, a *filterBuilder, err error) { |
160 | 136 |
161 l = new(filterBuilder) | 137 l = new(filterBuilder) |
162 a = new(filterBuilder) | 138 a = new(filterBuilder) |
163 b = new(filterBuilder) | 139 b = new(filterBuilder) |
175 } | 151 } |
176 a.stmt.WriteString(selectAfterSQL) | 152 a.stmt.WriteString(selectAfterSQL) |
177 b.stmt.WriteString(selectBeforeSQL) | 153 b.stmt.WriteString(selectBeforeSQL) |
178 | 154 |
179 cond := func(format string, v ...interface{}) { | 155 cond := func(format string, v ...interface{}) { |
180 l.cond(format, v...) | 156 l.and(format, v...) |
181 a.cond(format, v...) | 157 a.and(format, v...) |
182 b.cond(format, v...) | 158 b.and(format, v...) |
183 } | 159 } |
184 | 160 |
185 if query := req.FormValue("query"); query != "" { | 161 if query := req.FormValue("query"); query != "" { |
186 query = "%" + query + "%" | 162 query = "%" + query + "%" |
187 cond(` (kind ILIKE $%d OR username ILIKE $%d OR signer ILIKE $%d OR `+ | 163 cond(` (kind ILIKE $%d OR username ILIKE $%d OR signer ILIKE $%d OR `+ |
207 if from := req.FormValue("from"); from != "" { | 183 if from := req.FormValue("from"); from != "" { |
208 var fromTime time.Time | 184 var fromTime time.Time |
209 if fromTime, err = time.Parse(models.ImportTimeFormat, from); err != nil { | 185 if fromTime, err = time.Parse(models.ImportTimeFormat, from); err != nil { |
210 return | 186 return |
211 } | 187 } |
212 l.cond(" enqueued >= $%d ", fromTime) | 188 l.and(" enqueued >= $%d ", fromTime) |
213 b.cond(" enqueued < $%d", fromTime) | 189 b.and(" enqueued < $%d", fromTime) |
214 } else { | 190 } else { |
215 noBefore = true | 191 noBefore = true |
216 } | 192 } |
217 | 193 |
218 if to := req.FormValue("to"); to != "" { | 194 if to := req.FormValue("to"); to != "" { |
219 var toTime time.Time | 195 var toTime time.Time |
220 if toTime, err = time.Parse(models.ImportTimeFormat, to); err != nil { | 196 if toTime, err = time.Parse(models.ImportTimeFormat, to); err != nil { |
221 return | 197 return |
222 } | 198 } |
223 l.cond(" enqueued <= $%d ", toTime) | 199 l.and(" enqueued <= $%d ", toTime) |
224 a.cond(" enqueued > $%d", toTime) | 200 a.and(" enqueued > $%d", toTime) |
225 } else { | 201 } else { |
226 noAfter = true | 202 noAfter = true |
227 } | 203 } |
228 | 204 |
229 switch warn := strings.ToLower(req.FormValue("warnings")); warn { | 205 switch warn := strings.ToLower(req.FormValue("warnings")); warn { |