Mercurial > gemma
changeset 5431:fc79622783a7 marking-single-beam
ISR job: Moved statement preparations out out bottleneck processing.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Mon, 12 Jul 2021 02:31:30 +0200 |
parents | aa199f280f64 |
children | 776e34886471 |
files | pkg/imports/isr.go |
diffstat | 1 files changed, 61 insertions(+), 27 deletions(-) [+] |
line wrap: on
line diff
--- a/pkg/imports/isr.go Sun Jul 11 16:24:20 2021 +0200 +++ b/pkg/imports/isr.go Mon Jul 12 02:31:30 2021 +0200 @@ -155,11 +155,17 @@ return nil, err } + isrs, err := newISRStmts(ctx, conn) + if err != nil { + return nil, err + } + defer isrs.close() + for i := range bns { start := time.Now() feedback.Info("Processing bottleneck '%s' ...", bns[i].bn) err := isr.processBottleneck( - ctx, conn, + ctx, conn, isrs, heights, &bns[i], ) @@ -172,9 +178,53 @@ return nil, nil } +type isrStmts struct { + insertAreas *sql.Stmt + deleteAreas *sql.Stmt + fetchMarkingPoints *sql.Stmt + deleteMarkingPoints *sql.Stmt + insertMarkingPoints *sql.Stmt +} + +func newISRStmts(ctx context.Context, conn *sql.Conn) (*isrStmts, error) { + var isrs isrStmts + for _, x := range []struct { + stmt **sql.Stmt + query string + }{ + {&isrs.insertAreas, insertIsoAreasSQL}, + {&isrs.deleteAreas, deleteIsoAreasSQL}, + {&isrs.fetchMarkingPoints, fetchMarkingPointsSQL}, + {&isrs.deleteMarkingPoints, deleteMarkingPointsSQL}, + {&isrs.insertMarkingPoints, insertMarkingPointsSQL}, + } { + var err error + if *x.stmt, err = conn.PrepareContext(ctx, x.query); err != nil { + isrs.close() + return nil, err + } + } + return &isrs, nil +} + +func (isrs *isrStmts) close() { + for _, x := range []**sql.Stmt{ + &isrs.insertAreas, + &isrs.deleteAreas, + &isrs.fetchMarkingPoints, + &isrs.deleteMarkingPoints, + &isrs.insertMarkingPoints, + } { + if *x != nil { + (*x).Close() + } + } +} + func (isr *IsoRefresh) processBottleneck( ctx context.Context, conn *sql.Conn, + isrs *isrStmts, heights mesh.ClassBreaks, bn *bottleneckSoundingResults, ) error { @@ -186,29 +236,13 @@ defer tx.Rollback() var ( - insertAreasStmt, - deleteAreasStmt, - fetchMarkingPointsStmt, - deleteMarkingPointsStmt, - insertMarkingPointsStmt *sql.Stmt + insertAreas = tx.StmtContext(ctx, isrs.insertAreas) + deleteAreas = tx.StmtContext(ctx, isrs.deleteAreas) + fetchMarkingPoints = tx.StmtContext(ctx, isrs.fetchMarkingPoints) + deleteMarkingPoints = tx.StmtContext(ctx, isrs.deleteMarkingPoints) + insertMarkingPoints = tx.StmtContext(ctx, isrs.insertMarkingPoints) ) - for _, x := range []struct { - stmt **sql.Stmt - query string - }{ - {&insertAreasStmt, insertIsoAreasSQL}, - {&deleteAreasStmt, deleteIsoAreasSQL}, - {&fetchMarkingPointsStmt, fetchMarkingPointsSQL}, - {&deleteMarkingPointsStmt, deleteMarkingPointsSQL}, - {&insertMarkingPointsStmt, insertMarkingPointsSQL}, - } { - if *x.stmt, err = tx.PrepareContext(ctx, x.query); err != nil { - return err - } - defer (*x.stmt).Close() - } - // For all sounding results in bottleneck. for _, sr := range bn.srs { switch sr.surveyType { @@ -219,7 +253,7 @@ var points mesh.MultiPointZ if err := func() error { - rows, err := fetchMarkingPointsStmt.QueryContext(ctx, sr.id) + rows, err := fetchMarkingPoints.QueryContext(ctx, sr.id) if err != nil { return err } @@ -242,7 +276,7 @@ } // Delete old points - if _, err := deleteMarkingPointsStmt.ExecContext(ctx, sr.id); err != nil { + if _, err := deleteMarkingPoints.ExecContext(ctx, sr.id); err != nil { return err } @@ -255,7 +289,7 @@ if len(class) == 0 { continue } - if _, err := insertMarkingPointsStmt.ExecContext( + if _, err := insertMarkingPoints.ExecContext( ctx, sr.id, heights[i], 4326, class.AsWKB(), ); err != nil { return err @@ -270,7 +304,7 @@ hs := heights.ExtrapolateClassBreaks(tree.Min().Z, tree.Max().Z).Dedup() // Delete the old iso areas. - if _, err := deleteAreasStmt.ExecContext(ctx, sr); err != nil { + if _, err := deleteAreas.ExecContext(ctx, sr); err != nil { return err } @@ -290,7 +324,7 @@ if len(a) == 0 { continue } - if _, err := insertAreasStmt.ExecContext( + if _, err := insertAreas.ExecContext( ctx, sr, hs[i], tree.EPSG(), a.AsWKB(),