Transaction

Definition

After creating the database connection, we use the database connection to create a transaction manager.

Transaction management in GoooQo is accomplished through the cooperation of TransactionManager and TransactionContext (TC for short).

package core

import (
	"context"
	"database/sql/driver"
)

type TransactionManager interface {
	GetClient() any
	StartTransaction(ctx context.Context) (TransactionContext, error)
	SubmitTransaction(ctx context.Context, callback func(tc TransactionContext) error) error
}

type TransactionContext interface {
	context.Context
	driver.Tx
	Parent() context.Context
	SavePoint(name string) error
	RollbackTo(name string) error
}

The method TransactionManager#StartTransaction is responsible for starting a transaction and returning TC; TC combines driver.Tx and is responsible for transaction commit and rollback.

The TxDataAccess interface combines TransactionManager and DataAccess, which can conveniently manage transactions while providing the database operations.

Usages

Use StartTransaction to start a transaction and manually commit or rollback the transaction:

Or use SubmitTransaction to submit the transaction via callback:

Last updated

Was this helpful?