changeset 2961:5bc941d9ec43

Fix checking of depth reference for sounding result Depth references have to match any depth reference associated with the bottlenecks reference gauge. However, these cannot necessarily be expected to be also in depth_references.
author Tom Gottfried <tom@intevation.de>
date Mon, 08 Apr 2019 16:27:37 +0200
parents 41cdff9b7f4a
children 8d825551bc72
files pkg/models/sr.go
diffstat 1 files changed, 18 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/pkg/models/sr.go	Mon Apr 08 16:25:17 2019 +0200
+++ b/pkg/models/sr.go	Mon Apr 08 16:27:37 2019 +0200
@@ -36,7 +36,12 @@
 
 const (
 	checkDepthReferenceSQL = `
-SELECT true FROM depth_references WHERE depth_reference = $1`
+SELECT EXISTS(SELECT 1
+  FROM waterway.bottlenecks bn
+    JOIN waterway.gauges g ON g.location = bn.fk_g_fid
+    JOIN waterway.gauges_reference_water_levels rl ON rl.gauge_id = g.location
+  WHERE bn.objnam = $1
+    AND rl.depth_reference = $2)`
 
 	checkBottleneckSQL = `
 SELECT true FROM waterway.bottlenecks WHERE objnam = $1`
@@ -61,18 +66,6 @@
 
 	var b bool
 	err := conn.QueryRowContext(ctx,
-		checkDepthReferenceSQL,
-		m.DepthReference).Scan(&b)
-	switch {
-	case err == sql.ErrNoRows:
-		errs = append(errs, fmt.Errorf("unknown depth reference '%s'", m.DepthReference))
-	case err != nil:
-		errs = append(errs, err)
-	case !b:
-		errs = append(errs, errors.New("unexpected depth reference"))
-	}
-
-	err = conn.QueryRowContext(ctx,
 		checkBottleneckSQL,
 		m.Bottleneck).Scan(&b)
 	switch {
@@ -85,6 +78,18 @@
 	}
 
 	err = conn.QueryRowContext(ctx,
+		checkDepthReferenceSQL,
+		m.Bottleneck,
+		m.DepthReference).Scan(&b)
+	switch {
+	case !b:
+		errs = append(errs,
+			fmt.Errorf("unknown depth reference '%s'", m.DepthReference))
+	case err != nil:
+		errs = append(errs, err)
+	}
+
+	err = conn.QueryRowContext(ctx,
 		checkBottleneckDateUniqueSQL,
 		m.Bottleneck, m.Date.Time).Scan(&b)
 	switch {