From e0cfd3948b822131cf1e97a8963c502b68a21c8e Mon Sep 17 00:00:00 2001 From: John Coleman Date: Wed, 20 Nov 2024 14:34:29 -0700 Subject: [PATCH] remove tracing abstraction --- conn.go | 63 +++++++++++++++++++++++----------------------- connector.go | 19 +++++++------- rows.go | 19 ++++++++------ statement.go | 20 ++++++++------- tracer.go | 7 ------ tracing/runtime.go | 22 ---------------- tracing/tracing.go | 15 ----------- 7 files changed, 64 insertions(+), 101 deletions(-) delete mode 100644 tracer.go delete mode 100644 tracing/runtime.go delete mode 100644 tracing/tracing.go diff --git a/conn.go b/conn.go index 9370b41..c83a60f 100644 --- a/conn.go +++ b/conn.go @@ -8,6 +8,7 @@ import ( "fmt" "github.com/ninthclowd/unixodbc/internal/cache" "github.com/ninthclowd/unixodbc/internal/odbc" + "runtime/trace" "time" ) @@ -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 { @@ -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 { @@ -115,7 +116,7 @@ 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 { @@ -123,7 +124,7 @@ func (c *Connection) BeginTx(ctx context.Context, opts driver.TxOptions) (driver } } - Tracer.WithRegion(ctx, "setAutoCommit", func() { + trace.WithRegion(ctx, "setAutoCommit", func() { err = c.odbcConnection.SetAutoCommit(false) }) if err != nil { @@ -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 { @@ -169,17 +170,17 @@ 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 @@ -187,12 +188,12 @@ func (c *Connection) PrepareContext(ctx context.Context, query string) (driver.S 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 @@ -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 { @@ -238,21 +239,21 @@ 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 { @@ -260,7 +261,7 @@ func (c *Connection) QueryContext(ctx context.Context, query string, args []driv return nil, err } - Tracer.WithRegion(ctx, "Executing statement", func() { + trace.WithRegion(ctx, "Executing statement", func() { err = st.ExecDirect(ctx, query) }) if err != nil { @@ -268,7 +269,7 @@ func (c *Connection) QueryContext(ctx context.Context, query string, args []driv 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 { @@ -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 } diff --git a/connector.go b/connector.go index 1796c87..f8c0793 100644 --- a/connector.go +++ b/connector.go @@ -7,6 +7,7 @@ import ( "github.com/ninthclowd/unixodbc/internal/cache" "github.com/ninthclowd/unixodbc/internal/odbc" "io" + "runtime/trace" "sync" ) @@ -57,11 +58,11 @@ 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 { @@ -69,7 +70,7 @@ func (c *Connector) initialize(ctx context.Context) (err error) { } } - Tracer.WithRegion(ctx, "setting version", func() { + trace.WithRegion(ctx, "setting version", func() { err = c.odbcEnvironment.SetVersion(odbc.Version380) }) if err != nil { @@ -77,7 +78,7 @@ func (c *Connector) initialize(ctx context.Context) (err error) { } //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 { @@ -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 { @@ -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 { @@ -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) }) diff --git a/rows.go b/rows.go index 32b0ee7..6c7af53 100644 --- a/rows.go +++ b/rows.go @@ -7,6 +7,7 @@ import ( "github.com/ninthclowd/unixodbc/internal/odbc" "io" "reflect" + "runtime/trace" ) var _ driver.Rows = (*Rows)(nil) @@ -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 @@ -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 { @@ -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() } diff --git a/statement.go b/statement.go index a5f0921..b27e53f 100644 --- a/statement.go +++ b/statement.go @@ -4,6 +4,7 @@ import ( "context" "database/sql/driver" "github.com/ninthclowd/unixodbc/internal/odbc" + "runtime/trace" ) var ( @@ -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 { @@ -83,16 +84,16 @@ 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 { @@ -100,11 +101,12 @@ func (s *PreparedStatement) QueryContext(ctx context.Context, args []driver.Name } 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 } diff --git a/tracer.go b/tracer.go deleted file mode 100644 index 404a142..0000000 --- a/tracer.go +++ /dev/null @@ -1,7 +0,0 @@ -package unixodbc - -import ( - "github.com/ninthclowd/unixodbc/tracing" -) - -var Tracer tracing.Tracer = new(tracing.RuntimeTracer) diff --git a/tracing/runtime.go b/tracing/runtime.go deleted file mode 100644 index 1b6b470..0000000 --- a/tracing/runtime.go +++ /dev/null @@ -1,22 +0,0 @@ -package tracing - -import ( - "context" - "runtime/trace" -) - -var _ Tracer = (*RuntimeTracer)(nil) - -type RuntimeTracer struct{} - -func (r *RuntimeTracer) WithRegion(ctx context.Context, regionName string, fn func()) { - trace.WithRegion(ctx, regionName, fn) -} - -func (r *RuntimeTracer) Logf(ctx context.Context, category, format string, args ...any) { - trace.Logf(ctx, category, format, args...) -} - -func (r *RuntimeTracer) NewTask(ctx context.Context, taskType string) (context.Context, Task) { - return trace.NewTask(ctx, taskType) -} diff --git a/tracing/tracing.go b/tracing/tracing.go deleted file mode 100644 index f24509d..0000000 --- a/tracing/tracing.go +++ /dev/null @@ -1,15 +0,0 @@ -package tracing - -import ( - "context" -) - -type Tracer interface { - NewTask(ctx context.Context, taskType string) (context.Context, Task) - WithRegion(ctx context.Context, regionName string, fn func()) - Logf(ctx context.Context, category, format string, args ...any) -} - -type Task interface { - End() -}