mirror of
https://github.com/zitadel/zitadel.git
synced 2025-08-11 17:57:33 +00:00
feat(eventstore): accept transaction in push (#8945)
# Which Problems Are Solved Push is not capable of external transactions. # How the Problems Are Solved A new function `PushWithClient` is added to the eventstore framework which allows to pass a client which can either be a `*sql.Client` or `*sql.Tx` and is used during push. # Additional Changes Added interfaces to database package. # Additional Context - part of https://github.com/zitadel/zitadel/issues/8931 --------- Co-authored-by: Livio Spring <livio.a@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -18,6 +18,42 @@ import (
|
||||
"github.com/zitadel/zitadel/internal/zerrors"
|
||||
)
|
||||
|
||||
type QueryExecuter interface {
|
||||
Query(query string, args ...any) (*sql.Rows, error)
|
||||
QueryContext(ctx context.Context, query string, args ...any) (*sql.Rows, error)
|
||||
Exec(query string, args ...any) (sql.Result, error)
|
||||
ExecContext(ctx context.Context, query string, args ...any) (sql.Result, error)
|
||||
}
|
||||
|
||||
type Client interface {
|
||||
QueryExecuter
|
||||
BeginTx(ctx context.Context, opts *sql.TxOptions) (*sql.Tx, error)
|
||||
Begin() (*sql.Tx, error)
|
||||
}
|
||||
|
||||
type Tx interface {
|
||||
QueryExecuter
|
||||
Commit() error
|
||||
Rollback() error
|
||||
}
|
||||
|
||||
var (
|
||||
_ Client = (*sql.DB)(nil)
|
||||
_ Tx = (*sql.Tx)(nil)
|
||||
)
|
||||
|
||||
func CloseTransaction(tx Tx, err error) error {
|
||||
if err != nil {
|
||||
rollbackErr := tx.Rollback()
|
||||
logging.OnError(rollbackErr).Error("failed to rollback transaction")
|
||||
return err
|
||||
}
|
||||
|
||||
commitErr := tx.Commit()
|
||||
logging.OnError(commitErr).Error("failed to commit transaction")
|
||||
return commitErr
|
||||
}
|
||||
|
||||
type Config struct {
|
||||
Dialects map[string]interface{} `mapstructure:",remain"`
|
||||
EventPushConnRatio float64
|
||||
|
Reference in New Issue
Block a user