forked from mirrors/gotosocial
38 lines
723 B
Go
38 lines
723 B
Go
package otelsql
|
|
|
|
import (
|
|
"context"
|
|
"database/sql/driver"
|
|
|
|
"go.opentelemetry.io/otel/trace"
|
|
)
|
|
|
|
type otelTx struct {
|
|
ctx context.Context
|
|
tx driver.Tx
|
|
instrum *dbInstrum
|
|
}
|
|
|
|
var _ driver.Tx = (*otelTx)(nil)
|
|
|
|
func newTx(ctx context.Context, tx driver.Tx, instrum *dbInstrum) *otelTx {
|
|
return &otelTx{
|
|
ctx: ctx,
|
|
tx: tx,
|
|
instrum: instrum,
|
|
}
|
|
}
|
|
|
|
func (tx *otelTx) Commit() error {
|
|
return tx.instrum.withSpan(tx.ctx, "tx.Commit", "",
|
|
func(ctx context.Context, span trace.Span) error {
|
|
return tx.tx.Commit()
|
|
})
|
|
}
|
|
|
|
func (tx *otelTx) Rollback() error {
|
|
return tx.instrum.withSpan(tx.ctx, "tx.Rollback", "",
|
|
func(ctx context.Context, span trace.Span) error {
|
|
return tx.tx.Rollback()
|
|
})
|
|
}
|