Mercurial > gemma
changeset 2659:00b0a7b2225a
Waterway area import: do not fail if INSERT of one item fails
author | Tom Gottfried <tom@intevation.de> |
---|---|
date | Thu, 14 Mar 2019 18:09:35 +0100 |
parents | 74031fbd3d50 |
children | 2b4b9fa9812c |
files | pkg/imports/misc.go pkg/imports/wa.go |
diffstat | 2 files changed, 49 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/pkg/imports/misc.go Thu Mar 14 16:59:14 2019 +0100 +++ b/pkg/imports/misc.go Thu Mar 14 18:09:35 2019 +0100 @@ -11,6 +11,8 @@ package imports import ( + "context" + "database/sql" "fmt" "strings" ) @@ -27,3 +29,36 @@ } return b.String() } + +func Savepoint( + tx *sql.Tx, + ctx context.Context, + name string, +) error { + if _, err := tx.ExecContext(ctx, "SAVEPOINT "+name); err != nil { + return err + } + return nil +} + +func RollbackToSavepoint( + tx *sql.Tx, + ctx context.Context, + name string, +) error { + if _, err := tx.ExecContext(ctx, "ROLLBACK TO SAVEPOINT "+name); err != nil { + return err + } + return nil +} + +func ReleaseSavepoint( + tx *sql.Tx, + ctx context.Context, + name string, +) error { + if _, err := tx.ExecContext(ctx, "RELEASE SAVEPOINT "+name); err != nil { + return err + } + return nil +}
--- a/pkg/imports/wa.go Thu Mar 14 16:59:14 2019 +0100 +++ b/pkg/imports/wa.go Thu Mar 14 18:09:35 2019 +0100 @@ -197,6 +197,8 @@ feedback.Info("Using EPSG: %d", epsg) + const featureSavepoint = "feature" + for _, feature := range rfc.Features { if feature.Properties == nil || feature.Geometry.Coordinates == nil { missingProperties++ @@ -229,6 +231,9 @@ if err := json.Unmarshal(*feature.Geometry.Coordinates, &p); err != nil { return err } + if err := Savepoint(tx, ctx, featureSavepoint); err != nil { + return err + } if _, err := insertStmt.ExecContext( ctx, p.asWKB(), @@ -236,9 +241,16 @@ catccl, dirimp, ); err != nil { - return err + feedback.Warn(handleError(err).Error()) + if err = RollbackToSavepoint(tx, ctx, featureSavepoint); err != nil { + return err + } + } else { + if err = ReleaseSavepoint(tx, ctx, featureSavepoint); err != nil { + return err + } + features++ } - features++ default: unsupported[feature.Geometry.Type]++ }