changeset 1580:c503d2fa9776

Bottleneck import: Use a prepared statement for import tracking, too.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 13 Dec 2018 14:06:48 +0100
parents b5d7770fe632
children 8e8523282853
files pkg/imports/bn.go
diffstat 1 files changed, 21 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/pkg/imports/bn.go	Thu Dec 13 13:41:27 2018 +0100
+++ b/pkg/imports/bn.go	Thu Dec 13 14:06:48 2018 +0100
@@ -163,16 +163,22 @@
 	}
 	defer tx.Rollback()
 
-	hasStmt, err := tx.PrepareContext(ctx, hasBottleneckSQL)
-	if err != nil {
-		return nil, err
+	var hasStmt, insertStmt, trackStmt *sql.Stmt
+
+	for _, x := range []struct {
+		sql  string
+		stmt **sql.Stmt
+	}{
+		{hasBottleneckSQL, &hasStmt},
+		{insertSQL, &insertStmt},
+		{trackImportSQL, &trackStmt},
+	} {
+		var err error
+		if *x.stmt, err = tx.PrepareContext(ctx, x.sql); err != nil {
+			return nil, err
+		}
+		defer (*x.stmt).Close()
 	}
-	defer hasStmt.Close()
-	insertStmt, err := tx.PrepareContext(ctx, insertSQL)
-	if err != nil {
-		return nil, err
-	}
-	defer insertStmt.Close()
 
 	var nids []int64
 
@@ -189,6 +195,7 @@
 		case err != nil:
 			return nil, err
 		case found:
+			// TODO: Deep comparison database vs. SOAP.
 			continue nextBN
 		}
 
@@ -225,10 +232,13 @@
 			return nil, err
 		}
 		nids = append(nids, nid)
-		feedback.Info("Inserted '%s'into database", bn.OBJNAM)
-		if err := track(ctx, tx, importID, "waterway.bottlenecks", nid); err != nil {
+		if _, err := trackStmt.ExecContext(
+			ctx,
+			tx, importID, "waterway.bottlenecks", nid,
+		); err != nil {
 			return nil, err
 		}
+		feedback.Info("Inserted '%s'into database", bn.OBJNAM)
 	}
 	if len(nids) == 0 {
 		feedback.Error("No new bottlenecks found")