diff pkg/controllers/importqueue.go @ 1655:34315277f2d6

Added ids filter to importqueue listing.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Fri, 21 Dec 2018 08:29:40 +0100
parents d26e3e1fcff1
children cdc8933949f2
line wrap: on
line diff
--- a/pkg/controllers/importqueue.go	Thu Dec 20 18:39:19 2018 +0100
+++ b/pkg/controllers/importqueue.go	Fri Dec 21 08:29:40 2018 +0100
@@ -66,6 +66,25 @@
 DELETE FROM waterway.imports WHERE id = $1`
 )
 
+func toInt8Array(txt string) *pgtype.Int8Array {
+	parts := strings.Split(txt, ",")
+	var ints []int64
+	for _, part := range parts {
+		part = strings.TrimSpace(part)
+		v, err := strconv.ParseInt(part, 10, 64)
+		if err != nil {
+			continue
+		}
+		ints = append(ints, v)
+	}
+	var ia pgtype.Int8Array
+	if err := ia.Set(ints); err != nil {
+		log.Printf("warn: %v\n", err)
+		return nil
+	}
+	return &ia
+}
+
 func toTextArray(txt string, allowed []string) *pgtype.TextArray {
 	parts := strings.Split(txt, ",")
 	var accepted []string
@@ -101,6 +120,7 @@
 		args   []interface{}
 		states *pgtype.TextArray
 		kinds  *pgtype.TextArray
+		ids    *pgtype.Int8Array
 	)
 
 	arg := func(format string, v interface{}) {
@@ -116,8 +136,12 @@
 		kinds = toTextArray(ks, imports.ImportKindNames())
 	}
 
+	if idss := req.FormValue("ids"); idss != "" {
+		ids = toInt8Array(idss)
+	}
+
 	stmt.WriteString(selectImportsSQL)
-	if states != nil || kinds != nil {
+	if states != nil || kinds != nil || ids != nil {
 		stmt.WriteString(" WHERE ")
 	}
 
@@ -125,7 +149,7 @@
 		arg(" state = ANY($%d) ", states)
 	}
 
-	if states != nil && kinds != nil {
+	if states != nil && (kinds != nil || ids != nil) {
 		stmt.WriteString("AND")
 	}
 
@@ -133,6 +157,14 @@
 		arg(" kind = ANY($%d) ", kinds)
 	}
 
+	if (states != nil || kinds != nil) && ids != nil {
+		stmt.WriteString("AND")
+	}
+
+	if ids != nil {
+		arg(" id = ANY($%d) ", ids)
+	}
+
 	stmt.WriteString(" ORDER BY enqueued DESC ")
 
 	if lim := req.FormValue("limit"); lim != "" {