2025-04-29 06:03:47 +02:00
|
|
|
package database
|
|
|
|
|
|
|
|
import "context"
|
|
|
|
|
2025-05-08 19:01:55 +02:00
|
|
|
// Transaction is an SQL transaction.
|
2025-04-29 06:03:47 +02:00
|
|
|
type Transaction interface {
|
|
|
|
Commit(ctx context.Context) error
|
|
|
|
Rollback(ctx context.Context) error
|
|
|
|
End(ctx context.Context, err error) error
|
|
|
|
|
|
|
|
Begin(ctx context.Context) (Transaction, error)
|
|
|
|
|
|
|
|
QueryExecutor
|
|
|
|
}
|
|
|
|
|
2025-05-08 19:01:55 +02:00
|
|
|
// Beginner can start a new transaction.
|
2025-04-29 06:03:47 +02:00
|
|
|
type Beginner interface {
|
|
|
|
Begin(ctx context.Context, opts *TransactionOptions) (Transaction, error)
|
|
|
|
}
|
|
|
|
|
|
|
|
type TransactionOptions struct {
|
|
|
|
IsolationLevel IsolationLevel
|
|
|
|
AccessMode AccessMode
|
|
|
|
}
|
|
|
|
|
|
|
|
type IsolationLevel uint8
|
|
|
|
|
|
|
|
const (
|
|
|
|
IsolationLevelSerializable IsolationLevel = iota
|
|
|
|
IsolationLevelReadCommitted
|
|
|
|
)
|
|
|
|
|
|
|
|
type AccessMode uint8
|
|
|
|
|
|
|
|
const (
|
|
|
|
AccessModeReadWrite AccessMode = iota
|
|
|
|
AccessModeReadOnly
|
|
|
|
)
|