github.com/ydb-platform/ydb-go-sdk/v3@v3.89.2/tests/integration/table_tx_lazy_test.go (about) 1 //go:build integration 2 // +build integration 3 4 package integration 5 6 import ( 7 "context" 8 "os" 9 "testing" 10 "time" 11 12 "github.com/stretchr/testify/require" 13 14 "github.com/ydb-platform/ydb-go-sdk/v3" 15 "github.com/ydb-platform/ydb-go-sdk/v3/table" 16 "github.com/ydb-platform/ydb-go-sdk/v3/table/options" 17 ) 18 19 func TestTableTxLazy(t *testing.T) { 20 ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) 21 defer cancel() 22 23 var db *ydb.Driver 24 25 t.Run("connect", func(t *testing.T) { 26 var err error 27 db, err = ydb.Open(ctx, os.Getenv("YDB_CONNECTION_STRING")) 28 require.NoError(t, err) 29 }) 30 31 require.NotNil(t, db) 32 33 t.Run("tx", func(t *testing.T) { 34 t.Run("lazy", func(t *testing.T) { 35 err := db.Table().Do(ctx, 36 func(ctx context.Context, s table.Session) (err error) { 37 // lazy open transaction on first execute query 38 tx, res, err := s.Execute(ctx, table.SerializableReadWriteTxControl(), "SELECT 1", nil) 39 if err != nil { 40 return err // for auto-retry with driver 41 } 42 defer res.Close() // cleanup resources 43 if err = res.Err(); err != nil { 44 return err 45 } 46 // close transaction on last execute query 47 res, err = tx.Execute(ctx, "SELECT 2", nil, options.WithCommit()) 48 if err != nil { 49 return err 50 } 51 defer res.Close() 52 return res.Err() 53 }, 54 table.WithIdempotent(), 55 ) 56 require.NoError(t, err) 57 }) 58 }) 59 60 t.Run("disconnect", func(t *testing.T) { 61 err := db.Close(ctx) 62 require.NoError(t, err) 63 }) 64 }