diff pkg/imports/sr.go @ 3645:02951a62e8c6

'Historicise' bottlenecks on import
author Tom Gottfried <tom@intevation.de>
date Wed, 12 Jun 2019 17:11:15 +0200
parents e1021fd60190
children 2a079d0a71c1
line wrap: on
line diff
--- a/pkg/imports/sr.go	Wed Jun 12 17:10:49 2019 +0200
+++ b/pkg/imports/sr.go	Wed Jun 12 17:11:15 2019 +0200
@@ -32,6 +32,7 @@
 	"strings"
 	"time"
 
+	"github.com/jackc/pgx"
 	shp "github.com/jonas-p/go-shp"
 
 	"gemma.intevation.de/gemma/pkg/common"
@@ -113,7 +114,8 @@
   depth_reference,
   area
 ) SELECT
-  (SELECT id from waterway.bottlenecks where objnam = $1),
+  (SELECT id FROM waterway.bottlenecks WHERE objnam = $1
+     AND validity @> CAST($2 AS timestamptz)),
   $2::date,
   $3,
   (SELECT
@@ -172,7 +174,9 @@
   JOIN waterway.bottlenecks bns
     ON grwl.location = bns.gauge_location
       AND grwl.validity = bns.gauge_validity
-WHERE bns.objnam = $1 AND grwl.depth_reference like 'LDC%'
+WHERE bns.objnam = $1
+  AND bns.validity @> CAST($2 AS timestamptz)
+  AND grwl.depth_reference like 'LDC%'
 `
 
 	reprojectPointsSingleBeamSQL = `
@@ -226,7 +230,11 @@
 		feedback.Info("Found ZPG as reference system -> translating Z values to LDC")
 		var ldc float64
 		var depthReference string
-		err := conn.QueryRowContext(ctx, selectGaugeLDCSQL, m.Bottleneck).Scan(
+		err := conn.QueryRowContext(ctx,
+			selectGaugeLDCSQL,
+			m.Bottleneck,
+			m.Date.Time,
+		).Scan(
 			&ldc,
 			&depthReference,
 		)
@@ -412,6 +420,14 @@
 	xyz, boundary = nil, nil // not need from now on.
 	feedback.Info("Calculating hull took %s.", time.Since(start))
 	if err != nil {
+		if e, isPgErr := err.(pgx.PgError); isPgErr &&
+			e.Code == notNullViolation &&
+			e.SchemaName == "waterway" &&
+			e.TableName == "sounding_results" &&
+			e.ColumnName == "bottleneck_id" {
+			return nil, fmt.Errorf(
+				"No bottleneck matching given name and time available")
+		}
 		return nil, err
 	}
 	feedback.Info("Best suited UTM EPSG: %d", epsg)