Skip to content

Commit d6b8f7b

Browse files
committed
Merge branch 'main' into ado-net-driver
2 parents eaebeab + 32cd9f0 commit d6b8f7b

File tree

19 files changed

+231
-8
lines changed

19 files changed

+231
-8
lines changed

conn_with_mockserver_test.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1501,6 +1501,7 @@ func TestGenericConnectionState_GoogleSQL(t *testing.T) {
15011501
t.Fatal(err)
15021502
}
15031503
}
1504+
15041505
func TestGenericConnectionState_PostgreSQL(t *testing.T) {
15051506
t.Parallel()
15061507

@@ -1751,6 +1752,40 @@ func TestGenericConnectionState_PostgreSQL(t *testing.T) {
17511752
}
17521753
}
17531754

1755+
func TestDmlBatchReturnsBatchUpdateCountsOutsideTransaction(t *testing.T) {
1756+
t.Parallel()
1757+
db, _, teardown := setupTestDBConnection(t)
1758+
defer teardown()
1759+
ctx := context.Background()
1760+
1761+
conn, err := db.Conn(ctx)
1762+
if err != nil {
1763+
t.Fatal(err)
1764+
}
1765+
defer silentClose(conn)
1766+
1767+
if _, err := conn.ExecContext(ctx, "start batch dml"); err != nil {
1768+
t.Fatal(err)
1769+
}
1770+
_, _ = conn.ExecContext(ctx, testutil.UpdateBarSetFoo)
1771+
_, _ = conn.ExecContext(ctx, testutil.UpdateSingersSetLastName)
1772+
var res SpannerResult
1773+
if err := conn.Raw(func(driverConn interface{}) error {
1774+
spannerConn, _ := driverConn.(SpannerConn)
1775+
res, err = spannerConn.RunDmlBatch(ctx)
1776+
return err
1777+
}); err != nil {
1778+
t.Fatal(err)
1779+
}
1780+
results, err := res.BatchRowsAffected()
1781+
if err != nil {
1782+
t.Fatal(err)
1783+
}
1784+
if g, w := results, []int64{testutil.UpdateBarSetFooRowCount, testutil.UpdateSingersSetLastNameRowCount}; !reflect.DeepEqual(g, w) {
1785+
t.Fatalf("batch affected mismatch\n Got: %v\nWant: %v", g, w)
1786+
}
1787+
}
1788+
17541789
func verifyConnectionPropertyValue[T comparable](t *testing.T, c *sql.Conn, name string, value T) {
17551790
ctx := context.Background()
17561791
row := c.QueryRowContext(ctx, getShowStatement(c)+name)

spannerlib/.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
spannerlib.h
22
spannerlib.so
3+
spannerlib.dylib
4+
spannerlib.dll
35
grpc_server
6+
grpc_server.exe
47
vendor/bundle
58
shared/
69
*.gem

spannerlib/grpc-server/server.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package main
33
import (
44
"context"
55
"log"
6+
"math"
67
"net"
78
"os"
89
"os/signal"
@@ -46,6 +47,8 @@ func main() {
4647
log.Fatalf("failed to listen: %v\n", err)
4748
}
4849
var opts []grpc.ServerOption
50+
// Set a max message size that is essentially no limit.
51+
opts = append(opts, grpc.MaxRecvMsgSize(math.MaxInt32))
4952
grpcServer := grpc.NewServer(opts...)
5053

5154
server := spannerLibServer{}

spannerlib/grpc-server/server_test.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"net"
77
"os"
88
"path/filepath"
9+
"reflect"
910
"runtime"
1011
"testing"
1112

@@ -310,6 +311,12 @@ func TestTransaction(t *testing.T) {
310311
if err != nil {
311312
t.Fatalf("failed to create connection: %v", err)
312313
}
314+
if _, err := client.Execute(ctx, &pb.ExecuteRequest{
315+
Connection: connection,
316+
ExecuteSqlRequest: &sppb.ExecuteSqlRequest{Sql: "set transaction_tag='test_tag'"},
317+
}); err != nil {
318+
t.Fatalf("failed to set transaction_tag: %v", err)
319+
}
313320
if _, err := client.BeginTransaction(ctx, &pb.BeginTransactionRequest{
314321
Connection: connection,
315322
TransactionOptions: &sppb.TransactionOptions{},
@@ -347,6 +354,16 @@ func TestTransaction(t *testing.T) {
347354
if _, err := client.ClosePool(ctx, pool); err != nil {
348355
t.Fatalf("failed to close pool: %v", err)
349356
}
357+
358+
requests := server.TestSpanner.DrainRequestsFromServer()
359+
executeRequests := testutil.RequestsOfType(requests, reflect.TypeOf(&sppb.ExecuteSqlRequest{}))
360+
if g, w := len(executeRequests), 1; g != w {
361+
t.Fatalf("num execute requests mismatch\n Got: %v\nWant: %v", g, w)
362+
}
363+
request := executeRequests[0].(*sppb.ExecuteSqlRequest)
364+
if g, w := request.RequestOptions.TransactionTag, "test_tag"; g != w {
365+
t.Fatalf("transaction tag mismatch\n Got: %v\nWant: %v", g, w)
366+
}
350367
}
351368

352369
func TestRollback(t *testing.T) {

spannerlib/wrappers/spannerlib-dotnet/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
obj
33
bin
44
*DotSettings.user
5+
binaries

spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/GrpcLibSpanner.cs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,25 @@ public async Task CloseConnectionAsync(Connection connection, CancellationToken
172172
}));
173173
return response.CommitTimestamp == null ? null : response;
174174
}
175-
175+
176+
public async Task<CommitResponse?> WriteMutationsAsync(Connection connection,
177+
BatchWriteRequest.Types.MutationGroup mutations, CancellationToken cancellationToken = default)
178+
{
179+
try
180+
{
181+
var response = await _client.WriteMutationsAsync(new WriteMutationsRequest
182+
{
183+
Connection = ToProto(connection),
184+
Mutations = mutations,
185+
}, cancellationToken: cancellationToken);
186+
return response.CommitTimestamp == null ? null : response;
187+
}
188+
catch (RpcException exception)
189+
{
190+
throw SpannerException.ToSpannerException(exception);
191+
}
192+
}
193+
176194
public Rows Execute(Connection connection, ExecuteSqlRequest statement)
177195
{
178196
if (_useStreamingRows)

spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-tests/spannerlib-dotnet-grpc-tests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
<ItemGroup>
1313
<PackageReference Include="coverlet.collector" Version="6.0.2"/>
14-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0"/>
14+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1"/>
1515
<PackageReference Include="NUnit" Version="4.2.2"/>
1616
<PackageReference Include="NUnit.Analyzers" Version="4.4.0"/>
1717
<PackageReference Include="NUnit3TestAdapter" Version="4.6.0"/>

spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-v1/spannerlib-dotnet-grpc-v1.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
</PropertyGroup>
99
<ItemGroup>
1010
<PackageReference Include="Google.Cloud.Spanner.V1" Version="5.2.0" />
11-
<PackageReference Include="Google.Protobuf" Version="3.31.1" />
11+
<PackageReference Include="Google.Protobuf" Version="3.33.0" />
1212
<PackageReference Include="Grpc.Net.Client" Version="2.71.0" />
1313
</ItemGroup>
1414

spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/MockSpannerServer.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -420,6 +420,8 @@ public override Task<CommitResponse> Commit(CommitRequest request, ServerCallCon
420420
_contexts.Enqueue(context);
421421
_headers.Enqueue(context.RequestHeaders);
422422
TryFindSession(request.SessionAsSessionName);
423+
_executionTimes.TryGetValue(nameof(Commit), out var executionTime);
424+
executionTime?.SimulateExecutionTime();
423425
if (request.TransactionCase == CommitRequest.TransactionOneofCase.TransactionId)
424426
{
425427
TryFindTransaction(request.TransactionId, true);

spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native-impl/SharedLibSpanner.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,12 @@ public void CloseConnection(Connection connection)
104104
}
105105
return CommitResponse.Parser.ParseFrom(handler.Value());
106106
}
107+
108+
public Task<CommitResponse?> WriteMutationsAsync(Connection connection,
109+
BatchWriteRequest.Types.MutationGroup mutations, CancellationToken cancellationToken = default)
110+
{
111+
return Task.Run(() => WriteMutations(connection, mutations), cancellationToken);
112+
}
107113

108114
public Rows Execute(Connection connection, ExecuteSqlRequest statement)
109115
{

0 commit comments

Comments
 (0)