github.com/ydb-platform/ydb-go-sdk/v3@v3.89.2/internal/xsql/tx_fake.go (about) 1 package xsql 2 3 import ( 4 "context" 5 "database/sql/driver" 6 7 "github.com/ydb-platform/ydb-go-sdk/v3/internal/stack" 8 "github.com/ydb-platform/ydb-go-sdk/v3/internal/tx" 9 "github.com/ydb-platform/ydb-go-sdk/v3/internal/xerrors" 10 "github.com/ydb-platform/ydb-go-sdk/v3/internal/xsql/badconn" 11 "github.com/ydb-platform/ydb-go-sdk/v3/trace" 12 ) 13 14 type txFake struct { 15 tx.Identifier 16 17 beginCtx context.Context //nolint:containedctx 18 conn *conn 19 ctx context.Context //nolint:containedctx 20 } 21 22 func (tx *txFake) PrepareContext(ctx context.Context, query string) (_ driver.Stmt, finalErr error) { 23 onDone := trace.DatabaseSQLOnTxPrepare(tx.conn.trace, &ctx, 24 stack.FunctionID("github.com/ydb-platform/ydb-go-sdk/v3/internal/xsql.(*txFake).PrepareContext"), 25 tx.beginCtx, tx, query, 26 ) 27 defer func() { 28 onDone(finalErr) 29 }() 30 if !tx.conn.isReady() { 31 return nil, badconn.Map(xerrors.WithStackTrace(errNotReadyConn)) 32 } 33 34 return &stmt{ 35 conn: tx.conn, 36 processor: tx, 37 ctx: ctx, 38 query: query, 39 trace: tx.conn.trace, 40 }, nil 41 } 42 43 var ( 44 _ driver.Tx = &txFake{} 45 _ driver.ExecerContext = &txFake{} 46 _ driver.QueryerContext = &txFake{} 47 _ tx.Identifier = &txFake{} 48 ) 49 50 func (c *conn) beginTxFake(ctx context.Context, txOptions driver.TxOptions) (currentTx, error) { 51 return &txFake{ 52 Identifier: tx.ID("FAKE"), 53 conn: c, 54 ctx: ctx, 55 }, nil 56 } 57 58 func (tx *txFake) Commit() (err error) { 59 var ( 60 ctx = tx.ctx 61 onDone = trace.DatabaseSQLOnTxCommit(tx.conn.trace, &ctx, 62 stack.FunctionID("github.com/ydb-platform/ydb-go-sdk/v3/internal/xsql.(*txFake).Commit"), 63 tx, 64 ) 65 ) 66 defer func() { 67 onDone(err) 68 }() 69 defer func() { 70 tx.conn.currentTx = nil 71 }() 72 if !tx.conn.isReady() { 73 return badconn.Map(xerrors.WithStackTrace(errNotReadyConn)) 74 } 75 76 return nil 77 } 78 79 func (tx *txFake) Rollback() (err error) { 80 var ( 81 ctx = tx.ctx 82 onDone = trace.DatabaseSQLOnTxRollback(tx.conn.trace, &ctx, 83 stack.FunctionID("github.com/ydb-platform/ydb-go-sdk/v3/internal/xsql.(*txFake).Rollback"), 84 tx, 85 ) 86 ) 87 defer func() { 88 onDone(err) 89 }() 90 defer func() { 91 tx.conn.currentTx = nil 92 }() 93 if !tx.conn.isReady() { 94 return badconn.Map(xerrors.WithStackTrace(errNotReadyConn)) 95 } 96 97 return err 98 } 99 100 func (tx *txFake) QueryContext(ctx context.Context, query string, args []driver.NamedValue) ( 101 rows driver.Rows, err error, 102 ) { 103 onDone := trace.DatabaseSQLOnTxQuery( 104 tx.conn.trace, &ctx, 105 stack.FunctionID("github.com/ydb-platform/ydb-go-sdk/v3/internal/xsql.(*txFake).QueryContext"), 106 tx.ctx, tx, query, 107 ) 108 defer func() { 109 onDone(err) 110 }() 111 rows, err = tx.conn.QueryContext(ctx, query, args) 112 if err != nil { 113 return nil, xerrors.WithStackTrace(err) 114 } 115 116 return rows, nil 117 } 118 119 func (tx *txFake) ExecContext(ctx context.Context, query string, args []driver.NamedValue) ( 120 result driver.Result, err error, 121 ) { 122 onDone := trace.DatabaseSQLOnTxExec( 123 tx.conn.trace, &ctx, 124 stack.FunctionID("github.com/ydb-platform/ydb-go-sdk/v3/internal/xsql.(*txFake).ExecContext"), 125 tx.ctx, tx, query, 126 ) 127 defer func() { 128 onDone(err) 129 }() 130 result, err = tx.conn.ExecContext(ctx, query, args) 131 if err != nil { 132 return nil, xerrors.WithStackTrace(err) 133 } 134 135 return result, nil 136 }