comparison pkg/imports/wg.go @ 1837:00d63eb9306a

Waterway gauges import: Finalized with re-inserting the reference water levels.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 16 Jan 2019 23:54:26 +0100
parents 4dcdd8891770
children 62b5f6e48e82
comparison
equal deleted inserted replaced
1836:4dcdd8891770 1837:00d63eb9306a
119 zero_point = $12, 119 zero_point = $12,
120 geodref = $13, 120 geodref = $13,
121 date_info = $14, 121 date_info = $14,
122 source_organization = $15 122 source_organization = $15
123 ` 123 `
124 insertReferenceWaterLevelsSQL = `
125 INSERT INTO waterway.gauges_reference_water_levels (
126 gauge_id,
127 reference_water_level,
128 value
129 ) VALUES (
130 ($1::char(2), $2::char(3), $3::char(5), $4::char(5), $5::int),
131 $6,
132 $7
133 )
134 `
124 ) 135 )
125 136
126 func (wg *WaterwayGauge) Do( 137 func (wg *WaterwayGauge) Do(
127 ctx context.Context, 138 ctx context.Context,
128 importID int64, 139 importID int64,
129 conn *sql.Conn, 140 conn *sql.Conn,
130 feedback Feedback, 141 feedback Feedback,
131 ) (interface{}, error) { 142 ) (interface{}, error) {
143
144 start := time.Now()
132 145
133 tx, err := conn.BeginTx(ctx, nil) 146 tx, err := conn.BeginTx(ctx, nil)
134 if err != nil { 147 if err != nil {
135 return nil, err 148 return nil, err
136 } 149 }
272 if err != nil { 285 if err != nil {
273 return nil, err 286 return nil, err
274 } 287 }
275 defer insertStmt.Close() 288 defer insertStmt.Close()
276 289
290 insertWaterLevelStmt, err := tx.PrepareContext(
291 ctx, insertReferenceWaterLevelsSQL)
292 if err != nil {
293 return nil, err
294 }
295 defer insertWaterLevelStmt.Close()
296
277 // insert/update the gauges 297 // insert/update the gauges
278 for i := range news { 298 for i := range news {
279 ic := &news[i] 299 ic := &news[i]
280 dr := data.RisdataReturn[ic.idx] 300 dr := data.RisdataReturn[ic.idx]
281 301
372 source, 392 source,
373 ); err != nil { 393 ); err != nil {
374 return nil, err 394 return nil, err
375 } 395 }
376 396
377 // TODO: Reference water levels. 397 for _, wl := range []struct {
378 } 398 level **erdms.RisreflevelcodeType
379 399 value **erdms.RisreflevelvalueType
380 // TODO: Implement me! 400 }{
381 return nil, errors.New("Not implemented, yet!") 401 {&dr.Reflevel1code, &dr.Reflevel1value},
402 {&dr.Reflevel2code, &dr.Reflevel2value},
403 {&dr.Reflevel3code, &dr.Reflevel3value},
404 } {
405 if *wl.level == nil || *wl.value == nil {
406 continue
407 }
408 if _, err := insertWaterLevelStmt.ExecContext(
409 ctx,
410 ic.code.CountryCode,
411 ic.code.LoCode,
412 ic.code.FairwaySection,
413 ic.code.Orc,
414 ic.code.Hectometre,
415 string(**wl.level),
416 int64(**wl.value),
417 ); err != nil {
418 return nil, err
419 }
420 }
421 }
422
423 if err = tx.Commit(); err == nil {
424 feedback.Info("Refreshing gauges successfully took %s.",
425 time.Since(start))
426 } else {
427 feedback.Error("Refreshing gauges failed after %s.",
428 time.Since(start))
429 }
430
431 return nil, err
382 } 432 }