Mercurial > gemma
comparison pkg/imports/bn.go @ 3656:2a079d0a71c1
Ensure sounding results are associated to matching bottleneck version
author | Tom Gottfried <tom@intevation.de> |
---|---|
date | Thu, 13 Jun 2019 19:13:42 +0200 |
parents | 0ec5c8ec1e44 |
children | 29ef6d41e4af |
comparison
equal
deleted
inserted
replaced
3649:fb8a53c7c6d3 | 3656:2a079d0a71c1 |
---|---|
105 $13, | 105 $13, |
106 $14 | 106 $14 |
107 ) | 107 ) |
108 RETURNING id` | 108 RETURNING id` |
109 | 109 |
110 moveSRSQL = ` | |
111 UPDATE waterway.sounding_results | |
112 -- Associate measurements to matching bottleneck version | |
113 SET bottleneck_validity = $2 | |
114 WHERE bottleneck_id = $1 | |
115 AND CAST(date_info AS timestamptz) <@ CAST($2 AS tstzrange) | |
116 ` | |
117 | |
110 fixBNValiditySQL = ` | 118 fixBNValiditySQL = ` |
111 UPDATE waterway.bottlenecks SET | 119 UPDATE waterway.bottlenecks SET |
112 -- Set enddate of old entry to new startdate in case of overlap: | 120 -- Set enddate of old entry to new startdate in case of overlap: |
113 validity = validity - $2 | 121 validity = validity - $2 |
114 WHERE bottleneck_id = $1 | 122 WHERE bottleneck_id = $1 |
263 return nil, err | 271 return nil, err |
264 } | 272 } |
265 | 273 |
266 feedback.Info("Found %d bottlenecks for import", len(bns)) | 274 feedback.Info("Found %d bottlenecks for import", len(bns)) |
267 | 275 |
268 var hasStmt, insertStmt, fixValidityStmt, updateStmt, | 276 var hasStmt, insertStmt, moveSRStmt, fixValidityStmt, updateStmt, |
269 deleteMaterialStmt, insertMaterialStmt, trackStmt *sql.Stmt | 277 deleteMaterialStmt, insertMaterialStmt, trackStmt *sql.Stmt |
270 | 278 |
271 for _, x := range []struct { | 279 for _, x := range []struct { |
272 sql string | 280 sql string |
273 stmt **sql.Stmt | 281 stmt **sql.Stmt |
274 }{ | 282 }{ |
275 {hasBottleneckSQL, &hasStmt}, | 283 {hasBottleneckSQL, &hasStmt}, |
276 {insertBottleneckSQL, &insertStmt}, | 284 {insertBottleneckSQL, &insertStmt}, |
285 {moveSRSQL, &moveSRStmt}, | |
277 {fixBNValiditySQL, &fixValidityStmt}, | 286 {fixBNValiditySQL, &fixValidityStmt}, |
278 {updateBottleneckSQL, &updateStmt}, | 287 {updateBottleneckSQL, &updateStmt}, |
279 {deleteBottleneckMaterialSQL, &deleteMaterialStmt}, | 288 {deleteBottleneckMaterialSQL, &deleteMaterialStmt}, |
280 {insertBottleneckMaterialSQL, &insertMaterialStmt}, | 289 {insertBottleneckMaterialSQL, &insertMaterialStmt}, |
281 {trackImportSQL, &trackStmt}, | 290 {trackImportSQL, &trackStmt}, |
292 feedback.Info("Tolerance used to snap waterway axis: %g", tolerance) | 301 feedback.Info("Tolerance used to snap waterway axis: %g", tolerance) |
293 | 302 |
294 for _, bn := range bns { | 303 for _, bn := range bns { |
295 if err := storeBottleneck( | 304 if err := storeBottleneck( |
296 ctx, importID, conn, feedback, bn, &nids, tolerance, | 305 ctx, importID, conn, feedback, bn, &nids, tolerance, |
297 hasStmt, insertStmt, fixValidityStmt, updateStmt, | 306 hasStmt, insertStmt, moveSRStmt, fixValidityStmt, updateStmt, |
298 deleteMaterialStmt, insertMaterialStmt, trackStmt); err != nil { | 307 deleteMaterialStmt, insertMaterialStmt, trackStmt); err != nil { |
299 return nil, err | 308 return nil, err |
300 } | 309 } |
301 } | 310 } |
302 if len(nids) == 0 { | 311 if len(nids) == 0 { |
319 conn *sql.Conn, | 328 conn *sql.Conn, |
320 feedback Feedback, | 329 feedback Feedback, |
321 bn *ifbn.BottleNeckType, | 330 bn *ifbn.BottleNeckType, |
322 nids *[]string, | 331 nids *[]string, |
323 tolerance float64, | 332 tolerance float64, |
324 hasStmt, insertStmt, fixValidityStmt, updateStmt, | 333 hasStmt, insertStmt, moveSRStmt, fixValidityStmt, updateStmt, |
325 deleteMaterialStmt, insertMaterialStmt, trackStmt *sql.Stmt, | 334 deleteMaterialStmt, insertMaterialStmt, trackStmt *sql.Stmt, |
326 ) error { | 335 ) error { |
327 feedback.Info("Processing %s (%s)", bn.OBJNAM, bn.Bottleneck_id) | 336 feedback.Info("Processing %s (%s)", bn.OBJNAM, bn.Bottleneck_id) |
328 | 337 |
329 if bn.AdditionalData == nil || bn.AdditionalData.KeyValuePair == nil { | 338 if bn.AdditionalData == nil || bn.AdditionalData.KeyValuePair == nil { |
501 return err | 510 return err |
502 } | 511 } |
503 } | 512 } |
504 } | 513 } |
505 | 514 |
515 // Move sounding results to new matching bottleneck version, if applicable | |
516 if _, err = tx.StmtContext(ctx, moveSRStmt).ExecContext(ctx, | |
517 bn.Bottleneck_id, | |
518 &validity, | |
519 ); err != nil { | |
520 feedback.Warn(handleError(err).Error()) | |
521 if err2 := tx.Rollback(); err2 != nil { | |
522 return err2 | |
523 } | |
524 return nil | |
525 } | |
526 | |
506 // Set end of validity of old version to start of new version | 527 // Set end of validity of old version to start of new version |
507 // in case of overlap | 528 // in case of overlap |
508 if _, err = tx.StmtContext(ctx, fixValidityStmt).ExecContext(ctx, | 529 if _, err = tx.StmtContext(ctx, fixValidityStmt).ExecContext(ctx, |
509 bn.Bottleneck_id, | 530 bn.Bottleneck_id, |
510 validity, | 531 validity, |