Mercurial > gemma
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 |