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:
Silvan
2024-11-22 17:25:28 +01:00
committed by GitHub
parent 48ffc902cc
commit 1ee7a1ab7c
13 changed files with 177 additions and 70 deletions

View File

@@ -2,7 +2,6 @@ package eventstore
import (
"context"
"database/sql"
_ "embed"
"errors"
"fmt"
@@ -11,6 +10,7 @@ import (
"github.com/jackc/pgx/v5/pgconn"
"github.com/zitadel/logging"
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/zerrors"
)
@@ -24,7 +24,7 @@ var (
addConstraintStmt string
)
func handleUniqueConstraints(ctx context.Context, tx *sql.Tx, commands []eventstore.Command) error {
func handleUniqueConstraints(ctx context.Context, tx database.Tx, commands []eventstore.Command) error {
deletePlaceholders := make([]string, 0)
deleteArgs := make([]any, 0)