changeset 1893:9beff970b107

Track fairway dimension import and delete old data on staging done.
author Raimund Renkert <raimund.renkert@intevation.de>
date Fri, 18 Jan 2019 11:26:55 +0100
parents b43ee5f73c05
children d72a1539ef3c
files pkg/imports/fd.go
diffstat 1 files changed, 16 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/pkg/imports/fd.go	Fri Jan 18 10:48:13 2019 +0100
+++ b/pkg/imports/fd.go	Fri Jan 18 11:26:55 2019 +0100
@@ -88,6 +88,11 @@
 	tx *sql.Tx,
 	id int64,
 ) error {
+	// Delete the old features.
+	if _, err := tx.ExecContext(ctx, deleteFairwayDimensionSQL); err != nil {
+		return err
+	}
+
 	_, err := tx.ExecContext(ctx, fdStageDoneSQL, id)
 	return err
 }
@@ -102,7 +107,7 @@
 const (
 	fdStageDoneSQL = `
 UPDATE waterway.fairway_dimensions SET staging_done = true
-WHERE id = (
+WHERE id IN (
   SELECT key from waterway.track_imports
   WHERE import_id = $1 AND
 		relation = 'waterway.fairway_dimensions'::regclass)`
@@ -117,7 +122,7 @@
 DELETE FROM waterway.fairway_dimensions
 WHERE ST_Covers(
   (SELECT a FROM resp),
-  ST_Transform(area::geometry, (SELECT t FROM resp)))
+  ST_Transform(area::geometry, (SELECT t FROM resp))) AND staging_done = true
 `
 
 	// The ST_MakeValid (line125) and ST_Buffer (line124) are a workarround to
@@ -142,7 +147,7 @@
      )).geom AS geom
   ) AS clipped
   WHERE clipped.geom IS NOT NULL
-`
+RETURNING id`
 )
 
 // Do executes the actual fairway dimension import.
@@ -196,11 +201,6 @@
 	}
 	defer insertStmt.Close()
 
-	// Delete the old features.
-	if _, err := tx.ExecContext(ctx, deleteFairwayDimensionSQL); err != nil {
-		return nil, err
-	}
-
 	var (
 		unsupported       = stringCounter{}
 		missingProperties int
@@ -246,7 +246,8 @@
 				if err := json.Unmarshal(*feature.Geometry.Coordinates, &p); err != nil {
 					return err
 				}
-				if _, err := insertStmt.ExecContext(
+				var fdid int64
+				if err := insertStmt.QueryRowContext(
 					ctx,
 					p.asWKB(),
 					epsg,
@@ -256,10 +257,15 @@
 					fd.Depth,
 					props.HydroSorDat.Time,
 					fd.SourceOrganization,
-				); err != nil {
+				).Scan(&fdid); err != nil {
 					feedback.Error("error: %s", err)
 					return err
 				}
+				// Store for potential later removal.
+				if err = track(ctx, tx, importID, "waterway.fairway_dimensions", fdid); err != nil {
+					return err
+				}
+
 				features++
 			default:
 				unsupported[feature.Geometry.Type]++