@@ -40,11 +40,18 @@ func TestBeginTx(t *testing.T) {
4040
4141 requests := drainRequestsFromServer (server .TestSpanner )
4242 beginRequests := requestsOfType (requests , reflect .TypeOf (& spannerpb.BeginTransactionRequest {}))
43- if g , w := len (beginRequests ), 1 ; g != w {
43+ if g , w := len (beginRequests ), 0 ; g != w {
4444 t .Fatalf ("begin requests count mismatch\n Got: %v\n Want: %v" , g , w )
4545 }
46- request := beginRequests [0 ].(* spannerpb.BeginTransactionRequest )
47- if g , w := request .Options .GetIsolationLevel (), spannerpb .TransactionOptions_ISOLATION_LEVEL_UNSPECIFIED ; g != w {
46+ executeRequests := requestsOfType (requests , reflect .TypeOf (& spannerpb.ExecuteSqlRequest {}))
47+ if g , w := len (executeRequests ), 1 ; g != w {
48+ t .Fatalf ("execute requests count mismatch\n Got: %v\n Want: %v" , g , w )
49+ }
50+ request := executeRequests [0 ].(* spannerpb.ExecuteSqlRequest )
51+ if request .GetTransaction () == nil || request .GetTransaction ().GetBegin () == nil {
52+ t .Fatal ("missing begin transaction on ExecuteSqlRequest" )
53+ }
54+ if g , w := request .GetTransaction ().GetBegin ().GetIsolationLevel (), spannerpb .TransactionOptions_ISOLATION_LEVEL_UNSPECIFIED ; g != w {
4855 t .Fatalf ("begin isolation level mismatch\n Got: %v\n Want: %v" , g , w )
4956 }
5057}
@@ -68,6 +75,53 @@ func TestTwoTransactionsOnOneConn(t *testing.T) {
6875 }
6976}
7077
78+ func TestExplicitBeginTx (t * testing.T ) {
79+ t .Parallel ()
80+
81+ db , server , teardown := setupTestDBConnectionWithConnectorConfig (t , ConnectorConfig {
82+ Project : "p" ,
83+ Instance : "i" ,
84+ Database : "d" ,
85+
86+ BeginTransactionOption : spanner .ExplicitBeginTransaction ,
87+ })
88+ defer teardown ()
89+ ctx := context .Background ()
90+
91+ for _ , readOnly := range []bool {true , false } {
92+ tx , err := db .BeginTx (ctx , & sql.TxOptions {ReadOnly : readOnly })
93+ if err != nil {
94+ t .Fatal (err )
95+ }
96+ res , err := tx .QueryContext (ctx , testutil .SelectFooFromBar )
97+ if err != nil {
98+ t .Fatal (err )
99+ }
100+ for res .Next () {
101+ }
102+ if err := res .Err (); err != nil {
103+ t .Fatal (err )
104+ }
105+ if err := tx .Rollback (); err != nil {
106+ t .Fatal (err )
107+ }
108+
109+ requests := drainRequestsFromServer (server .TestSpanner )
110+ beginRequests := requestsOfType (requests , reflect .TypeOf (& spannerpb.BeginTransactionRequest {}))
111+ if g , w := len (beginRequests ), 1 ; g != w {
112+ t .Fatalf ("begin requests count mismatch\n Got: %v\n Want: %v" , g , w )
113+ }
114+ executeRequests := requestsOfType (requests , reflect .TypeOf (& spannerpb.ExecuteSqlRequest {}))
115+ if g , w := len (executeRequests ), 1 ; g != w {
116+ t .Fatalf ("execute requests count mismatch\n Got: %v\n Want: %v" , g , w )
117+ }
118+ request := executeRequests [0 ].(* spannerpb.ExecuteSqlRequest )
119+ if request .GetTransaction () == nil || request .GetTransaction ().GetId () == nil {
120+ t .Fatal ("missing transaction id on ExecuteSqlRequest" )
121+ }
122+ }
123+ }
124+
71125func TestBeginTxWithIsolationLevel (t * testing.T ) {
72126 t .Parallel ()
73127
@@ -96,12 +150,19 @@ func TestBeginTxWithIsolationLevel(t *testing.T) {
96150
97151 requests := drainRequestsFromServer (server .TestSpanner )
98152 beginRequests := requestsOfType (requests , reflect .TypeOf (& spannerpb.BeginTransactionRequest {}))
99- if g , w := len (beginRequests ), 1 ; g != w {
153+ if g , w := len (beginRequests ), 0 ; g != w {
100154 t .Fatalf ("begin requests count mismatch\n Got: %v\n Want: %v" , g , w )
101155 }
102- request := beginRequests [0 ].(* spannerpb.BeginTransactionRequest )
156+ executeRequests := requestsOfType (requests , reflect .TypeOf (& spannerpb.ExecuteSqlRequest {}))
157+ if g , w := len (executeRequests ), 1 ; g != w {
158+ t .Fatalf ("execute requests count mismatch\n Got: %v\n Want: %v" , g , w )
159+ }
160+ request := executeRequests [0 ].(* spannerpb.ExecuteSqlRequest )
161+ if request .GetTransaction () == nil || request .GetTransaction ().GetBegin () == nil {
162+ t .Fatalf ("execute request does not have a begin transaction" )
163+ }
103164 wantIsolationLevel , _ := toProtoIsolationLevel (originalLevel )
104- if g , w := request .Options .GetIsolationLevel (), wantIsolationLevel ; g != w {
165+ if g , w := request .GetTransaction (). GetBegin () .GetIsolationLevel (), wantIsolationLevel ; g != w {
105166 t .Fatalf ("begin isolation level mismatch\n Got: %v\n Want: %v" , g , w )
106167 }
107168 }
@@ -182,12 +243,19 @@ func TestDefaultIsolationLevel(t *testing.T) {
182243
183244 requests := drainRequestsFromServer (server .TestSpanner )
184245 beginRequests := requestsOfType (requests , reflect .TypeOf (& spannerpb.BeginTransactionRequest {}))
185- if g , w := len (beginRequests ), 1 ; g != w {
246+ if g , w := len (beginRequests ), 0 ; g != w {
186247 t .Fatalf ("begin requests count mismatch\n Got: %v\n Want: %v" , g , w )
187248 }
188- request := beginRequests [0 ].(* spannerpb.BeginTransactionRequest )
249+ executeRequests := requestsOfType (requests , reflect .TypeOf (& spannerpb.ExecuteSqlRequest {}))
250+ if g , w := len (executeRequests ), 1 ; g != w {
251+ t .Fatalf ("execute requests count mismatch\n Got: %v\n Want: %v" , g , w )
252+ }
253+ request := executeRequests [0 ].(* spannerpb.ExecuteSqlRequest )
254+ if request .GetTransaction () == nil || request .GetTransaction ().GetBegin () == nil {
255+ t .Fatalf ("ExecuteSqlRequest should have a Begin transaction" )
256+ }
189257 wantIsolationLevel , _ := toProtoIsolationLevel (originalLevel )
190- if g , w := request .Options .GetIsolationLevel (), wantIsolationLevel ; g != w {
258+ if g , w := request .GetTransaction (). GetBegin () .GetIsolationLevel (), wantIsolationLevel ; g != w {
191259 t .Fatalf ("begin isolation level mismatch\n Got: %v\n Want: %v" , g , w )
192260 }
193261 }
@@ -225,7 +293,7 @@ func TestSetIsolationLevel(t *testing.T) {
225293 if g , w := level , sql .LevelSnapshot ; g != w {
226294 t .Fatalf ("isolation level mismatch\n Got: %v\n Want: %v" , g , w )
227295 }
228- conn .Close ()
296+ _ = conn .Close ()
229297 }
230298}
231299
@@ -287,7 +355,7 @@ func TestDDLUsingQueryContextInReadOnlyTx(t *testing.T) {
287355 if err != nil {
288356 t .Fatal (err )
289357 }
290- defer tx .Rollback ()
358+ defer func () { _ = tx .Rollback () } ()
291359
292360 // DDL statements should not use the query context in a read-only transaction.
293361 _ , err = tx .QueryContext (ctx , "CREATE TABLE Foo (Bar STRING(100))" )
@@ -310,7 +378,7 @@ func TestDDLUsingQueryContextInReadWriteTransaction(t *testing.T) {
310378 if err != nil {
311379 t .Fatal (err )
312380 }
313- defer tx .Rollback ()
381+ defer func () { _ = tx .Rollback () } ()
314382
315383 // DDL statements should not use the query context in a read-write transaction.
316384 _ , err = tx .QueryContext (ctx , "CREATE TABLE Foo (Bar STRING(100))" )
0 commit comments