changeset 2922:372dc8382389

Fairway dimension import: continue if a feature fails to be inserted
author Tom Gottfried <tom@intevation.de>
date Wed, 03 Apr 2019 17:08:18 +0200
parents 96ac7a980ec2
children 9bd98daf0b0f
files pkg/imports/fd.go
diffstat 1 files changed, 18 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/pkg/imports/fd.go	Wed Apr 03 16:42:03 2019 +0200
+++ b/pkg/imports/fd.go	Wed Apr 03 17:08:18 2019 +0200
@@ -253,6 +253,8 @@
 
 		feedback.Info("Using EPSG: %d", epsg)
 
+		savepoint := Savepoint(ctx, tx, "feature")
+
 	features:
 		for _, feature := range rfc.Features {
 			if feature.Geometry.Coordinates == nil {
@@ -281,24 +283,28 @@
 				}
 				var fdid int64
 				var lat, lon float64
-				err = insertStmt.QueryRowContext(
-					ctx,
-					p.asWKB(),
-					epsg,
-					fd.LOS,
-					fd.MinWidth,
-					fd.MaxWidth,
-					fd.Depth,
-					dateInfo,
-					fd.SourceOrganization,
-				).Scan(&fdid, &lat, &lon)
+				err = savepoint(func() error {
+					err := insertStmt.QueryRowContext(
+						ctx,
+						p.asWKB(),
+						epsg,
+						fd.LOS,
+						fd.MinWidth,
+						fd.MaxWidth,
+						fd.Depth,
+						dateInfo,
+						fd.SourceOrganization,
+					).Scan(&fdid, &lat, &lon)
+					return err
+				})
 				switch {
 				case err == sql.ErrNoRows:
 					outside++
 					// ignore -> filtered by responsibility_areas
 					continue features
 				case err != nil:
-					return err
+					feedback.Warn(handleError(err).Error())
+					continue features
 				}
 				// Store for potential later removal.
 				if err = track(ctx, tx, importID, "waterway.fairway_dimensions", fdid); err != nil {