changeset 4961:67d78b74fe43 fairway-marks-import

Be more careful with unchanged errors if features were removed.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 26 Feb 2020 19:28:21 +0100
parents fb48bc6415c0
children 1b309a8e7673
files pkg/imports/fm.go pkg/imports/pointwfs.go
diffstat 2 files changed, 23 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/pkg/imports/fm.go	Wed Feb 26 18:09:58 2020 +0100
+++ b/pkg/imports/fm.go	Wed Feb 26 19:28:21 2020 +0100
@@ -443,11 +443,14 @@
 		if err != nil {
 			return err
 		}
-		nOld, err := res.RowsAffected()
+		old, err := res.RowsAffected()
 		if err != nil {
 			return err
 		}
-		spc.feedback.Info("Number of features removed from data source: %d", nOld)
+		if old == 0 {
+			return ErrFeaturesUnmodified
+		}
+		spc.feedback.Info("Number of features removed from data source: %d", old)
 		return nil
 	}
 }
--- a/pkg/imports/pointwfs.go	Wed Feb 26 18:09:58 2020 +0100
+++ b/pkg/imports/pointwfs.go	Wed Feb 26 19:28:21 2020 +0100
@@ -28,8 +28,9 @@
 )
 
 var (
-	ErrFeatureIgnored    = errors.New("feature ignored")
-	ErrFeatureDuplicated = errors.New("feature duplicated")
+	ErrFeatureIgnored     = errors.New("feature ignored")
+	ErrFeatureDuplicated  = errors.New("feature duplicated")
+	ErrFeaturesUnmodified = errors.New("features unmodified")
 )
 
 type (
@@ -222,18 +223,23 @@
 		feedback.Warn("Unsupported types found: %s", unsupported)
 	}
 
-	if err = consumer.Commit(); err == nil {
+	if err = consumer.Commit(); err == nil || err == ErrFeaturesUnmodified {
 		feedback.Info("Storing %d features took %s",
 			features, time.Since(start))
 	}
 
 	// Commit before eventually returning UnchangedError because we might
 	// have updated last_found
-	if features == 0 {
+	if features == 0 && err == ErrFeaturesUnmodified {
 		return nil, UnchangedError("no valid new features found")
 	}
 
-	return nil, nil
+	if err == ErrFeaturesUnmodified {
+		// It's not really an error.
+		err = nil
+	}
+
+	return nil, err
 }
 
 type (
@@ -260,18 +266,20 @@
 }
 
 func (spc *SQLPointConsumer) Commit() error {
+	var err error
 	if tx := spc.tx; tx != nil {
 		if spc.preCommit != nil {
-			if err := spc.preCommit(spc); err != nil {
-				return err
-			}
+			err = spc.preCommit(spc)
 		}
 		spc.releaseStmts()
 		spc.tx = nil
 		spc.ctx = nil
-		return tx.Commit()
+		if err2 := tx.Commit(); err2 != nil {
+			// A real error on commit overrules the first.
+			err = err2
+		}
 	}
-	return nil
+	return err
 }
 
 func (spc *SQLPointConsumer) NewProperties() interface{} {