mirror of
				https://github.com/ClusterCockpit/cc-backend
				synced 2025-11-04 01:25:06 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			91 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright (C) NHR@FAU, University Erlangen-Nuremberg.
 | 
						|
// All rights reserved.
 | 
						|
// Use of this source code is governed by a MIT-style
 | 
						|
// license that can be found in the LICENSE file.
 | 
						|
package repository
 | 
						|
 | 
						|
import (
 | 
						|
	"github.com/ClusterCockpit/cc-backend/pkg/log"
 | 
						|
	"github.com/jmoiron/sqlx"
 | 
						|
)
 | 
						|
 | 
						|
type Transaction struct {
 | 
						|
	tx   *sqlx.Tx
 | 
						|
	stmt *sqlx.NamedStmt
 | 
						|
}
 | 
						|
 | 
						|
func (r *JobRepository) TransactionInit() (*Transaction, error) {
 | 
						|
	var err error
 | 
						|
	t := new(Transaction)
 | 
						|
 | 
						|
	t.tx, err = r.DB.Beginx()
 | 
						|
	if err != nil {
 | 
						|
		log.Warn("Error while bundling transactions")
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
	return t, nil
 | 
						|
}
 | 
						|
 | 
						|
func (r *JobRepository) TransactionCommit(t *Transaction) error {
 | 
						|
	var err error
 | 
						|
	if t.tx != nil {
 | 
						|
		if err = t.tx.Commit(); err != nil {
 | 
						|
			log.Warn("Error while committing transactions")
 | 
						|
			return err
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	t.tx, err = r.DB.Beginx()
 | 
						|
	if err != nil {
 | 
						|
		log.Warn("Error while bundling transactions")
 | 
						|
		return err
 | 
						|
	}
 | 
						|
 | 
						|
	return nil
 | 
						|
}
 | 
						|
 | 
						|
func (r *JobRepository) TransactionEnd(t *Transaction) error {
 | 
						|
	if err := t.tx.Commit(); err != nil {
 | 
						|
		log.Warn("Error while committing SQL transactions")
 | 
						|
		return err
 | 
						|
	}
 | 
						|
	return nil
 | 
						|
}
 | 
						|
 | 
						|
func (r *JobRepository) TransactionAddNamed(
 | 
						|
	t *Transaction,
 | 
						|
	query string,
 | 
						|
	args ...interface{},
 | 
						|
) (int64, error) {
 | 
						|
	res, err := t.tx.NamedExec(query, args)
 | 
						|
	if err != nil {
 | 
						|
		log.Errorf("Named Exec failed: %v", err)
 | 
						|
		return 0, err
 | 
						|
	}
 | 
						|
 | 
						|
	id, err := res.LastInsertId()
 | 
						|
	if err != nil {
 | 
						|
		log.Errorf("repository initDB(): %v", err)
 | 
						|
		return 0, err
 | 
						|
	}
 | 
						|
 | 
						|
	return id, nil
 | 
						|
}
 | 
						|
 | 
						|
func (r *JobRepository) TransactionAdd(t *Transaction, query string, args ...interface{}) (int64, error) {
 | 
						|
 | 
						|
	res, err := t.tx.Exec(query, args...)
 | 
						|
	if err != nil {
 | 
						|
		log.Errorf("TransactionAdd(), Exec() Error: %v", err)
 | 
						|
		return 0, err
 | 
						|
	}
 | 
						|
 | 
						|
	id, err := res.LastInsertId()
 | 
						|
	if err != nil {
 | 
						|
		log.Errorf("TransactionAdd(), LastInsertId() Error: %v", err)
 | 
						|
		return 0, err
 | 
						|
	}
 | 
						|
 | 
						|
	return id, nil
 | 
						|
}
 |