# HG changeset patch # User Tom Gottfried # Date 1558092202 -7200 # Node ID 0f6b156cff55be42fbe7f329bc9d7d8ac76c1782 # Parent e0dabe7b2fcfeccd6c4006972b02f79cba37a0a2 Mark gauges as erased if they are missing in ERDMS response diff -r e0dabe7b2fcf -r 0f6b156cff55 pkg/imports/wg.go --- a/pkg/imports/wg.go Fri May 17 12:49:28 2019 +0200 +++ b/pkg/imports/wg.go Fri May 17 13:23:22 2019 +0200 @@ -65,6 +65,12 @@ func (*WaterwayGauge) CleanUp() error { return nil } const ( + eraseObsoleteGaugesSQL = ` +UPDATE waterway.gauges SET erased = true +WHERE NOT erased AND isrs_astext(location) <> ALL($1) +RETURNING isrs_astext(location) +` + eraseGaugeSQL = ` UPDATE waterway.gauges SET erased = true, @@ -449,16 +455,35 @@ } } - feedback.Info("Importing gauges took %s", - time.Since(start)) - if len(gauges) == 0 { return nil, UnchangedError("No gauges returned from ERDMS") } + var pgGauges pgtype.VarcharArray + pgGauges.Set(gauges) + obsGauges, err := conn.QueryContext(ctx, eraseObsoleteGaugesSQL, &pgGauges) + if err != nil { + return nil, err + } + defer obsGauges.Close() + for obsGauges.Next() { + var isrs string + if err := obsGauges.Scan(&isrs); err != nil { + return nil, err + } + feedback.Info("Erased %s", isrs) + unchanged-- + } + if err := obsGauges.Err(); err != nil { + return nil, err + } + if unchanged == len(gauges) { return nil, UnchangedError("All gauges unchanged") } + feedback.Info("Importing gauges took %s", + time.Since(start)) + return nil, err }