Mercurial > gemma
changeset 5333:6c0f40676984 extented-report
Run xlsx templating in a read-only transaction.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Tue, 01 Jun 2021 00:37:03 +0200 |
parents | 9df7b39297ed |
children | 45805c454436 |
files | pkg/controllers/report.go pkg/xlsx/sql.go pkg/xlsx/templater.go |
diffstat | 3 files changed, 11 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/pkg/controllers/report.go Tue Jun 01 00:23:25 2021 +0200 +++ b/pkg/controllers/report.go Tue Jun 01 00:37:03 2021 +0200 @@ -14,6 +14,7 @@ package controllers import ( + "database/sql" "fmt" "log" "net/http" @@ -157,7 +158,10 @@ ctx := req.Context() conn := middleware.GetDBConn(req) - if err := action.Execute(ctx, conn, template); err != nil { + tx, err := conn.BeginTx(ctx, &sql.TxOptions{ReadOnly: true}) + defer tx.Rollback() + + if err := action.Execute(ctx, tx, template); err != nil { log.Printf("error: %v\n", err) http.Error(rw, "Error: "+err.Error(), http.StatusInternalServerError) return
--- a/pkg/xlsx/sql.go Tue Jun 01 00:23:25 2021 +0200 +++ b/pkg/xlsx/sql.go Tue Jun 01 00:37:03 2021 +0200 @@ -59,7 +59,7 @@ func query( ctx context.Context, - db *sql.Conn, + tx *sql.Tx, stmt string, eval func(string) (interface{}, error), ) (*sqlResult, error) { @@ -73,7 +73,7 @@ } } - rs, err := db.QueryContext(ctx, nstmt, args...) + rs, err := tx.QueryContext(ctx, nstmt, args...) if err != nil { return nil, err }
--- a/pkg/xlsx/templater.go Tue Jun 01 00:23:25 2021 +0200 +++ b/pkg/xlsx/templater.go Tue Jun 01 00:37:03 2021 +0200 @@ -48,7 +48,7 @@ type executor struct { ctx context.Context - db *sql.Conn + tx *sql.Tx template *excelize.File keep map[string]bool expressions map[string]gval.Evaluable @@ -74,13 +74,13 @@ func (a *Action) Execute( ctx context.Context, - db *sql.Conn, + tx *sql.Tx, template *excelize.File, ) error { e := executor{ ctx: ctx, - db: db, + tx: tx, template: template, keep: map[string]bool{}, expressions: map[string]gval.Evaluable{}, @@ -260,7 +260,7 @@ return f(e.ctx, vars) } - res, err := query(e.ctx, e.db, action.Statement, eval) + res, err := query(e.ctx, e.tx, action.Statement, eval) if err != nil { return err }