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  }