# HG changeset patch # User Sascha L. Teichmann # Date 1557305414 -7200 # Node ID 54a3e40cfbedc074c703a5a1829815dad2b2037c # Parent 6f8fb2053881a8a0ec62fe9bf755b197d813dd2c controllers: moved filter builder to a separate file. diff -r 6f8fb2053881 -r 54a3e40cfbed pkg/controllers/common.go --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkg/controllers/common.go Wed May 08 10:50:14 2019 +0200 @@ -0,0 +1,43 @@ +// This is Free Software under GNU Affero General Public License v >= 3.0 +// without warranty, see README.md and license for details. +// +// SPDX-License-Identifier: AGPL-3.0-or-later +// License-Filename: LICENSES/AGPL-3.0.txt +// +// Copyright (C) 2019 by via donau +// – Österreichische Wasserstraßen-Gesellschaft mbH +// Software engineering by Intevation GmbH +// +// Author(s): +// * Sascha L. Teichmann + +package controllers + +import ( + "fmt" + "strings" +) + +type filterBuilder struct { + stmt strings.Builder + args []interface{} + hasCond bool +} + +func (fb *filterBuilder) arg(format string, v ...interface{}) { + indices := make([]interface{}, len(v)) + for i := range indices { + indices[i] = len(fb.args) + i + 1 + } + fmt.Fprintf(&fb.stmt, format, indices...) + fb.args = append(fb.args, v...) +} + +func (fb *filterBuilder) and(format string, v ...interface{}) { + if fb.hasCond { + fb.stmt.WriteString(" AND ") + } else { + fb.hasCond = true + } + fb.arg(format, v...) +} diff -r 6f8fb2053881 -r 54a3e40cfbed pkg/controllers/gauges.go --- a/pkg/controllers/gauges.go Wed May 08 10:37:47 2019 +0200 +++ b/pkg/controllers/gauges.go Wed May 08 10:50:14 2019 +0200 @@ -631,7 +631,7 @@ var fb filterBuilder fb.stmt.WriteString(selectWaterlevelsSQL) - fb.cond( + fb.and( " fk_gauge_id = ($%d::char(2), $%d::char(3), $%d::char(5), $%d::char(5), $%d::int) ", isrs.CountryCode, isrs.LoCode, @@ -640,7 +640,7 @@ isrs.Hectometre, ) - fb.cond( + fb.and( `(NOT predicted OR ( date_issue = ( @@ -663,7 +663,7 @@ http.StatusBadRequest) return } - fb.cond("measure_date >= $%d", fromTime) + fb.and("measure_date >= $%d", fromTime) } if to := req.FormValue("to"); to != "" { @@ -674,7 +674,7 @@ http.StatusBadRequest) return } - fb.cond("measure_date <= $%d", toTime) + fb.and("measure_date <= $%d", toTime) } conn := middleware.GetDBConn(req) diff -r 6f8fb2053881 -r 54a3e40cfbed pkg/controllers/importqueue.go --- a/pkg/controllers/importqueue.go Wed May 08 10:37:47 2019 +0200 +++ b/pkg/controllers/importqueue.go Wed May 08 10:50:14 2019 +0200 @@ -132,30 +132,6 @@ return &ta } -type filterBuilder struct { - stmt strings.Builder - args []interface{} - hasCond bool -} - -func (fb *filterBuilder) arg(format string, v ...interface{}) { - indices := make([]interface{}, len(v)) - for i := range indices { - indices[i] = len(fb.args) + i + 1 - } - fmt.Fprintf(&fb.stmt, format, indices...) - fb.args = append(fb.args, v...) -} - -func (fb *filterBuilder) cond(format string, v ...interface{}) { - if fb.hasCond { - fb.stmt.WriteString(" AND ") - } else { - fb.hasCond = true - } - fb.arg(format, v...) -} - func buildFilters(req *http.Request) (l, b, a *filterBuilder, err error) { l = new(filterBuilder) @@ -177,9 +153,9 @@ b.stmt.WriteString(selectBeforeSQL) cond := func(format string, v ...interface{}) { - l.cond(format, v...) - a.cond(format, v...) - b.cond(format, v...) + l.and(format, v...) + a.and(format, v...) + b.and(format, v...) } if query := req.FormValue("query"); query != "" { @@ -209,8 +185,8 @@ if fromTime, err = time.Parse(models.ImportTimeFormat, from); err != nil { return } - l.cond(" enqueued >= $%d ", fromTime) - b.cond(" enqueued < $%d", fromTime) + l.and(" enqueued >= $%d ", fromTime) + b.and(" enqueued < $%d", fromTime) } else { noBefore = true } @@ -220,8 +196,8 @@ if toTime, err = time.Parse(models.ImportTimeFormat, to); err != nil { return } - l.cond(" enqueued <= $%d ", toTime) - a.cond(" enqueued > $%d", toTime) + l.and(" enqueued <= $%d ", toTime) + a.and(" enqueued > $%d", toTime) } else { noAfter = true }