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

'Historicise' bottlenecks on import
author Tom Gottfried <tom@intevation.de>
date Wed, 12 Jun 2019 17:11:15 +0200
parents a5448426e4e2
children 0ec5c8ec1e44
line wrap: on
line diff
--- a/pkg/imports/wg.go	Wed Jun 12 17:10:49 2019 +0200
+++ b/pkg/imports/wg.go	Wed Jun 12 17:11:15 2019 +0200
@@ -124,6 +124,14 @@
   AND measure_date <@ CAST($2 AS tstzrange)
 `
 
+	moveBNSQL = `
+UPDATE waterway.bottlenecks
+-- Associate bottlenecks to matching gauge version
+SET gauge_validity = $2
+WHERE isrs_astext(gauge_location) = $1
+  AND lower(validity) <@ CAST($2 AS tstzrange)
+`
+
 	fixValiditySQL = `
 UPDATE waterway.gauges SET
    -- Set enddate of old entry to new startdate in case of overlap:
@@ -199,7 +207,8 @@
 		return nil, err
 	}
 
-	var eraseGaugeStmt, insertStmt, moveGMStmt, fixValidityStmt, updateStmt,
+	var eraseGaugeStmt, insertStmt, moveGMStmt, moveBNStmt,
+		fixValidityStmt, updateStmt,
 		deleteReferenceWaterLevelsStmt,
 		isNtSDepthRefStmt, insertWaterLevelStmt *sql.Stmt
 	for _, x := range []struct {
@@ -209,6 +218,7 @@
 		{eraseGaugeSQL, &eraseGaugeStmt},
 		{insertGaugeSQL, &insertStmt},
 		{moveGMSQL, &moveGMStmt},
+		{moveBNSQL, &moveBNStmt},
 		{fixValiditySQL, &fixValidityStmt},
 		{updateGaugeSQL, &updateStmt},
 		{deleteReferenceWaterLevelsSQL, &deleteReferenceWaterLevelsStmt},
@@ -365,8 +375,8 @@
 					unchanged++
 					continue
 				}
-				// Move gauge measurements to new matching gauge version,
-				// if applicable
+				// Move gauge measurements and bottlenecks to new matching
+				// gauge version, if applicable
 				if _, err = tx.StmtContext(ctx, moveGMStmt).ExecContext(ctx,
 					code.String(),
 					&validity,
@@ -378,6 +388,17 @@
 					unchanged++
 					continue
 				}
+				if _, err = tx.StmtContext(ctx, moveBNStmt).ExecContext(ctx,
+					code.String(),
+					&validity,
+				); err != nil {
+					feedback.Warn(handleError(err).Error())
+					if err2 := tx.Rollback(); err2 != nil {
+						return nil, err2
+					}
+					unchanged++
+					continue
+				}
 				// Set end of validity of old version to start of new version
 				// in case of overlap
 				if _, err = tx.StmtContext(ctx, fixValidityStmt).ExecContext(