@@ -5,46 +5,28 @@ package integration
55
66import (
77 "context"
8+ "fmt"
89 "os"
910 "testing"
1011
1112 "github.com/stretchr/testify/require"
1213
13- "github.com/ydb-platform/ydb-go-sdk/v3"
1414 "github.com/ydb-platform/ydb-go-sdk/v3/internal/version"
15- "github.com/ydb-platform/ydb-go-sdk/v3/log"
1615 "github.com/ydb-platform/ydb-go-sdk/v3/query"
17- "github.com/ydb-platform/ydb-go-sdk/v3/trace"
1816)
1917
2018func TestQueryTxExecute (t * testing.T ) {
2119 if version .Lt (os .Getenv ("YDB_VERSION" ), "24.1" ) {
2220 t .Skip ("query service not allowed in YDB version '" + os .Getenv ("YDB_VERSION" ) + "'" )
2321 }
2422
25- ctx , cancel := context .WithCancel (context .Background ())
26- defer cancel ()
23+ scope := newScope (t )
2724
28- db , err := ydb .Open (ctx ,
29- os .Getenv ("YDB_CONNECTION_STRING" ),
30- ydb .WithAccessTokenCredentials (os .Getenv ("YDB_ACCESS_TOKEN_CREDENTIALS" )),
31- ydb .WithTraceQuery (
32- log .Query (
33- log .Default (os .Stdout ,
34- log .WithLogQuery (),
35- log .WithColoring (),
36- log .WithMinLevel (log .INFO ),
37- ),
38- trace .QueryEvents ,
39- ),
40- ),
41- )
42- require .NoError (t , err )
4325 var (
4426 columnNames []string
4527 columnTypes []string
4628 )
47- err = db . Query ().DoTx (ctx , func (ctx context.Context , tx query.TxActor ) (err error ) {
29+ err := scope . DriverWithLogs (). Query ().DoTx (scope . Ctx , func (ctx context.Context , tx query.TxActor ) (err error ) {
4830 res , err := tx .Execute (ctx , "SELECT 1 AS col1" )
4931 if err != nil {
5032 return err
@@ -72,3 +54,41 @@ func TestQueryTxExecute(t *testing.T) {
7254 require .Equal (t , []string {"col1" }, columnNames )
7355 require .Equal (t , []string {"Int32" }, columnTypes )
7456}
57+
58+ func TestQueryWithCommitTxFlag (t * testing.T ) {
59+ if version .Lt (os .Getenv ("YDB_VERSION" ), "24.1" ) {
60+ t .Skip ("query service not allowed in YDB version '" + os .Getenv ("YDB_VERSION" ) + "'" )
61+ }
62+
63+ scope := newScope (t )
64+ var count uint64
65+ err := scope .DriverWithLogs ().Query ().Do (scope .Ctx , func (ctx context.Context , s query.Session ) error {
66+ tableName := scope .TablePath ()
67+ tx , err := s .Begin (ctx , query .TxSettings (query .WithDefaultTxMode ()))
68+ if err != nil {
69+ return fmt .Errorf ("failed start transaction: %w" , err )
70+ }
71+ q := fmt .Sprintf ("UPSERT INTO `%v` (id, val) VALUES(1, \" 2\" )" , tableName )
72+ res , err := tx .Execute (ctx , q , query .WithCommit ())
73+ if err != nil {
74+ return fmt .Errorf ("failed execute insert: %w" , err )
75+ }
76+ if err = res .Close (ctx ); err != nil {
77+ return err
78+ }
79+
80+ // read row within other (implicit) transaction
81+ q2 := fmt .Sprintf ("SELECT COUNT(*) FROM `%v`" , tableName )
82+ row , err := s .ReadRow (ctx , q2 )
83+ if err != nil {
84+ return fmt .Errorf ("failed read row: %w" , err )
85+ }
86+
87+ if err = row .Scan (& count ); err != nil {
88+ return fmt .Errorf ("failed scan row: %w" , err )
89+ }
90+ return nil
91+ })
92+ require .NoError (t , err )
93+ require .Equal (t , uint64 (1 ), count )
94+ }
0 commit comments