diff pkg/imports/wa.go @ 2758:a996f2ca9fa5

Simplified savepoint handling.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 21 Mar 2019 15:43:02 +0100
parents 7cb027be277d
children 1b6840093eac
line wrap: on
line diff
--- a/pkg/imports/wa.go	Thu Mar 21 14:29:47 2019 +0100
+++ b/pkg/imports/wa.go	Thu Mar 21 15:43:02 2019 +0100
@@ -200,7 +200,7 @@
 
 		feedback.Info("Using EPSG: %d", epsg)
 
-		const featureSavepoint = "feature"
+		savepoint := Savepoint(ctx, tx, "feature")
 
 		for _, feature := range rfc.Features {
 			if feature.Properties == nil || feature.Geometry.Coordinates == nil {
@@ -234,24 +234,18 @@
 				if err := json.Unmarshal(*feature.Geometry.Coordinates, &p); err != nil {
 					return err
 				}
-				if err := Savepoint(ctx, tx, featureSavepoint); err != nil {
+				if err := savepoint(func() error {
+					_, err := insertStmt.ExecContext(
+						ctx,
+						p.asWKB(),
+						epsg,
+						catccl,
+						dirimp,
+					)
 					return err
-				}
-				if _, err := insertStmt.ExecContext(
-					ctx,
-					p.asWKB(),
-					epsg,
-					catccl,
-					dirimp,
-				); err != nil {
+				}); err != nil {
 					feedback.Warn(handleError(err).Error())
-					if err = RollbackToSavepoint(ctx, tx, featureSavepoint); err != nil {
-						return err
-					}
 				} else {
-					if err = ReleaseSavepoint(ctx, tx, featureSavepoint); err != nil {
-						return err
-					}
 					features++
 				}
 			default: