in xray/sql_context.go [154:180]
func (conn *driverConn) BeginTx(ctx context.Context, opts driver.TxOptions) (driver.Tx, error) {
var tx driver.Tx
var err error
if connCtx, ok := conn.Conn.(driver.ConnBeginTx); ok {
tx, err = connCtx.BeginTx(ctx, opts)
} else {
if opts.Isolation != driver.IsolationLevel(sql.LevelDefault) {
return nil, errors.New("xray: driver does not support non-default isolation level")
}
if opts.ReadOnly {
return nil, errors.New("xray: driver does not support read-only transactions")
}
tx, err = conn.Conn.Begin()
if err == nil {
select {
default:
case <-ctx.Done():
tx.Rollback()
return nil, ctx.Err()
}
}
}
if err != nil {
return nil, err
}
return &driverTx{Tx: tx}, nil
}