fix(eventstore): use decimal, correct mirror (#9904)

back port #9812, #9878, #9881, #9884

---------

Co-authored-by: Livio Spring <livio.a@gmail.com>
Co-authored-by: Stefan Benz <46600784+stebenz@users.noreply.github.com>
This commit is contained in:
Silvan
2025-05-20 12:53:33 +02:00
committed by GitHub
parent 63b352c5ff
commit ed6437dcd8
61 changed files with 559 additions and 337 deletions

View File

@@ -73,10 +73,16 @@ func (_ *Config) Decode(configs []interface{}) (dialect.Connector, error) {
}
func (c *Config) Connect(useAdmin bool) (*sql.DB, *pgxpool.Pool, error) {
dialect.RegisterAfterConnect(func(ctx context.Context, c *pgx.Conn) error {
dialect.RegisterAfterConnect(func(ctx context.Context, conn *pgx.Conn) error {
// CockroachDB by default does not allow multiple modifications of the same table using ON CONFLICT
// This is needed to fill the fields table of the eventstore during eventstore.Push.
_, err := c.Exec(ctx, "SET enable_multiple_modifications_of_table = on")
// This modification is only needed on crdb so we check if the connection is crdb
// postgres doesn't have parameter so we check if the parameter is empty
if conn.PgConn().ParameterStatus("crdb_version") == "" {
return nil
}
_, err := conn.Exec(ctx, "SET enable_multiple_modifications_of_table = on")
return err
})
connConfig := dialect.NewConnectionConfig(c.MaxOpenConns, c.MaxIdleConns)

View File

@@ -5,6 +5,7 @@ import (
"errors"
"reflect"
pgxdecimal "github.com/jackc/pgx-shopspring-decimal"
"github.com/jackc/pgx/v5"
"github.com/jackc/pgx/v5/pgtype"
)
@@ -21,7 +22,12 @@ type ConnectionConfig struct {
AfterConnect []func(ctx context.Context, c *pgx.Conn) error
}
var afterConnectFuncs []func(ctx context.Context, c *pgx.Conn) error
var afterConnectFuncs = []func(ctx context.Context, c *pgx.Conn) error{
func(ctx context.Context, c *pgx.Conn) error {
pgxdecimal.Register(c.TypeMap())
return nil
},
}
func RegisterAfterConnect(f func(ctx context.Context, c *pgx.Conn) error) {
afterConnectFuncs = append(afterConnectFuncs, f)

View File

@@ -81,13 +81,15 @@ func (c *Config) Connect(useAdmin bool) (*sql.DB, *pgxpool.Pool, error) {
return nil, nil, err
}
config.AfterConnect = func(ctx context.Context, conn *pgx.Conn) error {
for _, f := range connConfig.AfterConnect {
if err := f(ctx, conn); err != nil {
return err
if len(connConfig.AfterConnect) > 0 {
config.AfterConnect = func(ctx context.Context, conn *pgx.Conn) error {
for _, f := range connConfig.AfterConnect {
if err := f(ctx, conn); err != nil {
return err
}
}
return nil
}
return nil
}
if connConfig.MaxOpenConns != 0 {