changeset 4081:c9bef8c27685 historization_ng

Merged default
author Sascha Wilde <wilde@intevation.de>
date Thu, 25 Jul 2019 16:31:18 +0200
parents af2b20d6c921 (current diff) 7fb75deff16b (diff)
children c0642c1c0ff8
files pkg/imports/fa.go
diffstat 1 files changed, 20 insertions(+), 69 deletions(-) [+]
line wrap: on
line diff
--- a/pkg/imports/fa.go	Thu Jul 25 16:10:28 2019 +0200
+++ b/pkg/imports/fa.go	Thu Jul 25 16:31:18 2019 +0200
@@ -38,11 +38,6 @@
 	Insecure bool `json:"insecure"`
 }
 
-type uniqueFairwayAvailability struct {
-	BottleneckId string
-	Surdat       time.Time
-}
-
 // FAJobKind is import queue type identifier.
 const FAJobKind JobKind = "fa"
 
@@ -62,13 +57,7 @@
 FROM waterway.effective_fairway_availability
 ORDER BY measure_date DESC LIMIT 1
 `
-	listFairwayAvailabilitySQL = `
-SELECT
-  id,
-  bottleneck_id,
-  surdat
-FROM waterway.fairway_availability
-`
+
 	insertFASQL = `
 INSERT INTO waterway.fairway_availability (
   position_code,
@@ -84,7 +73,11 @@
   $4,
   $5,
   $6
-)
+) ON CONFLICT (bottleneck_id, surdat) DO UPDATE SET
+  position_code = EXCLUDED.position_code,
+  critical = EXCLUDED.critical,
+  date_info = EXCLUDED.date_info,
+  source_organization = EXCLUDED.source_organization
 RETURNING id`
 
 	insertBnPdfsSQL = `
@@ -101,6 +94,7 @@
   $4,
   $5
 ) ON CONFLICT ON CONSTRAINT bottleneck_pdfs_pkey DO NOTHING`
+
 	insertEFASQL = `
 INSERT INTO waterway.effective_fairway_availability (
   fairway_availability_id,
@@ -128,6 +122,7 @@
   $9,
   $10
 ) ON CONFLICT ON CONSTRAINT effective_fairway_availability_pkey DO NOTHING`
+
 	insertFAVSQL = `
 INSERT INTO waterway.fa_reference_values (
   fairway_availability_id,
@@ -212,36 +207,6 @@
 	return bns, nil
 }
 
-func loadFairwayAvailabilities(ctx context.Context, tx *sql.Tx) (map[uniqueFairwayAvailability]int64, error) {
-	rows, err := tx.QueryContext(ctx, listFairwayAvailabilitySQL)
-	if err != nil {
-		return nil, err
-	}
-	defer rows.Close()
-	fairwayAvailabilities := map[uniqueFairwayAvailability]int64{}
-	for rows.Next() {
-		var id int64
-		var bnId string
-		var sd time.Time
-		if err = rows.Scan(
-			&id,
-			&bnId,
-			&sd,
-		); err != nil {
-			return nil, err
-		}
-		key := uniqueFairwayAvailability{
-			BottleneckId: bnId,
-			Surdat:       sd,
-		}
-		fairwayAvailabilities[key] = id
-	}
-	if err = rows.Err(); err != nil {
-		return nil, err
-	}
-	return fairwayAvailabilities, nil
-}
-
 func latestDate(ctx context.Context, tx *sql.Tx) (pgtype.Timestamp, error) {
 	var date pgtype.Timestamp
 	err := tx.QueryRowContext(ctx, latestMeasureDateSQL).Scan(&date)
@@ -282,12 +247,7 @@
 		return nil, err
 	}
 
-	fairwayAvailabilities, err := loadFairwayAvailabilities(ctx, tx)
-	if err != nil {
-		return nil, err
-	}
-
-	faids, err := doForFAs(ctx, bns, fairwayAvailabilities, fas, tx, feedback)
+	faids, err := doForFAs(ctx, bns, fas, tx, feedback)
 	if err != nil {
 		return nil, fmt.Errorf("Error processing data: %v", err)
 	}
@@ -317,7 +277,6 @@
 func doForFAs(
 	ctx context.Context,
 	bnIds bottlenecks,
-	fairwayAvailabilities map[uniqueFairwayAvailability]int64,
 	fas []*ifaf.FairwayAvailability,
 	tx *sql.Tx,
 	feedback Feedback,
@@ -354,25 +313,17 @@
 			feedback.Warn("Bottleneck %s not found in database.", faRes.Bottleneck_id)
 			continue
 		}
-		uniqueFa := uniqueFairwayAvailability{
-			BottleneckId: faRes.Bottleneck_id,
-			Surdat:       faRes.SURDAT,
-		}
-		var found bool
-		if faID, found = fairwayAvailabilities[uniqueFa]; !found {
-			err = insertFAStmt.QueryRowContext(
-				ctx,
-				faRes.POSITION,
-				faRes.Bottleneck_id,
-				faRes.SURDAT,
-				faRes.Critical,
-				faRes.Date_Info,
-				faRes.Source,
-			).Scan(&faID)
-			if err != nil {
-				return nil, err
-			}
-			fairwayAvailabilities[uniqueFa] = faID
+		err = insertFAStmt.QueryRowContext(
+			ctx,
+			faRes.POSITION,
+			faRes.Bottleneck_id,
+			faRes.SURDAT,
+			faRes.Critical,
+			faRes.Date_Info,
+			faRes.Source,
+		).Scan(&faID)
+		if err != nil {
+			return nil, err
 		}
 		feedback.Info("Processing for Bottleneck %s", faRes.Bottleneck_id)
 		faIDs = append(faIDs, faRes.Bottleneck_id)