mirror of
https://github.com/zitadel/zitadel.git
synced 2024-12-15 12:27:59 +00:00
1ee7a1ab7c
# 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>
44 lines
1.2 KiB
Go
44 lines
1.2 KiB
Go
package eventstore
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/zitadel/zitadel/internal/database"
|
|
"github.com/zitadel/zitadel/internal/eventstore"
|
|
)
|
|
|
|
var (
|
|
// pushPlaceholderFmt defines how data are inserted into the events table
|
|
pushPlaceholderFmt string
|
|
// uniqueConstraintPlaceholderFmt defines the format of the unique constraint error returned from the database
|
|
uniqueConstraintPlaceholderFmt string
|
|
|
|
_ eventstore.Pusher = (*Eventstore)(nil)
|
|
)
|
|
|
|
type Eventstore struct {
|
|
client *database.DB
|
|
}
|
|
|
|
// Client implements the [eventstore.Pusher]
|
|
func (es *Eventstore) Client() *database.DB {
|
|
return es.client
|
|
}
|
|
|
|
func NewEventstore(client *database.DB) *Eventstore {
|
|
switch client.Type() {
|
|
case "cockroach":
|
|
pushPlaceholderFmt = "($%d, $%d, $%d, $%d, $%d, $%d, $%d, $%d, $%d, hlc_to_timestamp(cluster_logical_timestamp()), cluster_logical_timestamp(), $%d)"
|
|
uniqueConstraintPlaceholderFmt = "('%s', '%s', '%s')"
|
|
case "postgres":
|
|
pushPlaceholderFmt = "($%d, $%d, $%d, $%d, $%d, $%d, $%d, $%d, $%d, statement_timestamp(), EXTRACT(EPOCH FROM clock_timestamp()), $%d)"
|
|
uniqueConstraintPlaceholderFmt = "(%s, %s, %s)"
|
|
}
|
|
|
|
return &Eventstore{client: client}
|
|
}
|
|
|
|
func (es *Eventstore) Health(ctx context.Context) error {
|
|
return es.client.PingContext(ctx)
|
|
}
|