1919 attrDeprecated = trace .StringAttribute ("ocsql.warning" , "database driver uses deprecated features" )
2020)
2121
22- type ocDriver struct {
23- parent driver.Driver
24- options TraceOptions
25- }
26-
27- type ocConn struct {
28- parent driver.Conn
29- options TraceOptions
30- }
31-
32- type ocTx struct {
33- parent driver.Tx
34- ctx context.Context
35- options TraceOptions
36- }
37-
38- type ocStmt struct {
39- parent driver.Stmt
40- query string
41- options TraceOptions
42- }
43-
44- type ocResult struct {
45- parent driver.Result
46- ctx context.Context
47- options TraceOptions
48- }
49-
50- type ocRows struct {
51- parent driver.Rows
52- ctx context.Context
53- options TraceOptions
54- }
55-
5622// Register initializes and registers our ocsql wrapped database driver
5723// identified by its driverName and using provided TraceOptions. On success it
5824// returns the generated driverName to use when calling sql.Open.
@@ -104,6 +70,12 @@ func Wrap(d driver.Driver, options ...TraceOption) driver.Driver {
10470 return ocDriver {parent : d , options : o }
10571}
10672
73+ // ocDriver implements driver.Driver
74+ type ocDriver struct {
75+ parent driver.Driver
76+ options TraceOptions
77+ }
78+
10779func (d ocDriver ) Open (name string ) (driver.Conn , error ) {
10880 c , err := d .parent .Open (name )
10981 if err != nil {
@@ -112,6 +84,12 @@ func (d ocDriver) Open(name string) (driver.Conn, error) {
11284 return & ocConn {parent : c , options : d .options }, nil
11385}
11486
87+ // ocConn implements driver.Conn
88+ type ocConn struct {
89+ parent driver.Conn
90+ options TraceOptions
91+ }
92+
11593func (c ocConn ) Ping (ctx context.Context ) (err error ) {
11694 if c .options .Ping && (c .options .AllowRoot || trace .FromContext (ctx ) != nil ) {
11795 var span * trace.Span
@@ -395,52 +373,11 @@ func (c *ocConn) BeginTx(ctx context.Context, opts driver.TxOptions) (driver.Tx,
395373 return ocTx {parent : tx , ctx : ctx }, nil
396374}
397375
398- func (t ocTx ) Commit () (err error ) {
399- if t .options .Transaction {
400- defer func () {
401- if span := trace .FromContext (t .ctx ); span != nil {
402- span .SetStatus (trace.Status {Code : trace .StatusCodeOK })
403- setSpanStatus (span , err )
404- span .End ()
405- }
406- }()
407- }
408-
409- _ , span := trace .StartSpan (t .ctx , "sql:commit" )
410- defer func () {
411- setSpanStatus (span , err )
412- span .End ()
413- }()
414-
415- err = t .parent .Commit ()
416- return
417- }
418-
419- func (t ocTx ) Rollback () (err error ) {
420- if t .options .Transaction {
421- defer func () {
422- if span := trace .FromContext (t .ctx ); span != nil {
423- if err == nil {
424- span .SetStatus (trace.Status {
425- Code : trace .StatusCodeAborted ,
426- Message : "transaction rollback" ,
427- })
428- } else {
429- setSpanStatus (span , err )
430- }
431- span .End ()
432- }
433- }()
434- }
435-
436- _ , span := trace .StartSpan (t .ctx , "sql:rollback" )
437- defer func () {
438- setSpanStatus (span , err )
439- span .End ()
440- }()
441-
442- err = t .parent .Rollback ()
443- return
376+ // ocResult implements driver.Result
377+ type ocResult struct {
378+ parent driver.Result
379+ ctx context.Context
380+ options TraceOptions
444381}
445382
446383func (r ocResult ) LastInsertId () (id int64 , err error ) {
@@ -469,6 +406,13 @@ func (r ocResult) RowsAffected() (cnt int64, err error) {
469406 return
470407}
471408
409+ // ocStmt implements driver.Stmt
410+ type ocStmt struct {
411+ parent driver.Stmt
412+ query string
413+ options TraceOptions
414+ }
415+
472416func (s ocStmt ) Exec (args []driver.Value ) (res driver.Result , err error ) {
473417 if ! s .options .AllowRoot {
474418 return s .parent .Exec (args )
@@ -616,6 +560,13 @@ func (s ocStmt) QueryContext(ctx context.Context, args []driver.NamedValue) (row
616560 return
617561}
618562
563+ // ocRows implements driver.Rows.
564+ type ocRows struct {
565+ parent driver.Rows
566+ ctx context.Context
567+ options TraceOptions
568+ }
569+
619570func (r ocRows ) Columns () []string {
620571 return r .parent .Columns ()
621572}
@@ -651,6 +602,61 @@ func (r ocRows) Next(dest []driver.Value) (err error) {
651602 return
652603}
653604
605+ // ocTx implemens driver.Tx
606+ type ocTx struct {
607+ parent driver.Tx
608+ ctx context.Context
609+ options TraceOptions
610+ }
611+
612+ func (t ocTx ) Commit () (err error ) {
613+ if t .options .Transaction {
614+ defer func () {
615+ if span := trace .FromContext (t .ctx ); span != nil {
616+ span .SetStatus (trace.Status {Code : trace .StatusCodeOK })
617+ setSpanStatus (span , err )
618+ span .End ()
619+ }
620+ }()
621+ }
622+
623+ _ , span := trace .StartSpan (t .ctx , "sql:commit" )
624+ defer func () {
625+ setSpanStatus (span , err )
626+ span .End ()
627+ }()
628+
629+ err = t .parent .Commit ()
630+ return
631+ }
632+
633+ func (t ocTx ) Rollback () (err error ) {
634+ if t .options .Transaction {
635+ defer func () {
636+ if span := trace .FromContext (t .ctx ); span != nil {
637+ if err == nil {
638+ span .SetStatus (trace.Status {
639+ Code : trace .StatusCodeAborted ,
640+ Message : "transaction rollback" ,
641+ })
642+ } else {
643+ setSpanStatus (span , err )
644+ }
645+ span .End ()
646+ }
647+ }()
648+ }
649+
650+ _ , span := trace .StartSpan (t .ctx , "sql:rollback" )
651+ defer func () {
652+ setSpanStatus (span , err )
653+ span .End ()
654+ }()
655+
656+ err = t .parent .Rollback ()
657+ return
658+ }
659+
654660func wrapStmt (stmt driver.Stmt , query string , options TraceOptions ) driver.Stmt {
655661 s := ocStmt {parent : stmt , query : query , options : options }
656662 _ , hasExeCtx := stmt .(driver.StmtExecContext )
0 commit comments