Skip to content

Commit 385cc11

Browse files
committed
👌 chore: added execute batch with transaction #1
1 parent 22380cb commit 385cc11

1 file changed

Lines changed: 51 additions & 0 deletions

File tree

postgresconn/postgresconn_service.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ type PostgresService interface {
2424
ShowProcedureContent(procedure string) (string, error)
2525
ExplainAnalysis(query string) (string, error)
2626
ExplainAnalysisFromFile(filename string) (string, error)
27+
ExecuteBatch(statements []string) error
28+
ExecuteBatchWithTransaction(statements []string) error
2729
}
2830

2931
type postgresServiceImpl struct {
@@ -186,3 +188,52 @@ func (p *postgresServiceImpl) ExplainAnalysisFromFile(filename string) (string,
186188
query := string(bytes)
187189
return p.ExplainAnalysis(query)
188190
}
191+
192+
func (p *postgresServiceImpl) ExecuteBatch(statements []string) error {
193+
if len(statements) == 0 {
194+
return fmt.Errorf("missing statements")
195+
}
196+
tx, err := p.dbConn.Beginx()
197+
if err != nil {
198+
return err
199+
}
200+
defer func() {
201+
if p := recover(); p != nil {
202+
tx.Rollback()
203+
panic(p)
204+
} else if err != nil {
205+
tx.Rollback()
206+
} else {
207+
err = tx.Commit()
208+
}
209+
}()
210+
for _, statement := range statements {
211+
_, err := tx.Exec(statement)
212+
if err != nil {
213+
return err
214+
}
215+
}
216+
return nil
217+
}
218+
219+
func (p *postgresServiceImpl) ExecuteBatchWithTransaction(statements []string) error {
220+
tx, err := p.dbConn.Beginx()
221+
if err != nil {
222+
return err
223+
}
224+
defer func() {
225+
if p := recover(); p != nil {
226+
tx.Rollback()
227+
panic(p)
228+
} else if err != nil {
229+
tx.Rollback()
230+
} else {
231+
err = tx.Commit()
232+
}
233+
}()
234+
err = p.ExecuteBatch(statements)
235+
if err != nil {
236+
return err
237+
}
238+
return nil
239+
}

0 commit comments

Comments
 (0)