comparison pkg/imports/wa.go @ 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 9b6a02923bb4
children 542d3441c2d8
comparison
equal deleted inserted replaced
2658:74031fbd3d50 2659:00b0a7b2225a
195 return nil 195 return nil
196 } 196 }
197 197
198 feedback.Info("Using EPSG: %d", epsg) 198 feedback.Info("Using EPSG: %d", epsg)
199 199
200 const featureSavepoint = "feature"
201
200 for _, feature := range rfc.Features { 202 for _, feature := range rfc.Features {
201 if feature.Properties == nil || feature.Geometry.Coordinates == nil { 203 if feature.Properties == nil || feature.Geometry.Coordinates == nil {
202 missingProperties++ 204 missingProperties++
203 continue 205 continue
204 } 206 }
225 227
226 switch feature.Geometry.Type { 228 switch feature.Geometry.Type {
227 case "Polygon": 229 case "Polygon":
228 var p polygonSlice 230 var p polygonSlice
229 if err := json.Unmarshal(*feature.Geometry.Coordinates, &p); err != nil { 231 if err := json.Unmarshal(*feature.Geometry.Coordinates, &p); err != nil {
232 return err
233 }
234 if err := Savepoint(tx, ctx, featureSavepoint); err != nil {
230 return err 235 return err
231 } 236 }
232 if _, err := insertStmt.ExecContext( 237 if _, err := insertStmt.ExecContext(
233 ctx, 238 ctx,
234 p.asWKB(), 239 p.asWKB(),
235 epsg, 240 epsg,
236 catccl, 241 catccl,
237 dirimp, 242 dirimp,
238 ); err != nil { 243 ); err != nil {
239 return err 244 feedback.Warn(handleError(err).Error())
240 } 245 if err = RollbackToSavepoint(tx, ctx, featureSavepoint); err != nil {
241 features++ 246 return err
247 }
248 } else {
249 if err = ReleaseSavepoint(tx, ctx, featureSavepoint); err != nil {
250 return err
251 }
252 features++
253 }
242 default: 254 default:
243 unsupported[feature.Geometry.Type]++ 255 unsupported[feature.Geometry.Type]++
244 } 256 }
245 } 257 }
246 return nil 258 return nil