Skip to content

Commit

Permalink
remove tracing abstraction
Browse files Browse the repository at this point in the history
  • Loading branch information
John Coleman committed Nov 20, 2024
1 parent b7d7c85 commit e0cfd39
Show file tree
Hide file tree
Showing 7 changed files with 64 additions and 101 deletions.
63 changes: 32 additions & 31 deletions conn.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"fmt"
"github.com/ninthclowd/unixodbc/internal/cache"
"github.com/ninthclowd/unixodbc/internal/odbc"
"runtime/trace"
"time"
)

Expand Down Expand Up @@ -95,8 +96,8 @@ func (c *Connection) Begin() (driver.Tx, error) {

// BeginTx implements driver.ConnBeginTx
func (c *Connection) BeginTx(ctx context.Context, opts driver.TxOptions) (driver.Tx, error) {
ctx, trace := Tracer.NewTask(ctx, "BeginTx")
defer trace.End()
ctx, trc := trace.NewTask(ctx, "BeginTx")
defer trc.End()
var err error

if sqlIsoLvl := sql.IsolationLevel(opts.Isolation); sqlIsoLvl != sql.LevelDefault {
Expand All @@ -106,7 +107,7 @@ func (c *Connection) BeginTx(ctx context.Context, opts driver.TxOptions) (driver
return nil, fmt.Errorf("isolation level %d is not supported", opts.Isolation)
}

Tracer.WithRegion(ctx, "setIsolationLevel", func() {
trace.WithRegion(ctx, "setIsolationLevel", func() {
err = c.odbcConnection.SetIsolationLevel(odbcIsoLvl)
})
if err != nil {
Expand All @@ -115,15 +116,15 @@ func (c *Connection) BeginTx(ctx context.Context, opts driver.TxOptions) (driver
}

if opts.ReadOnly {
Tracer.WithRegion(ctx, "setReadOnly", func() {
trace.WithRegion(ctx, "setReadOnly", func() {
err = c.odbcConnection.SetReadOnlyMode(odbc.ModeReadOnly)
})
if err != nil {
return nil, err
}
}

Tracer.WithRegion(ctx, "setAutoCommit", func() {
trace.WithRegion(ctx, "setAutoCommit", func() {
err = c.odbcConnection.SetAutoCommit(false)
})
if err != nil {
Expand All @@ -146,20 +147,20 @@ func (c *Connection) Prepare(query string) (driver.Stmt, error) {

// PrepareContext implements driver.ConnPrepareContext
func (c *Connection) PrepareContext(ctx context.Context, query string) (driver.Stmt, error) {
ctx, trace := Tracer.NewTask(ctx, "connection::PrepareContext")
defer trace.End()
Tracer.Logf(ctx, "query", query)
ctx, trc := trace.NewTask(ctx, "connection::PrepareContext")
defer trc.End()
trace.Logf(ctx, "query", query)

var stmt *PreparedStatement
var err error

Tracer.WithRegion(ctx, "Cache lookup", func() {
trace.WithRegion(ctx, "Cache lookup", func() {
stmt = c.cachedStatements.Get(query, true)
})

if stmt != nil {
c.uncachedStatements[stmt] = true
Tracer.WithRegion(ctx, "Reset parameters", func() {
trace.WithRegion(ctx, "Reset parameters", func() {
err = stmt.odbcStatement.ResetParams()
})
if err != nil {
Expand All @@ -169,30 +170,30 @@ func (c *Connection) PrepareContext(ctx context.Context, query string) (driver.S
}

var st odbc.Statement
Tracer.WithRegion(ctx, "Create statement", func() {
trace.WithRegion(ctx, "Create statement", func() {
st, err = c.odbcConnection.Statement()
})
if err != nil {
return nil, err
}
Tracer.WithRegion(ctx, "Prepare statement", func() {
trace.WithRegion(ctx, "Prepare statement", func() {
err = st.Prepare(ctx, query)
})
if err != nil {
Tracer.WithRegion(ctx, "Close statement", func() {
trace.WithRegion(ctx, "Close statement", func() {
_ = st.Close()
})
return nil, err
}

var numParam int

Tracer.WithRegion(ctx, "Read parameter count", func() {
trace.WithRegion(ctx, "Read parameter count", func() {
numParam, err = st.NumParams()
})

if err != nil {
Tracer.WithRegion(ctx, "Close statement", func() {
trace.WithRegion(ctx, "Close statement", func() {
_ = st.Close()
})
return nil, err
Expand All @@ -204,30 +205,30 @@ func (c *Connection) PrepareContext(ctx context.Context, query string) (driver.S

// ExecContext implements driver.ExecerContext
func (c *Connection) ExecContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Result, error) {
ctx, trace := Tracer.NewTask(ctx, "connection::ExecContext")
defer trace.End()
Tracer.Logf(ctx, "query", query)
ctx, trc := trace.NewTask(ctx, "connection::ExecContext")
defer trc.End()
trace.Logf(ctx, "query", query)
var st odbc.Statement
var err error

Tracer.WithRegion(ctx, "Create statement", func() {
trace.WithRegion(ctx, "Create statement", func() {
st, err = c.odbcConnection.Statement()
})
if err != nil {
return nil, err
}
defer func() {
Tracer.WithRegion(ctx, "Close statement", func() {
trace.WithRegion(ctx, "Close statement", func() {
_ = st.Close()
})
}()
Tracer.WithRegion(ctx, "Bind parameters", func() {
trace.WithRegion(ctx, "Bind parameters", func() {
err = st.BindParams(toValues(args)...)
})
if err != nil {
return nil, err
}
Tracer.WithRegion(ctx, "Execute statement", func() {
trace.WithRegion(ctx, "Execute statement", func() {
err = st.ExecDirect(ctx, query)
})
if err != nil {
Expand All @@ -238,37 +239,37 @@ func (c *Connection) ExecContext(ctx context.Context, query string, args []drive

// QueryContext implements driver.QueryerContext
func (c *Connection) QueryContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Rows, error) {
ctx, trace := Tracer.NewTask(ctx, "connection::QueryContext")
defer trace.End()
Tracer.Logf(ctx, "query", query)
ctx, trc := trace.NewTask(ctx, "connection::QueryContext")
defer trc.End()
trace.Logf(ctx, "query", query)

var st odbc.Statement
var err error

Tracer.WithRegion(ctx, "Create statement", func() {
trace.WithRegion(ctx, "Create statement", func() {
st, err = c.odbcConnection.Statement()
})
if err != nil {
return nil, err
}

Tracer.WithRegion(ctx, "Bind parameters", func() {
trace.WithRegion(ctx, "Bind parameters", func() {
err = st.BindParams(toValues(args)...)
})
if err != nil {
_ = st.Close()
return nil, err
}

Tracer.WithRegion(ctx, "Executing statement", func() {
trace.WithRegion(ctx, "Executing statement", func() {
err = st.ExecDirect(ctx, query)
})
if err != nil {
_ = st.Close()
return nil, err
}
var rs odbc.RecordSet
Tracer.WithRegion(ctx, "Getting recordset", func() {
trace.WithRegion(ctx, "Getting recordset", func() {
rs, err = st.RecordSet()
})
if err != nil {
Expand All @@ -281,8 +282,8 @@ func (c *Connection) QueryContext(ctx context.Context, query string, args []driv

// Ping implements driver.Pinger
func (c *Connection) Ping(ctx context.Context) error {
ctx, trace := Tracer.NewTask(ctx, "connection::Ping")
defer trace.End()
ctx, trc := trace.NewTask(ctx, "connection::Ping")
defer trc.End()
if c.odbcConnection == nil {
return driver.ErrBadConn
}
Expand Down
19 changes: 10 additions & 9 deletions connector.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"github.com/ninthclowd/unixodbc/internal/cache"
"github.com/ninthclowd/unixodbc/internal/odbc"
"io"
"runtime/trace"
"sync"
)

Expand Down Expand Up @@ -57,27 +58,27 @@ func (c *Connector) initialize(ctx context.Context) (err error) {
return nil
}

ctx, trace := Tracer.NewTask(ctx, "connection::initialize")
defer trace.End()
ctx, trc := trace.NewTask(ctx, "connection::initialize")
defer trc.End()

if c.odbcEnvironment == nil {
Tracer.WithRegion(ctx, "initializing ODBC environment", func() {
trace.WithRegion(ctx, "initializing ODBC environment", func() {
c.odbcEnvironment, err = odbc.NewEnvironment()
})
if err != nil {
return
}
}

Tracer.WithRegion(ctx, "setting version", func() {
trace.WithRegion(ctx, "setting version", func() {
err = c.odbcEnvironment.SetVersion(odbc.Version380)
})
if err != nil {
return
}

//do not enable connection pooling at the driver level since go sql will be managing a connection pool
Tracer.WithRegion(ctx, "setting pool option", func() {
trace.WithRegion(ctx, "setting pool option", func() {
err = c.odbcEnvironment.SetPoolOption(odbc.PoolOff)
})
if err != nil {
Expand All @@ -90,8 +91,8 @@ func (c *Connector) initialize(ctx context.Context) (err error) {

// Connect implements driver.Connector
func (c *Connector) Connect(ctx context.Context) (driver.Conn, error) {
ctx, trace := Tracer.NewTask(ctx, "Connect")
defer trace.End()
ctx, trc := trace.NewTask(ctx, "Connect")
defer trc.End()

var err error
if err = c.initialize(ctx); err != nil {
Expand All @@ -103,7 +104,7 @@ func (c *Connector) Connect(ctx context.Context) (driver.Conn, error) {
}

var connStr string
Tracer.WithRegion(ctx, "generating connection string", func() {
trace.WithRegion(ctx, "generating connection string", func() {
connStr, err = c.ConnectionString.ConnectionString(ctx)
})
if err != nil {
Expand All @@ -116,7 +117,7 @@ func (c *Connector) Connect(ctx context.Context) (driver.Conn, error) {
uncachedStatements: make(map[*PreparedStatement]bool),
}

Tracer.WithRegion(ctx, "connecting", func() {
trace.WithRegion(ctx, "connecting", func() {
conn.odbcConnection, err = c.odbcEnvironment.Connect(ctx, connStr)
})

Expand Down
19 changes: 11 additions & 8 deletions rows.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"github.com/ninthclowd/unixodbc/internal/odbc"
"io"
"reflect"
"runtime/trace"
)

var _ driver.Rows = (*Rows)(nil)
Expand Down Expand Up @@ -53,7 +54,7 @@ func (r *Rows) Columns() []string {
func (r *Rows) Close() error {
errs := make(MultipleErrors)
if r.odbcRecordset != nil {
Tracer.WithRegion(r.ctx, "Rows::Close", func() {
trace.WithRegion(r.ctx, "Rows::Close", func() {
errs["closing recordset"] = r.odbcRecordset.Close()
})
r.odbcRecordset = nil
Expand All @@ -68,7 +69,7 @@ func (r *Rows) Close() error {
func (r *Rows) Next(dest []driver.Value) error {
var more bool
var err error
Tracer.WithRegion(r.ctx, "Fetching row", func() {
trace.WithRegion(r.ctx, "Fetching row", func() {
more, err = r.odbcRecordset.Fetch()
})
if err != nil {
Expand All @@ -80,12 +81,14 @@ func (r *Rows) Next(dest []driver.Value) error {
}

errs := make(MultipleErrors)
for i := range dest {
col := r.odbcRecordset.Column(i)
Tracer.WithRegion(r.ctx, "Scanning column "+col.Name(), func() {
dest[i], errs[col.Name()] = col.Value()
})
}
trace.WithRegion(r.ctx, "Scanning row", func() {
for i := range dest {
col := r.odbcRecordset.Column(i)
trace.WithRegion(r.ctx, "Scanning column "+col.Name(), func() {
dest[i], errs[col.Name()] = col.Value()
})
}
})
return errs.Error()
}

Expand Down
20 changes: 11 additions & 9 deletions statement.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"context"
"database/sql/driver"
"github.com/ninthclowd/unixodbc/internal/odbc"
"runtime/trace"
)

var (
Expand Down Expand Up @@ -55,16 +56,16 @@ func (s *PreparedStatement) ExecContext(ctx context.Context, args []driver.Named
if s.odbcStatement == nil {
return nil, odbc.ErrInvalidHandle
}
ctx, trace := Tracer.NewTask(ctx, "statement::ExecContext")
defer trace.End()
ctx, trc := trace.NewTask(ctx, "statement::ExecContext")
defer trc.End()
var err error
Tracer.WithRegion(ctx, "BindParams", func() {
trace.WithRegion(ctx, "BindParams", func() {
err = s.odbcStatement.BindParams(toValues(args)...)
})
if err != nil {
return nil, s.closeWithError(err)
}
Tracer.WithRegion(ctx, "Execute", func() {
trace.WithRegion(ctx, "Execute", func() {
err = s.odbcStatement.Execute(ctx)
})
if err != nil {
Expand All @@ -83,28 +84,29 @@ func (s *PreparedStatement) QueryContext(ctx context.Context, args []driver.Name
if s.odbcStatement == nil {
return nil, odbc.ErrInvalidHandle
}
ctx, trace := Tracer.NewTask(ctx, "statement::QueryContext")
defer trace.End()
ctx, trc := trace.NewTask(ctx, "statement::QueryContext")
defer trc.End()
var err error
Tracer.WithRegion(ctx, "BindParams", func() {
trace.WithRegion(ctx, "BindParams", func() {
err = s.odbcStatement.BindParams(toValues(args)...)
})
if err != nil {
return nil, s.closeWithError(err)
}
Tracer.WithRegion(ctx, "Execute", func() {
trace.WithRegion(ctx, "Execute", func() {
err = s.odbcStatement.Execute(ctx)
})
if err != nil {
return nil, s.closeWithError(err)
}

var rs odbc.RecordSet
Tracer.WithRegion(ctx, "RecordSet", func() {
trace.WithRegion(ctx, "RecordSet", func() {
rs, err = s.odbcStatement.RecordSet()
})
if err != nil {
return nil, s.closeWithError(err)
}

return &Rows{odbcRecordset: rs, ctx: ctx}, nil
}
7 changes: 0 additions & 7 deletions tracer.go

This file was deleted.

Loading

0 comments on commit e0cfd39

Please sign in to comment.