From 9229a2d5397d21e9d31d1bc6c4f3798b2335befb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Knut=20Olav=20L=C3=B8ite?= Date: Fri, 19 Sep 2025 14:48:20 +0200 Subject: [PATCH 1/9] chore: add grpc-server API for SpannerLib Adds a gRPC server that exposes the API of SpannerLib. This allows clients to connect to run SpannerLib as a child process and connect to it using gRPC. --- .github/workflows/spanner-lib-tests.yml | 8 + .gitmodules | 3 + spannerlib/api/rows.go | 3 + spannerlib/go.mod | 4 +- .../grpc-server/build-java-darwin-aarch64.sh | 3 + spannerlib/grpc-server/build-protos.sh | 18 + .../google/spannerlib/v1/spannerlib.pb.go | 1031 ++++++++++ .../google/spannerlib/v1/spannerlib.proto | 161 ++ .../spannerlib/v1/spannerlib_grpc.pb.go | 692 +++++++ spannerlib/grpc-server/googleapis | 1 + spannerlib/grpc-server/server.go | 230 +++ spannerlib/grpc-server/server_test.go | 503 +++++ spannerlib/shared/shared_lib.go | 2 + spannerlib/wrappers/spannerlib-java/pom.xml | 43 + .../spannerlib/AbstractLibraryObject.java | 2 - .../google/cloud/spannerlib/Connection.java | 93 +- .../google/cloud/spannerlib/GrpcServer.java | 63 + .../spannerlib/GrpcSpannerLibraryImpl.java | 281 +++ .../spannerlib/NativeSpannerLibraryImpl.java | 240 +++ .../com/google/cloud/spannerlib/Pool.java | 23 +- .../com/google/cloud/spannerlib/Rows.java | 62 +- .../cloud/spannerlib/SpannerLibrary.java | 63 + .../cloud/spannerlib/StreamingRows.java | 106 ++ .../v1/BeginTransactionRequest.java | 859 +++++++++ .../v1/BeginTransactionRequestOrBuilder.java | 63 + .../cloud/spannerlib/v1/Connection.java | 656 +++++++ .../spannerlib/v1/ConnectionOrBuilder.java | 37 + .../v1/ConnectionStreamRequest.java | 677 +++++++ .../v1/ConnectionStreamRequestOrBuilder.java | 32 + .../v1/ConnectionStreamResponse.java | 676 +++++++ .../v1/ConnectionStreamResponseOrBuilder.java | 32 + .../v1/CreateConnectionRequest.java | 585 ++++++ .../v1/CreateConnectionRequestOrBuilder.java | 30 + .../spannerlib/v1/CreatePoolRequest.java | 523 +++++ .../v1/CreatePoolRequestOrBuilder.java | 27 + .../spannerlib/v1/ExecuteBatchRequest.java | 862 +++++++++ .../v1/ExecuteBatchRequestOrBuilder.java | 63 + .../cloud/spannerlib/v1/ExecuteRequest.java | 856 +++++++++ .../v1/ExecuteRequestOrBuilder.java | 63 + .../cloud/spannerlib/v1/MetadataRequest.java | 583 ++++++ .../v1/MetadataRequestOrBuilder.java | 30 + .../cloud/spannerlib/v1/NextRequest.java | 729 +++++++ .../spannerlib/v1/NextRequestOrBuilder.java | 44 + .../com/google/cloud/spannerlib/v1/Pool.java | 444 +++++ .../cloud/spannerlib/v1/PoolOrBuilder.java | 20 + .../spannerlib/v1/ResultSetStatsRequest.java | 584 ++++++ .../v1/ResultSetStatsRequestOrBuilder.java | 30 + .../google/cloud/spannerlib/v1/RowData.java | 1352 +++++++++++++ .../cloud/spannerlib/v1/RowDataOrBuilder.java | 94 + .../com/google/cloud/spannerlib/v1/Rows.java | 689 +++++++ .../cloud/spannerlib/v1/RowsOrBuilder.java | 45 + .../cloud/spannerlib/v1/SpannerLibGrpc.java | 1695 +++++++++++++++++ .../cloud/spannerlib/v1/SpannerLibProto.java | 329 ++++ .../spannerlib/v1/WriteMutationsRequest.java | 855 +++++++++ .../v1/WriteMutationsRequestOrBuilder.java | 63 + .../sun/jna/SpannerLibPlatformDetector.java | 28 + .../spannerlib/AbstractSpannerLibTest.java | 98 + .../google/cloud/spannerlib/BatchTest.java | 7 +- .../cloud/spannerlib/ConnectionTest.java | 13 +- .../com/google/cloud/spannerlib/PoolTest.java | 7 +- .../com/google/cloud/spannerlib/RowsTest.java | 72 +- .../cloud/spannerlib/TransactionTest.java | 13 +- 62 files changed, 17330 insertions(+), 170 deletions(-) create mode 100644 .gitmodules create mode 100755 spannerlib/grpc-server/build-java-darwin-aarch64.sh create mode 100755 spannerlib/grpc-server/build-protos.sh create mode 100644 spannerlib/grpc-server/google/spannerlib/v1/spannerlib.pb.go create mode 100644 spannerlib/grpc-server/google/spannerlib/v1/spannerlib.proto create mode 100644 spannerlib/grpc-server/google/spannerlib/v1/spannerlib_grpc.pb.go create mode 160000 spannerlib/grpc-server/googleapis create mode 100644 spannerlib/grpc-server/server.go create mode 100644 spannerlib/grpc-server/server_test.go create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/GrpcServer.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/GrpcSpannerLibraryImpl.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/NativeSpannerLibraryImpl.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/SpannerLibrary.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/StreamingRows.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/BeginTransactionRequest.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/BeginTransactionRequestOrBuilder.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/Connection.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ConnectionOrBuilder.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ConnectionStreamRequest.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ConnectionStreamRequestOrBuilder.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ConnectionStreamResponse.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ConnectionStreamResponseOrBuilder.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/CreateConnectionRequest.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/CreateConnectionRequestOrBuilder.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/CreatePoolRequest.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/CreatePoolRequestOrBuilder.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ExecuteBatchRequest.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ExecuteBatchRequestOrBuilder.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ExecuteRequest.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ExecuteRequestOrBuilder.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/MetadataRequest.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/MetadataRequestOrBuilder.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/NextRequest.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/NextRequestOrBuilder.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/Pool.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/PoolOrBuilder.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ResultSetStatsRequest.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ResultSetStatsRequestOrBuilder.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/RowData.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/RowDataOrBuilder.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/Rows.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/RowsOrBuilder.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/SpannerLibGrpc.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/SpannerLibProto.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/WriteMutationsRequest.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/WriteMutationsRequestOrBuilder.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/sun/jna/SpannerLibPlatformDetector.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/AbstractSpannerLibTest.java diff --git a/.github/workflows/spanner-lib-tests.yml b/.github/workflows/spanner-lib-tests.yml index bd6e42b8..b6df5ccd 100644 --- a/.github/workflows/spanner-lib-tests.yml +++ b/.github/workflows/spanner-lib-tests.yml @@ -48,6 +48,11 @@ jobs: - name: Build shared library working-directory: spannerlib/shared run: go build -o spannerlib.so -buildmode=c-shared shared_lib.go + - name: Build gRPC server + working-directory: spannerlib/grpc-server + run: | + go build -o grpc_server server.go + chmod +x grpc_server - name: Copy to Java wrapper working-directory: spannerlib run: | @@ -55,12 +60,15 @@ jobs: if [ "$RUNNER_OS" == "Windows" ]; then mkdir -p wrappers/spannerlib-java/src/main/resources/win32-x86-64 cp shared/spannerlib.so wrappers/spannerlib-java/src/main/resources/win32-x86-64/spanner.dll + cp grpc-server/grpc_server wrappers/spannerlib-java/src/main/resources/win32-x86-64/grpc_server elif [ "$RUNNER_OS" == "macOS" ]; then mkdir -p wrappers/spannerlib-java/src/main/resources/darwin-aarch64 cp shared/spannerlib.so wrappers/spannerlib-java/src/main/resources/darwin-aarch64/libspanner.dylib + cp grpc-server/grpc_server wrappers/spannerlib-java/src/main/resources/darwin-aarch64/grpc_server else mkdir -p wrappers/spannerlib-java/src/main/resources/linux-x86-64 cp shared/spannerlib.so wrappers/spannerlib-java/src/main/resources/linux-x86-64/libspanner.so + cp grpc-server/grpc_server wrappers/spannerlib-java/src/main/resources/linux-x86-64/grpc_server fi shell: bash - name: ls spannerlib.so diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..4b3a259c --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "spannerlib/grpc-server/googleapis"] + path = spannerlib/grpc-server/googleapis + url = git@github.com:googleapis/googleapis.git diff --git a/spannerlib/api/rows.go b/spannerlib/api/rows.go index 52bedbe1..34a635ee 100644 --- a/spannerlib/api/rows.go +++ b/spannerlib/api/rows.go @@ -165,6 +165,9 @@ func (rows *rows) Next(ctx context.Context) (*structpb.ListValue, error) { return nil, spanner.ToSpannerError(status.Error(codes.FailedPrecondition, "cannot read more data after returning stats")) } ok := rows.backend.Next() + if !ok && rows.backend.Err() != nil { + return nil, rows.backend.Err() + } if !ok { rows.done = true // No more rows. Read stats and return nil. diff --git a/spannerlib/go.mod b/spannerlib/go.mod index 6d6912b0..e42baa6b 100644 --- a/spannerlib/go.mod +++ b/spannerlib/go.mod @@ -7,9 +7,11 @@ toolchain go1.25.1 replace github.com/googleapis/go-sql-spanner => .. require ( + cloud.google.com/go/longrunning v0.6.7 cloud.google.com/go/spanner v1.85.1 github.com/google/go-cmp v0.7.0 github.com/googleapis/go-sql-spanner v1.18.0 + google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c google.golang.org/grpc v1.75.1 google.golang.org/protobuf v1.36.9 ) @@ -21,7 +23,6 @@ require ( cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect cloud.google.com/go/compute/metadata v0.8.0 // indirect cloud.google.com/go/iam v1.5.2 // indirect - cloud.google.com/go/longrunning v0.6.7 // indirect cloud.google.com/go/monitoring v1.24.2 // indirect github.com/GoogleCloudPlatform/grpc-gcp-go/grpcgcp v1.5.3 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0 // indirect @@ -62,6 +63,5 @@ require ( golang.org/x/time v0.12.0 // indirect google.golang.org/api v0.249.0 // indirect google.golang.org/genproto v0.0.0-20250804133106-a7a43d27e69b // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20250908214217-97024824d090 // indirect ) diff --git a/spannerlib/grpc-server/build-java-darwin-aarch64.sh b/spannerlib/grpc-server/build-java-darwin-aarch64.sh new file mode 100755 index 00000000..9b5e9d77 --- /dev/null +++ b/spannerlib/grpc-server/build-java-darwin-aarch64.sh @@ -0,0 +1,3 @@ +go build -o grpc_server server.go +chmod +x grpc_server +cp grpc_server ../wrappers/spannerlib-java/src/main/resources/darwin-aarch64/grpc_server diff --git a/spannerlib/grpc-server/build-protos.sh b/spannerlib/grpc-server/build-protos.sh new file mode 100755 index 00000000..52809e5d --- /dev/null +++ b/spannerlib/grpc-server/build-protos.sh @@ -0,0 +1,18 @@ +PATH="${PATH}:${HOME}/go/bin" +rm -rf googleapis/google/spannerlib +cp -r google/spannerlib googleapis/google +cd googleapis || exit 1 +protoc \ + --go_out=../ \ + --go_opt=paths=source_relative \ + --go-grpc_out=../ \ + --go-grpc_opt=paths=source_relative \ + google/spannerlib/v1/spannerlib.proto +protoc \ + --java_out=../../wrappers/spannerlib-java/src/main/java/ \ + --plugin=protoc-gen-java-grpc=/Users/loite/protoc-gen-grpc-java-1.75.0-osx-aarch_64.exe \ + --java-grpc_out=../../wrappers/spannerlib-java/src/main/java/ \ + --java-grpc_opt=paths=source_relative \ + google/spannerlib/v1/spannerlib.proto +cd .. || exit 1 +rm -rf googleapis/google/spannerlib diff --git a/spannerlib/grpc-server/google/spannerlib/v1/spannerlib.pb.go b/spannerlib/grpc-server/google/spannerlib/v1/spannerlib.pb.go new file mode 100644 index 00000000..7c738df4 --- /dev/null +++ b/spannerlib/grpc-server/google/spannerlib/v1/spannerlib.pb.go @@ -0,0 +1,1031 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.6 +// protoc v6.32.1 +// source: google/spannerlib/v1/spannerlib.proto + +package spannerlibpb + +import ( + spannerpb "cloud.google.com/go/spanner/apiv1/spannerpb" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + emptypb "google.golang.org/protobuf/types/known/emptypb" + structpb "google.golang.org/protobuf/types/known/structpb" + reflect "reflect" + sync "sync" + unsafe "unsafe" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type CreatePoolRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + ConnectionString string `protobuf:"bytes,1,opt,name=connection_string,json=connectionString,proto3" json:"connection_string,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CreatePoolRequest) Reset() { + *x = CreatePoolRequest{} + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CreatePoolRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreatePoolRequest) ProtoMessage() {} + +func (x *CreatePoolRequest) ProtoReflect() protoreflect.Message { + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreatePoolRequest.ProtoReflect.Descriptor instead. +func (*CreatePoolRequest) Descriptor() ([]byte, []int) { + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{0} +} + +func (x *CreatePoolRequest) GetConnectionString() string { + if x != nil { + return x.ConnectionString + } + return "" +} + +type CreateConnectionRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Pool *Pool `protobuf:"bytes,1,opt,name=pool,proto3" json:"pool,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CreateConnectionRequest) Reset() { + *x = CreateConnectionRequest{} + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CreateConnectionRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateConnectionRequest) ProtoMessage() {} + +func (x *CreateConnectionRequest) ProtoReflect() protoreflect.Message { + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateConnectionRequest.ProtoReflect.Descriptor instead. +func (*CreateConnectionRequest) Descriptor() ([]byte, []int) { + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{1} +} + +func (x *CreateConnectionRequest) GetPool() *Pool { + if x != nil { + return x.Pool + } + return nil +} + +type ExecuteRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Connection *Connection `protobuf:"bytes,1,opt,name=connection,proto3" json:"connection,omitempty"` + ExecuteSqlRequest *spannerpb.ExecuteSqlRequest `protobuf:"bytes,2,opt,name=execute_sql_request,json=executeSqlRequest,proto3" json:"execute_sql_request,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ExecuteRequest) Reset() { + *x = ExecuteRequest{} + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ExecuteRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExecuteRequest) ProtoMessage() {} + +func (x *ExecuteRequest) ProtoReflect() protoreflect.Message { + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExecuteRequest.ProtoReflect.Descriptor instead. +func (*ExecuteRequest) Descriptor() ([]byte, []int) { + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{2} +} + +func (x *ExecuteRequest) GetConnection() *Connection { + if x != nil { + return x.Connection + } + return nil +} + +func (x *ExecuteRequest) GetExecuteSqlRequest() *spannerpb.ExecuteSqlRequest { + if x != nil { + return x.ExecuteSqlRequest + } + return nil +} + +type ExecuteBatchRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Connection *Connection `protobuf:"bytes,1,opt,name=connection,proto3" json:"connection,omitempty"` + ExecuteBatchDmlRequest *spannerpb.ExecuteBatchDmlRequest `protobuf:"bytes,2,opt,name=execute_batch_dml_request,json=executeBatchDmlRequest,proto3" json:"execute_batch_dml_request,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ExecuteBatchRequest) Reset() { + *x = ExecuteBatchRequest{} + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ExecuteBatchRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExecuteBatchRequest) ProtoMessage() {} + +func (x *ExecuteBatchRequest) ProtoReflect() protoreflect.Message { + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExecuteBatchRequest.ProtoReflect.Descriptor instead. +func (*ExecuteBatchRequest) Descriptor() ([]byte, []int) { + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{3} +} + +func (x *ExecuteBatchRequest) GetConnection() *Connection { + if x != nil { + return x.Connection + } + return nil +} + +func (x *ExecuteBatchRequest) GetExecuteBatchDmlRequest() *spannerpb.ExecuteBatchDmlRequest { + if x != nil { + return x.ExecuteBatchDmlRequest + } + return nil +} + +type BeginTransactionRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Connection *Connection `protobuf:"bytes,1,opt,name=connection,proto3" json:"connection,omitempty"` + TransactionOptions *spannerpb.TransactionOptions `protobuf:"bytes,2,opt,name=transaction_options,json=transactionOptions,proto3" json:"transaction_options,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BeginTransactionRequest) Reset() { + *x = BeginTransactionRequest{} + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BeginTransactionRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BeginTransactionRequest) ProtoMessage() {} + +func (x *BeginTransactionRequest) ProtoReflect() protoreflect.Message { + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BeginTransactionRequest.ProtoReflect.Descriptor instead. +func (*BeginTransactionRequest) Descriptor() ([]byte, []int) { + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{4} +} + +func (x *BeginTransactionRequest) GetConnection() *Connection { + if x != nil { + return x.Connection + } + return nil +} + +func (x *BeginTransactionRequest) GetTransactionOptions() *spannerpb.TransactionOptions { + if x != nil { + return x.TransactionOptions + } + return nil +} + +type WriteMutationsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Connection *Connection `protobuf:"bytes,1,opt,name=connection,proto3" json:"connection,omitempty"` + Mutations *spannerpb.BatchWriteRequest_MutationGroup `protobuf:"bytes,2,opt,name=mutations,proto3" json:"mutations,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *WriteMutationsRequest) Reset() { + *x = WriteMutationsRequest{} + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *WriteMutationsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WriteMutationsRequest) ProtoMessage() {} + +func (x *WriteMutationsRequest) ProtoReflect() protoreflect.Message { + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WriteMutationsRequest.ProtoReflect.Descriptor instead. +func (*WriteMutationsRequest) Descriptor() ([]byte, []int) { + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{5} +} + +func (x *WriteMutationsRequest) GetConnection() *Connection { + if x != nil { + return x.Connection + } + return nil +} + +func (x *WriteMutationsRequest) GetMutations() *spannerpb.BatchWriteRequest_MutationGroup { + if x != nil { + return x.Mutations + } + return nil +} + +type Pool struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Pool) Reset() { + *x = Pool{} + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Pool) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Pool) ProtoMessage() {} + +func (x *Pool) ProtoReflect() protoreflect.Message { + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Pool.ProtoReflect.Descriptor instead. +func (*Pool) Descriptor() ([]byte, []int) { + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{6} +} + +func (x *Pool) GetId() int64 { + if x != nil { + return x.Id + } + return 0 +} + +type Connection struct { + state protoimpl.MessageState `protogen:"open.v1"` + Pool *Pool `protobuf:"bytes,1,opt,name=pool,proto3" json:"pool,omitempty"` + Id int64 `protobuf:"varint,2,opt,name=id,proto3" json:"id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Connection) Reset() { + *x = Connection{} + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Connection) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Connection) ProtoMessage() {} + +func (x *Connection) ProtoReflect() protoreflect.Message { + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Connection.ProtoReflect.Descriptor instead. +func (*Connection) Descriptor() ([]byte, []int) { + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{7} +} + +func (x *Connection) GetPool() *Pool { + if x != nil { + return x.Pool + } + return nil +} + +func (x *Connection) GetId() int64 { + if x != nil { + return x.Id + } + return 0 +} + +type Rows struct { + state protoimpl.MessageState `protogen:"open.v1"` + Connection *Connection `protobuf:"bytes,1,opt,name=connection,proto3" json:"connection,omitempty"` + Id int64 `protobuf:"varint,2,opt,name=id,proto3" json:"id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Rows) Reset() { + *x = Rows{} + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Rows) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Rows) ProtoMessage() {} + +func (x *Rows) ProtoReflect() protoreflect.Message { + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Rows.ProtoReflect.Descriptor instead. +func (*Rows) Descriptor() ([]byte, []int) { + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{8} +} + +func (x *Rows) GetConnection() *Connection { + if x != nil { + return x.Connection + } + return nil +} + +func (x *Rows) GetId() int64 { + if x != nil { + return x.Id + } + return 0 +} + +type NextRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Rows *Rows `protobuf:"bytes,1,opt,name=rows,proto3" json:"rows,omitempty"` + NumRows int64 `protobuf:"varint,2,opt,name=num_rows,json=numRows,proto3" json:"num_rows,omitempty"` + Encoding int64 `protobuf:"varint,3,opt,name=encoding,proto3" json:"encoding,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *NextRequest) Reset() { + *x = NextRequest{} + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *NextRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NextRequest) ProtoMessage() {} + +func (x *NextRequest) ProtoReflect() protoreflect.Message { + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NextRequest.ProtoReflect.Descriptor instead. +func (*NextRequest) Descriptor() ([]byte, []int) { + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{9} +} + +func (x *NextRequest) GetRows() *Rows { + if x != nil { + return x.Rows + } + return nil +} + +func (x *NextRequest) GetNumRows() int64 { + if x != nil { + return x.NumRows + } + return 0 +} + +func (x *NextRequest) GetEncoding() int64 { + if x != nil { + return x.Encoding + } + return 0 +} + +type RowData struct { + state protoimpl.MessageState `protogen:"open.v1"` + Rows *Rows `protobuf:"bytes,1,opt,name=rows,proto3" json:"rows,omitempty"` + Metadata *spannerpb.ResultSetMetadata `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` + Data []*structpb.ListValue `protobuf:"bytes,3,rep,name=data,proto3" json:"data,omitempty"` + Stats *spannerpb.ResultSetStats `protobuf:"bytes,4,opt,name=stats,proto3" json:"stats,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RowData) Reset() { + *x = RowData{} + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RowData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RowData) ProtoMessage() {} + +func (x *RowData) ProtoReflect() protoreflect.Message { + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RowData.ProtoReflect.Descriptor instead. +func (*RowData) Descriptor() ([]byte, []int) { + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{10} +} + +func (x *RowData) GetRows() *Rows { + if x != nil { + return x.Rows + } + return nil +} + +func (x *RowData) GetMetadata() *spannerpb.ResultSetMetadata { + if x != nil { + return x.Metadata + } + return nil +} + +func (x *RowData) GetData() []*structpb.ListValue { + if x != nil { + return x.Data + } + return nil +} + +func (x *RowData) GetStats() *spannerpb.ResultSetStats { + if x != nil { + return x.Stats + } + return nil +} + +type MetadataRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Rows *Rows `protobuf:"bytes,1,opt,name=rows,proto3" json:"rows,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MetadataRequest) Reset() { + *x = MetadataRequest{} + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MetadataRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MetadataRequest) ProtoMessage() {} + +func (x *MetadataRequest) ProtoReflect() protoreflect.Message { + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MetadataRequest.ProtoReflect.Descriptor instead. +func (*MetadataRequest) Descriptor() ([]byte, []int) { + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{11} +} + +func (x *MetadataRequest) GetRows() *Rows { + if x != nil { + return x.Rows + } + return nil +} + +type ResultSetStatsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Rows *Rows `protobuf:"bytes,1,opt,name=rows,proto3" json:"rows,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ResultSetStatsRequest) Reset() { + *x = ResultSetStatsRequest{} + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ResultSetStatsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResultSetStatsRequest) ProtoMessage() {} + +func (x *ResultSetStatsRequest) ProtoReflect() protoreflect.Message { + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[12] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResultSetStatsRequest.ProtoReflect.Descriptor instead. +func (*ResultSetStatsRequest) Descriptor() ([]byte, []int) { + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{12} +} + +func (x *ResultSetStatsRequest) GetRows() *Rows { + if x != nil { + return x.Rows + } + return nil +} + +type ConnectionStreamRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Request: + // + // *ConnectionStreamRequest_ExecuteRequest + Request isConnectionStreamRequest_Request `protobuf_oneof:"request"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ConnectionStreamRequest) Reset() { + *x = ConnectionStreamRequest{} + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ConnectionStreamRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ConnectionStreamRequest) ProtoMessage() {} + +func (x *ConnectionStreamRequest) ProtoReflect() protoreflect.Message { + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[13] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ConnectionStreamRequest.ProtoReflect.Descriptor instead. +func (*ConnectionStreamRequest) Descriptor() ([]byte, []int) { + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{13} +} + +func (x *ConnectionStreamRequest) GetRequest() isConnectionStreamRequest_Request { + if x != nil { + return x.Request + } + return nil +} + +func (x *ConnectionStreamRequest) GetExecuteRequest() *ExecuteRequest { + if x != nil { + if x, ok := x.Request.(*ConnectionStreamRequest_ExecuteRequest); ok { + return x.ExecuteRequest + } + } + return nil +} + +type isConnectionStreamRequest_Request interface { + isConnectionStreamRequest_Request() +} + +type ConnectionStreamRequest_ExecuteRequest struct { + ExecuteRequest *ExecuteRequest `protobuf:"bytes,1,opt,name=execute_request,json=executeRequest,proto3,oneof"` +} + +func (*ConnectionStreamRequest_ExecuteRequest) isConnectionStreamRequest_Request() {} + +type ConnectionStreamResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Response: + // + // *ConnectionStreamResponse_Row + Response isConnectionStreamResponse_Response `protobuf_oneof:"response"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ConnectionStreamResponse) Reset() { + *x = ConnectionStreamResponse{} + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ConnectionStreamResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ConnectionStreamResponse) ProtoMessage() {} + +func (x *ConnectionStreamResponse) ProtoReflect() protoreflect.Message { + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[14] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ConnectionStreamResponse.ProtoReflect.Descriptor instead. +func (*ConnectionStreamResponse) Descriptor() ([]byte, []int) { + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{14} +} + +func (x *ConnectionStreamResponse) GetResponse() isConnectionStreamResponse_Response { + if x != nil { + return x.Response + } + return nil +} + +func (x *ConnectionStreamResponse) GetRow() *spannerpb.PartialResultSet { + if x != nil { + if x, ok := x.Response.(*ConnectionStreamResponse_Row); ok { + return x.Row + } + } + return nil +} + +type isConnectionStreamResponse_Response interface { + isConnectionStreamResponse_Response() +} + +type ConnectionStreamResponse_Row struct { + Row *spannerpb.PartialResultSet `protobuf:"bytes,1,opt,name=row,proto3,oneof"` +} + +func (*ConnectionStreamResponse_Row) isConnectionStreamResponse_Response() {} + +var File_google_spannerlib_v1_spannerlib_proto protoreflect.FileDescriptor + +const file_google_spannerlib_v1_spannerlib_proto_rawDesc = "" + + "\n" + + "%google/spannerlib/v1/spannerlib.proto\x12\x14google.spannerlib.v1\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\"google/spanner/v1/result_set.proto\x1a\x1fgoogle/spanner/v1/spanner.proto\x1a#google/spanner/v1/transaction.proto\"E\n" + + "\x11CreatePoolRequest\x120\n" + + "\x11connection_string\x18\x01 \x01(\tB\x03\xe0A\x02R\x10connectionString\"N\n" + + "\x17CreateConnectionRequest\x123\n" + + "\x04pool\x18\x01 \x01(\v2\x1a.google.spannerlib.v1.PoolB\x03\xe0A\x02R\x04pool\"\xb2\x01\n" + + "\x0eExecuteRequest\x12E\n" + + "\n" + + "connection\x18\x01 \x01(\v2 .google.spannerlib.v1.ConnectionB\x03\xe0A\x02R\n" + + "connection\x12Y\n" + + "\x13execute_sql_request\x18\x02 \x01(\v2$.google.spanner.v1.ExecuteSqlRequestB\x03\xe0A\x02R\x11executeSqlRequest\"\xc7\x01\n" + + "\x13ExecuteBatchRequest\x12E\n" + + "\n" + + "connection\x18\x01 \x01(\v2 .google.spannerlib.v1.ConnectionB\x03\xe0A\x02R\n" + + "connection\x12i\n" + + "\x19execute_batch_dml_request\x18\x02 \x01(\v2).google.spanner.v1.ExecuteBatchDmlRequestB\x03\xe0A\x02R\x16executeBatchDmlRequest\"\xbd\x01\n" + + "\x17BeginTransactionRequest\x12E\n" + + "\n" + + "connection\x18\x01 \x01(\v2 .google.spannerlib.v1.ConnectionB\x03\xe0A\x02R\n" + + "connection\x12[\n" + + "\x13transaction_options\x18\x02 \x01(\v2%.google.spanner.v1.TransactionOptionsB\x03\xe0A\x02R\x12transactionOptions\"\xb5\x01\n" + + "\x15WriteMutationsRequest\x12E\n" + + "\n" + + "connection\x18\x01 \x01(\v2 .google.spannerlib.v1.ConnectionB\x03\xe0A\x02R\n" + + "connection\x12U\n" + + "\tmutations\x18\x02 \x01(\v22.google.spanner.v1.BatchWriteRequest.MutationGroupB\x03\xe0A\x02R\tmutations\"\x1b\n" + + "\x04Pool\x12\x13\n" + + "\x02id\x18\x01 \x01(\x03B\x03\xe0A\x02R\x02id\"V\n" + + "\n" + + "Connection\x123\n" + + "\x04pool\x18\x01 \x01(\v2\x1a.google.spannerlib.v1.PoolB\x03\xe0A\x02R\x04pool\x12\x13\n" + + "\x02id\x18\x02 \x01(\x03B\x03\xe0A\x02R\x02id\"b\n" + + "\x04Rows\x12E\n" + + "\n" + + "connection\x18\x01 \x01(\v2 .google.spannerlib.v1.ConnectionB\x03\xe0A\x02R\n" + + "connection\x12\x13\n" + + "\x02id\x18\x02 \x01(\x03B\x03\xe0A\x02R\x02id\"\x83\x01\n" + + "\vNextRequest\x123\n" + + "\x04rows\x18\x01 \x01(\v2\x1a.google.spannerlib.v1.RowsB\x03\xe0A\x02R\x04rows\x12\x1e\n" + + "\bnum_rows\x18\x02 \x01(\x03B\x03\xe0A\x02R\anumRows\x12\x1f\n" + + "\bencoding\x18\x03 \x01(\x03B\x03\xe0A\x02R\bencoding\"\xee\x01\n" + + "\aRowData\x123\n" + + "\x04rows\x18\x01 \x01(\v2\x1a.google.spannerlib.v1.RowsB\x03\xe0A\x02R\x04rows\x12@\n" + + "\bmetadata\x18\x02 \x01(\v2$.google.spanner.v1.ResultSetMetadataR\bmetadata\x123\n" + + "\x04data\x18\x03 \x03(\v2\x1a.google.protobuf.ListValueB\x03\xe0A\x02R\x04data\x127\n" + + "\x05stats\x18\x04 \x01(\v2!.google.spanner.v1.ResultSetStatsR\x05stats\"F\n" + + "\x0fMetadataRequest\x123\n" + + "\x04rows\x18\x01 \x01(\v2\x1a.google.spannerlib.v1.RowsB\x03\xe0A\x02R\x04rows\"L\n" + + "\x15ResultSetStatsRequest\x123\n" + + "\x04rows\x18\x01 \x01(\v2\x1a.google.spannerlib.v1.RowsB\x03\xe0A\x02R\x04rows\"u\n" + + "\x17ConnectionStreamRequest\x12O\n" + + "\x0fexecute_request\x18\x01 \x01(\v2$.google.spannerlib.v1.ExecuteRequestH\x00R\x0eexecuteRequestB\t\n" + + "\arequest\"_\n" + + "\x18ConnectionStreamResponse\x127\n" + + "\x03row\x18\x01 \x01(\v2#.google.spanner.v1.PartialResultSetH\x00R\x03rowB\n" + + "\n" + + "\bresponse2\xf1\n" + + "\n" + + "\n" + + "SpannerLib\x12S\n" + + "\n" + + "CreatePool\x12'.google.spannerlib.v1.CreatePoolRequest\x1a\x1a.google.spannerlib.v1.Pool\"\x00\x12A\n" + + "\tClosePool\x12\x1a.google.spannerlib.v1.Pool\x1a\x16.google.protobuf.Empty\"\x00\x12e\n" + + "\x10CreateConnection\x12-.google.spannerlib.v1.CreateConnectionRequest\x1a .google.spannerlib.v1.Connection\"\x00\x12M\n" + + "\x0fCloseConnection\x12 .google.spannerlib.v1.Connection\x1a\x16.google.protobuf.Empty\"\x00\x12M\n" + + "\aExecute\x12$.google.spannerlib.v1.ExecuteRequest\x1a\x1a.google.spannerlib.v1.Rows\"\x00\x12[\n" + + "\x10ExecuteStreaming\x12$.google.spannerlib.v1.ExecuteRequest\x1a\x1d.google.spannerlib.v1.RowData\"\x000\x01\x12g\n" + + "\fExecuteBatch\x12).google.spannerlib.v1.ExecuteBatchRequest\x1a*.google.spanner.v1.ExecuteBatchDmlResponse\"\x00\x12N\n" + + "\bMetadata\x12\x1a.google.spannerlib.v1.Rows\x1a$.google.spanner.v1.ResultSetMetadata\"\x00\x12G\n" + + "\x04Next\x12!.google.spannerlib.v1.NextRequest\x1a\x1a.google.protobuf.ListValue\"\x00\x12Q\n" + + "\x0eResultSetStats\x12\x1a.google.spannerlib.v1.Rows\x1a!.google.spanner.v1.ResultSetStats\"\x00\x12A\n" + + "\tCloseRows\x12\x1a.google.spannerlib.v1.Rows\x1a\x16.google.protobuf.Empty\"\x00\x12[\n" + + "\x10BeginTransaction\x12-.google.spannerlib.v1.BeginTransactionRequest\x1a\x16.google.protobuf.Empty\"\x00\x12O\n" + + "\x06Commit\x12 .google.spannerlib.v1.Connection\x1a!.google.spanner.v1.CommitResponse\"\x00\x12F\n" + + "\bRollback\x12 .google.spannerlib.v1.Connection\x1a\x16.google.protobuf.Empty\"\x00\x12b\n" + + "\x0eWriteMutations\x12+.google.spannerlib.v1.WriteMutationsRequest\x1a!.google.spanner.v1.CommitResponse\"\x00\x12w\n" + + "\x10ConnectionStream\x12-.google.spannerlib.v1.ConnectionStreamRequest\x1a..google.spannerlib.v1.ConnectionStreamResponse\"\x00(\x010\x01B\xcd\x01\n" + + "\x1ecom.google.cloud.spannerlib.v1B\x0fSpannerLibProtoP\x01Z>cloud.google.com/go/spannerlib/apiv1/spannerlibpb;spannerlibpb\xaa\x02\x1aGoogle.Cloud.SpannerLib.V1\xca\x02\x1aGoogle\\Cloud\\SpannerLib\\V1\xea\x02\x1dGoogle::Cloud::SpannerLib::V1b\x06proto3" + +var ( + file_google_spannerlib_v1_spannerlib_proto_rawDescOnce sync.Once + file_google_spannerlib_v1_spannerlib_proto_rawDescData []byte +) + +func file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP() []byte { + file_google_spannerlib_v1_spannerlib_proto_rawDescOnce.Do(func() { + file_google_spannerlib_v1_spannerlib_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_google_spannerlib_v1_spannerlib_proto_rawDesc), len(file_google_spannerlib_v1_spannerlib_proto_rawDesc))) + }) + return file_google_spannerlib_v1_spannerlib_proto_rawDescData +} + +var file_google_spannerlib_v1_spannerlib_proto_msgTypes = make([]protoimpl.MessageInfo, 15) +var file_google_spannerlib_v1_spannerlib_proto_goTypes = []any{ + (*CreatePoolRequest)(nil), // 0: google.spannerlib.v1.CreatePoolRequest + (*CreateConnectionRequest)(nil), // 1: google.spannerlib.v1.CreateConnectionRequest + (*ExecuteRequest)(nil), // 2: google.spannerlib.v1.ExecuteRequest + (*ExecuteBatchRequest)(nil), // 3: google.spannerlib.v1.ExecuteBatchRequest + (*BeginTransactionRequest)(nil), // 4: google.spannerlib.v1.BeginTransactionRequest + (*WriteMutationsRequest)(nil), // 5: google.spannerlib.v1.WriteMutationsRequest + (*Pool)(nil), // 6: google.spannerlib.v1.Pool + (*Connection)(nil), // 7: google.spannerlib.v1.Connection + (*Rows)(nil), // 8: google.spannerlib.v1.Rows + (*NextRequest)(nil), // 9: google.spannerlib.v1.NextRequest + (*RowData)(nil), // 10: google.spannerlib.v1.RowData + (*MetadataRequest)(nil), // 11: google.spannerlib.v1.MetadataRequest + (*ResultSetStatsRequest)(nil), // 12: google.spannerlib.v1.ResultSetStatsRequest + (*ConnectionStreamRequest)(nil), // 13: google.spannerlib.v1.ConnectionStreamRequest + (*ConnectionStreamResponse)(nil), // 14: google.spannerlib.v1.ConnectionStreamResponse + (*spannerpb.ExecuteSqlRequest)(nil), // 15: google.spanner.v1.ExecuteSqlRequest + (*spannerpb.ExecuteBatchDmlRequest)(nil), // 16: google.spanner.v1.ExecuteBatchDmlRequest + (*spannerpb.TransactionOptions)(nil), // 17: google.spanner.v1.TransactionOptions + (*spannerpb.BatchWriteRequest_MutationGroup)(nil), // 18: google.spanner.v1.BatchWriteRequest.MutationGroup + (*spannerpb.ResultSetMetadata)(nil), // 19: google.spanner.v1.ResultSetMetadata + (*structpb.ListValue)(nil), // 20: google.protobuf.ListValue + (*spannerpb.ResultSetStats)(nil), // 21: google.spanner.v1.ResultSetStats + (*spannerpb.PartialResultSet)(nil), // 22: google.spanner.v1.PartialResultSet + (*emptypb.Empty)(nil), // 23: google.protobuf.Empty + (*spannerpb.ExecuteBatchDmlResponse)(nil), // 24: google.spanner.v1.ExecuteBatchDmlResponse + (*spannerpb.CommitResponse)(nil), // 25: google.spanner.v1.CommitResponse +} +var file_google_spannerlib_v1_spannerlib_proto_depIdxs = []int32{ + 6, // 0: google.spannerlib.v1.CreateConnectionRequest.pool:type_name -> google.spannerlib.v1.Pool + 7, // 1: google.spannerlib.v1.ExecuteRequest.connection:type_name -> google.spannerlib.v1.Connection + 15, // 2: google.spannerlib.v1.ExecuteRequest.execute_sql_request:type_name -> google.spanner.v1.ExecuteSqlRequest + 7, // 3: google.spannerlib.v1.ExecuteBatchRequest.connection:type_name -> google.spannerlib.v1.Connection + 16, // 4: google.spannerlib.v1.ExecuteBatchRequest.execute_batch_dml_request:type_name -> google.spanner.v1.ExecuteBatchDmlRequest + 7, // 5: google.spannerlib.v1.BeginTransactionRequest.connection:type_name -> google.spannerlib.v1.Connection + 17, // 6: google.spannerlib.v1.BeginTransactionRequest.transaction_options:type_name -> google.spanner.v1.TransactionOptions + 7, // 7: google.spannerlib.v1.WriteMutationsRequest.connection:type_name -> google.spannerlib.v1.Connection + 18, // 8: google.spannerlib.v1.WriteMutationsRequest.mutations:type_name -> google.spanner.v1.BatchWriteRequest.MutationGroup + 6, // 9: google.spannerlib.v1.Connection.pool:type_name -> google.spannerlib.v1.Pool + 7, // 10: google.spannerlib.v1.Rows.connection:type_name -> google.spannerlib.v1.Connection + 8, // 11: google.spannerlib.v1.NextRequest.rows:type_name -> google.spannerlib.v1.Rows + 8, // 12: google.spannerlib.v1.RowData.rows:type_name -> google.spannerlib.v1.Rows + 19, // 13: google.spannerlib.v1.RowData.metadata:type_name -> google.spanner.v1.ResultSetMetadata + 20, // 14: google.spannerlib.v1.RowData.data:type_name -> google.protobuf.ListValue + 21, // 15: google.spannerlib.v1.RowData.stats:type_name -> google.spanner.v1.ResultSetStats + 8, // 16: google.spannerlib.v1.MetadataRequest.rows:type_name -> google.spannerlib.v1.Rows + 8, // 17: google.spannerlib.v1.ResultSetStatsRequest.rows:type_name -> google.spannerlib.v1.Rows + 2, // 18: google.spannerlib.v1.ConnectionStreamRequest.execute_request:type_name -> google.spannerlib.v1.ExecuteRequest + 22, // 19: google.spannerlib.v1.ConnectionStreamResponse.row:type_name -> google.spanner.v1.PartialResultSet + 0, // 20: google.spannerlib.v1.SpannerLib.CreatePool:input_type -> google.spannerlib.v1.CreatePoolRequest + 6, // 21: google.spannerlib.v1.SpannerLib.ClosePool:input_type -> google.spannerlib.v1.Pool + 1, // 22: google.spannerlib.v1.SpannerLib.CreateConnection:input_type -> google.spannerlib.v1.CreateConnectionRequest + 7, // 23: google.spannerlib.v1.SpannerLib.CloseConnection:input_type -> google.spannerlib.v1.Connection + 2, // 24: google.spannerlib.v1.SpannerLib.Execute:input_type -> google.spannerlib.v1.ExecuteRequest + 2, // 25: google.spannerlib.v1.SpannerLib.ExecuteStreaming:input_type -> google.spannerlib.v1.ExecuteRequest + 3, // 26: google.spannerlib.v1.SpannerLib.ExecuteBatch:input_type -> google.spannerlib.v1.ExecuteBatchRequest + 8, // 27: google.spannerlib.v1.SpannerLib.Metadata:input_type -> google.spannerlib.v1.Rows + 9, // 28: google.spannerlib.v1.SpannerLib.Next:input_type -> google.spannerlib.v1.NextRequest + 8, // 29: google.spannerlib.v1.SpannerLib.ResultSetStats:input_type -> google.spannerlib.v1.Rows + 8, // 30: google.spannerlib.v1.SpannerLib.CloseRows:input_type -> google.spannerlib.v1.Rows + 4, // 31: google.spannerlib.v1.SpannerLib.BeginTransaction:input_type -> google.spannerlib.v1.BeginTransactionRequest + 7, // 32: google.spannerlib.v1.SpannerLib.Commit:input_type -> google.spannerlib.v1.Connection + 7, // 33: google.spannerlib.v1.SpannerLib.Rollback:input_type -> google.spannerlib.v1.Connection + 5, // 34: google.spannerlib.v1.SpannerLib.WriteMutations:input_type -> google.spannerlib.v1.WriteMutationsRequest + 13, // 35: google.spannerlib.v1.SpannerLib.ConnectionStream:input_type -> google.spannerlib.v1.ConnectionStreamRequest + 6, // 36: google.spannerlib.v1.SpannerLib.CreatePool:output_type -> google.spannerlib.v1.Pool + 23, // 37: google.spannerlib.v1.SpannerLib.ClosePool:output_type -> google.protobuf.Empty + 7, // 38: google.spannerlib.v1.SpannerLib.CreateConnection:output_type -> google.spannerlib.v1.Connection + 23, // 39: google.spannerlib.v1.SpannerLib.CloseConnection:output_type -> google.protobuf.Empty + 8, // 40: google.spannerlib.v1.SpannerLib.Execute:output_type -> google.spannerlib.v1.Rows + 10, // 41: google.spannerlib.v1.SpannerLib.ExecuteStreaming:output_type -> google.spannerlib.v1.RowData + 24, // 42: google.spannerlib.v1.SpannerLib.ExecuteBatch:output_type -> google.spanner.v1.ExecuteBatchDmlResponse + 19, // 43: google.spannerlib.v1.SpannerLib.Metadata:output_type -> google.spanner.v1.ResultSetMetadata + 20, // 44: google.spannerlib.v1.SpannerLib.Next:output_type -> google.protobuf.ListValue + 21, // 45: google.spannerlib.v1.SpannerLib.ResultSetStats:output_type -> google.spanner.v1.ResultSetStats + 23, // 46: google.spannerlib.v1.SpannerLib.CloseRows:output_type -> google.protobuf.Empty + 23, // 47: google.spannerlib.v1.SpannerLib.BeginTransaction:output_type -> google.protobuf.Empty + 25, // 48: google.spannerlib.v1.SpannerLib.Commit:output_type -> google.spanner.v1.CommitResponse + 23, // 49: google.spannerlib.v1.SpannerLib.Rollback:output_type -> google.protobuf.Empty + 25, // 50: google.spannerlib.v1.SpannerLib.WriteMutations:output_type -> google.spanner.v1.CommitResponse + 14, // 51: google.spannerlib.v1.SpannerLib.ConnectionStream:output_type -> google.spannerlib.v1.ConnectionStreamResponse + 36, // [36:52] is the sub-list for method output_type + 20, // [20:36] is the sub-list for method input_type + 20, // [20:20] is the sub-list for extension type_name + 20, // [20:20] is the sub-list for extension extendee + 0, // [0:20] is the sub-list for field type_name +} + +func init() { file_google_spannerlib_v1_spannerlib_proto_init() } +func file_google_spannerlib_v1_spannerlib_proto_init() { + if File_google_spannerlib_v1_spannerlib_proto != nil { + return + } + file_google_spannerlib_v1_spannerlib_proto_msgTypes[13].OneofWrappers = []any{ + (*ConnectionStreamRequest_ExecuteRequest)(nil), + } + file_google_spannerlib_v1_spannerlib_proto_msgTypes[14].OneofWrappers = []any{ + (*ConnectionStreamResponse_Row)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_google_spannerlib_v1_spannerlib_proto_rawDesc), len(file_google_spannerlib_v1_spannerlib_proto_rawDesc)), + NumEnums: 0, + NumMessages: 15, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_google_spannerlib_v1_spannerlib_proto_goTypes, + DependencyIndexes: file_google_spannerlib_v1_spannerlib_proto_depIdxs, + MessageInfos: file_google_spannerlib_v1_spannerlib_proto_msgTypes, + }.Build() + File_google_spannerlib_v1_spannerlib_proto = out.File + file_google_spannerlib_v1_spannerlib_proto_goTypes = nil + file_google_spannerlib_v1_spannerlib_proto_depIdxs = nil +} diff --git a/spannerlib/grpc-server/google/spannerlib/v1/spannerlib.proto b/spannerlib/grpc-server/google/spannerlib/v1/spannerlib.proto new file mode 100644 index 00000000..22d6e680 --- /dev/null +++ b/spannerlib/grpc-server/google/spannerlib/v1/spannerlib.proto @@ -0,0 +1,161 @@ +syntax = "proto3"; + +package google.spannerlib.v1; + +import "google/api/field_behavior.proto"; +import "google/protobuf/empty.proto"; +import "google/protobuf/struct.proto"; +import "google/spanner/v1/result_set.proto"; +import "google/spanner/v1/spanner.proto"; +import "google/spanner/v1/transaction.proto"; + +option csharp_namespace = "Google.Cloud.SpannerLib.V1"; +option go_package = "cloud.google.com/go/spannerlib/apiv1/spannerlibpb;spannerlibpb"; +option java_multiple_files = true; +option java_outer_classname = "SpannerLibProto"; +option java_package = "com.google.cloud.spannerlib.v1"; +option php_namespace = "Google\\Cloud\\SpannerLib\\V1"; +option ruby_package = "Google::Cloud::SpannerLib::V1"; + +service SpannerLib { + rpc CreatePool(CreatePoolRequest) returns (Pool) {} + rpc ClosePool(Pool) returns (google.protobuf.Empty) {} + + rpc CreateConnection(CreateConnectionRequest) returns (Connection) {} + rpc CloseConnection(Connection) returns (google.protobuf.Empty) {} + + rpc Execute(ExecuteRequest) returns (Rows) {} + rpc ExecuteStreaming(ExecuteRequest) returns (stream RowData) {} + rpc ExecuteBatch(ExecuteBatchRequest) returns (google.spanner.v1.ExecuteBatchDmlResponse) {} + rpc Metadata(Rows) returns (google.spanner.v1.ResultSetMetadata) {} + rpc Next(NextRequest) returns (google.protobuf.ListValue) {} + rpc ResultSetStats(Rows) returns (google.spanner.v1.ResultSetStats) {} + rpc CloseRows(Rows) returns (google.protobuf.Empty) {} + + rpc BeginTransaction(BeginTransactionRequest) returns (google.protobuf.Empty) {} + rpc Commit(Connection) returns (google.spanner.v1.CommitResponse) {} + rpc Rollback(Connection) returns (google.protobuf.Empty) {} + + rpc WriteMutations(WriteMutationsRequest) returns (google.spanner.v1.CommitResponse) {} + + rpc ConnectionStream(stream ConnectionStreamRequest) returns (stream ConnectionStreamResponse) {} +} + +message CreatePoolRequest { + string connection_string = 1 [ + (google.api.field_behavior) = REQUIRED + ]; +} + +message CreateConnectionRequest { + Pool pool = 1 [ + (google.api.field_behavior) = REQUIRED + ]; +} + +message ExecuteRequest { + Connection connection = 1 [ + (google.api.field_behavior) = REQUIRED + ]; + google.spanner.v1.ExecuteSqlRequest execute_sql_request = 2 [ + (google.api.field_behavior) = REQUIRED + ]; +} + +message ExecuteBatchRequest { + Connection connection = 1 [ + (google.api.field_behavior) = REQUIRED + ]; + google.spanner.v1.ExecuteBatchDmlRequest execute_batch_dml_request = 2 [ + (google.api.field_behavior) = REQUIRED + ]; +} + +message BeginTransactionRequest { + Connection connection = 1 [ + (google.api.field_behavior) = REQUIRED + ]; + google.spanner.v1.TransactionOptions transaction_options = 2 [ + (google.api.field_behavior) = REQUIRED + ]; +} + +message WriteMutationsRequest { + Connection connection = 1 [ + (google.api.field_behavior) = REQUIRED + ]; + google.spanner.v1.BatchWriteRequest.MutationGroup mutations = 2 [ + (google.api.field_behavior) = REQUIRED + ]; +} + +message Pool { + int64 id = 1 [ + (google.api.field_behavior) = REQUIRED + ]; +} + +message Connection { + Pool pool = 1 [ + (google.api.field_behavior) = REQUIRED + ]; + int64 id = 2 [ + (google.api.field_behavior) = REQUIRED + ]; +} + +message Rows { + Connection connection = 1 [ + (google.api.field_behavior) = REQUIRED + ]; + int64 id = 2 [ + (google.api.field_behavior) = REQUIRED + ]; +} + +message NextRequest { + Rows rows = 1 [ + (google.api.field_behavior) = REQUIRED + ]; + int64 num_rows = 2 [ + (google.api.field_behavior) = REQUIRED + ]; + int64 encoding = 3 [ + (google.api.field_behavior) = REQUIRED + ]; +} + +message RowData { + Rows rows = 1 [ + (google.api.field_behavior) = REQUIRED + ]; + google.spanner.v1.ResultSetMetadata metadata = 2; + repeated google.protobuf.ListValue data = 3 [ + (google.api.field_behavior) = REQUIRED + ]; + google.spanner.v1.ResultSetStats stats = 4; +} + +message MetadataRequest { + Rows rows = 1 [ + (google.api.field_behavior) = REQUIRED + ]; +} + +message ResultSetStatsRequest { + Rows rows = 1 [ + (google.api.field_behavior) = REQUIRED + ]; +} + +message ConnectionStreamRequest { + oneof request { + ExecuteRequest execute_request = 1; + } +} + +message ConnectionStreamResponse { + oneof response { + google.spanner.v1.PartialResultSet row = 1; + } +} diff --git a/spannerlib/grpc-server/google/spannerlib/v1/spannerlib_grpc.pb.go b/spannerlib/grpc-server/google/spannerlib/v1/spannerlib_grpc.pb.go new file mode 100644 index 00000000..a0f8c2bd --- /dev/null +++ b/spannerlib/grpc-server/google/spannerlib/v1/spannerlib_grpc.pb.go @@ -0,0 +1,692 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.5.1 +// - protoc v6.32.1 +// source: google/spannerlib/v1/spannerlib.proto + +package spannerlibpb + +import ( + spannerpb "cloud.google.com/go/spanner/apiv1/spannerpb" + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + emptypb "google.golang.org/protobuf/types/known/emptypb" + structpb "google.golang.org/protobuf/types/known/structpb" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + SpannerLib_CreatePool_FullMethodName = "/google.spannerlib.v1.SpannerLib/CreatePool" + SpannerLib_ClosePool_FullMethodName = "/google.spannerlib.v1.SpannerLib/ClosePool" + SpannerLib_CreateConnection_FullMethodName = "/google.spannerlib.v1.SpannerLib/CreateConnection" + SpannerLib_CloseConnection_FullMethodName = "/google.spannerlib.v1.SpannerLib/CloseConnection" + SpannerLib_Execute_FullMethodName = "/google.spannerlib.v1.SpannerLib/Execute" + SpannerLib_ExecuteStreaming_FullMethodName = "/google.spannerlib.v1.SpannerLib/ExecuteStreaming" + SpannerLib_ExecuteBatch_FullMethodName = "/google.spannerlib.v1.SpannerLib/ExecuteBatch" + SpannerLib_Metadata_FullMethodName = "/google.spannerlib.v1.SpannerLib/Metadata" + SpannerLib_Next_FullMethodName = "/google.spannerlib.v1.SpannerLib/Next" + SpannerLib_ResultSetStats_FullMethodName = "/google.spannerlib.v1.SpannerLib/ResultSetStats" + SpannerLib_CloseRows_FullMethodName = "/google.spannerlib.v1.SpannerLib/CloseRows" + SpannerLib_BeginTransaction_FullMethodName = "/google.spannerlib.v1.SpannerLib/BeginTransaction" + SpannerLib_Commit_FullMethodName = "/google.spannerlib.v1.SpannerLib/Commit" + SpannerLib_Rollback_FullMethodName = "/google.spannerlib.v1.SpannerLib/Rollback" + SpannerLib_WriteMutations_FullMethodName = "/google.spannerlib.v1.SpannerLib/WriteMutations" + SpannerLib_ConnectionStream_FullMethodName = "/google.spannerlib.v1.SpannerLib/ConnectionStream" +) + +// SpannerLibClient is the client API for SpannerLib service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type SpannerLibClient interface { + CreatePool(ctx context.Context, in *CreatePoolRequest, opts ...grpc.CallOption) (*Pool, error) + ClosePool(ctx context.Context, in *Pool, opts ...grpc.CallOption) (*emptypb.Empty, error) + CreateConnection(ctx context.Context, in *CreateConnectionRequest, opts ...grpc.CallOption) (*Connection, error) + CloseConnection(ctx context.Context, in *Connection, opts ...grpc.CallOption) (*emptypb.Empty, error) + Execute(ctx context.Context, in *ExecuteRequest, opts ...grpc.CallOption) (*Rows, error) + ExecuteStreaming(ctx context.Context, in *ExecuteRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[RowData], error) + ExecuteBatch(ctx context.Context, in *ExecuteBatchRequest, opts ...grpc.CallOption) (*spannerpb.ExecuteBatchDmlResponse, error) + Metadata(ctx context.Context, in *Rows, opts ...grpc.CallOption) (*spannerpb.ResultSetMetadata, error) + Next(ctx context.Context, in *NextRequest, opts ...grpc.CallOption) (*structpb.ListValue, error) + ResultSetStats(ctx context.Context, in *Rows, opts ...grpc.CallOption) (*spannerpb.ResultSetStats, error) + CloseRows(ctx context.Context, in *Rows, opts ...grpc.CallOption) (*emptypb.Empty, error) + BeginTransaction(ctx context.Context, in *BeginTransactionRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + Commit(ctx context.Context, in *Connection, opts ...grpc.CallOption) (*spannerpb.CommitResponse, error) + Rollback(ctx context.Context, in *Connection, opts ...grpc.CallOption) (*emptypb.Empty, error) + WriteMutations(ctx context.Context, in *WriteMutationsRequest, opts ...grpc.CallOption) (*spannerpb.CommitResponse, error) + ConnectionStream(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[ConnectionStreamRequest, ConnectionStreamResponse], error) +} + +type spannerLibClient struct { + cc grpc.ClientConnInterface +} + +func NewSpannerLibClient(cc grpc.ClientConnInterface) SpannerLibClient { + return &spannerLibClient{cc} +} + +func (c *spannerLibClient) CreatePool(ctx context.Context, in *CreatePoolRequest, opts ...grpc.CallOption) (*Pool, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(Pool) + err := c.cc.Invoke(ctx, SpannerLib_CreatePool_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *spannerLibClient) ClosePool(ctx context.Context, in *Pool, opts ...grpc.CallOption) (*emptypb.Empty, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, SpannerLib_ClosePool_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *spannerLibClient) CreateConnection(ctx context.Context, in *CreateConnectionRequest, opts ...grpc.CallOption) (*Connection, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(Connection) + err := c.cc.Invoke(ctx, SpannerLib_CreateConnection_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *spannerLibClient) CloseConnection(ctx context.Context, in *Connection, opts ...grpc.CallOption) (*emptypb.Empty, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, SpannerLib_CloseConnection_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *spannerLibClient) Execute(ctx context.Context, in *ExecuteRequest, opts ...grpc.CallOption) (*Rows, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(Rows) + err := c.cc.Invoke(ctx, SpannerLib_Execute_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *spannerLibClient) ExecuteStreaming(ctx context.Context, in *ExecuteRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[RowData], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &SpannerLib_ServiceDesc.Streams[0], SpannerLib_ExecuteStreaming_FullMethodName, cOpts...) + if err != nil { + return nil, err + } + x := &grpc.GenericClientStream[ExecuteRequest, RowData]{ClientStream: stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type SpannerLib_ExecuteStreamingClient = grpc.ServerStreamingClient[RowData] + +func (c *spannerLibClient) ExecuteBatch(ctx context.Context, in *ExecuteBatchRequest, opts ...grpc.CallOption) (*spannerpb.ExecuteBatchDmlResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(spannerpb.ExecuteBatchDmlResponse) + err := c.cc.Invoke(ctx, SpannerLib_ExecuteBatch_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *spannerLibClient) Metadata(ctx context.Context, in *Rows, opts ...grpc.CallOption) (*spannerpb.ResultSetMetadata, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(spannerpb.ResultSetMetadata) + err := c.cc.Invoke(ctx, SpannerLib_Metadata_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *spannerLibClient) Next(ctx context.Context, in *NextRequest, opts ...grpc.CallOption) (*structpb.ListValue, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(structpb.ListValue) + err := c.cc.Invoke(ctx, SpannerLib_Next_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *spannerLibClient) ResultSetStats(ctx context.Context, in *Rows, opts ...grpc.CallOption) (*spannerpb.ResultSetStats, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(spannerpb.ResultSetStats) + err := c.cc.Invoke(ctx, SpannerLib_ResultSetStats_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *spannerLibClient) CloseRows(ctx context.Context, in *Rows, opts ...grpc.CallOption) (*emptypb.Empty, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, SpannerLib_CloseRows_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *spannerLibClient) BeginTransaction(ctx context.Context, in *BeginTransactionRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, SpannerLib_BeginTransaction_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *spannerLibClient) Commit(ctx context.Context, in *Connection, opts ...grpc.CallOption) (*spannerpb.CommitResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(spannerpb.CommitResponse) + err := c.cc.Invoke(ctx, SpannerLib_Commit_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *spannerLibClient) Rollback(ctx context.Context, in *Connection, opts ...grpc.CallOption) (*emptypb.Empty, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, SpannerLib_Rollback_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *spannerLibClient) WriteMutations(ctx context.Context, in *WriteMutationsRequest, opts ...grpc.CallOption) (*spannerpb.CommitResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(spannerpb.CommitResponse) + err := c.cc.Invoke(ctx, SpannerLib_WriteMutations_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *spannerLibClient) ConnectionStream(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[ConnectionStreamRequest, ConnectionStreamResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &SpannerLib_ServiceDesc.Streams[1], SpannerLib_ConnectionStream_FullMethodName, cOpts...) + if err != nil { + return nil, err + } + x := &grpc.GenericClientStream[ConnectionStreamRequest, ConnectionStreamResponse]{ClientStream: stream} + return x, nil +} + +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type SpannerLib_ConnectionStreamClient = grpc.BidiStreamingClient[ConnectionStreamRequest, ConnectionStreamResponse] + +// SpannerLibServer is the server API for SpannerLib service. +// All implementations must embed UnimplementedSpannerLibServer +// for forward compatibility. +type SpannerLibServer interface { + CreatePool(context.Context, *CreatePoolRequest) (*Pool, error) + ClosePool(context.Context, *Pool) (*emptypb.Empty, error) + CreateConnection(context.Context, *CreateConnectionRequest) (*Connection, error) + CloseConnection(context.Context, *Connection) (*emptypb.Empty, error) + Execute(context.Context, *ExecuteRequest) (*Rows, error) + ExecuteStreaming(*ExecuteRequest, grpc.ServerStreamingServer[RowData]) error + ExecuteBatch(context.Context, *ExecuteBatchRequest) (*spannerpb.ExecuteBatchDmlResponse, error) + Metadata(context.Context, *Rows) (*spannerpb.ResultSetMetadata, error) + Next(context.Context, *NextRequest) (*structpb.ListValue, error) + ResultSetStats(context.Context, *Rows) (*spannerpb.ResultSetStats, error) + CloseRows(context.Context, *Rows) (*emptypb.Empty, error) + BeginTransaction(context.Context, *BeginTransactionRequest) (*emptypb.Empty, error) + Commit(context.Context, *Connection) (*spannerpb.CommitResponse, error) + Rollback(context.Context, *Connection) (*emptypb.Empty, error) + WriteMutations(context.Context, *WriteMutationsRequest) (*spannerpb.CommitResponse, error) + ConnectionStream(grpc.BidiStreamingServer[ConnectionStreamRequest, ConnectionStreamResponse]) error + mustEmbedUnimplementedSpannerLibServer() +} + +// UnimplementedSpannerLibServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedSpannerLibServer struct{} + +func (UnimplementedSpannerLibServer) CreatePool(context.Context, *CreatePoolRequest) (*Pool, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreatePool not implemented") +} +func (UnimplementedSpannerLibServer) ClosePool(context.Context, *Pool) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method ClosePool not implemented") +} +func (UnimplementedSpannerLibServer) CreateConnection(context.Context, *CreateConnectionRequest) (*Connection, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateConnection not implemented") +} +func (UnimplementedSpannerLibServer) CloseConnection(context.Context, *Connection) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method CloseConnection not implemented") +} +func (UnimplementedSpannerLibServer) Execute(context.Context, *ExecuteRequest) (*Rows, error) { + return nil, status.Errorf(codes.Unimplemented, "method Execute not implemented") +} +func (UnimplementedSpannerLibServer) ExecuteStreaming(*ExecuteRequest, grpc.ServerStreamingServer[RowData]) error { + return status.Errorf(codes.Unimplemented, "method ExecuteStreaming not implemented") +} +func (UnimplementedSpannerLibServer) ExecuteBatch(context.Context, *ExecuteBatchRequest) (*spannerpb.ExecuteBatchDmlResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ExecuteBatch not implemented") +} +func (UnimplementedSpannerLibServer) Metadata(context.Context, *Rows) (*spannerpb.ResultSetMetadata, error) { + return nil, status.Errorf(codes.Unimplemented, "method Metadata not implemented") +} +func (UnimplementedSpannerLibServer) Next(context.Context, *NextRequest) (*structpb.ListValue, error) { + return nil, status.Errorf(codes.Unimplemented, "method Next not implemented") +} +func (UnimplementedSpannerLibServer) ResultSetStats(context.Context, *Rows) (*spannerpb.ResultSetStats, error) { + return nil, status.Errorf(codes.Unimplemented, "method ResultSetStats not implemented") +} +func (UnimplementedSpannerLibServer) CloseRows(context.Context, *Rows) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method CloseRows not implemented") +} +func (UnimplementedSpannerLibServer) BeginTransaction(context.Context, *BeginTransactionRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method BeginTransaction not implemented") +} +func (UnimplementedSpannerLibServer) Commit(context.Context, *Connection) (*spannerpb.CommitResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Commit not implemented") +} +func (UnimplementedSpannerLibServer) Rollback(context.Context, *Connection) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method Rollback not implemented") +} +func (UnimplementedSpannerLibServer) WriteMutations(context.Context, *WriteMutationsRequest) (*spannerpb.CommitResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method WriteMutations not implemented") +} +func (UnimplementedSpannerLibServer) ConnectionStream(grpc.BidiStreamingServer[ConnectionStreamRequest, ConnectionStreamResponse]) error { + return status.Errorf(codes.Unimplemented, "method ConnectionStream not implemented") +} +func (UnimplementedSpannerLibServer) mustEmbedUnimplementedSpannerLibServer() {} +func (UnimplementedSpannerLibServer) testEmbeddedByValue() {} + +// UnsafeSpannerLibServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to SpannerLibServer will +// result in compilation errors. +type UnsafeSpannerLibServer interface { + mustEmbedUnimplementedSpannerLibServer() +} + +func RegisterSpannerLibServer(s grpc.ServiceRegistrar, srv SpannerLibServer) { + // If the following call pancis, it indicates UnimplementedSpannerLibServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } + s.RegisterService(&SpannerLib_ServiceDesc, srv) +} + +func _SpannerLib_CreatePool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreatePoolRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SpannerLibServer).CreatePool(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SpannerLib_CreatePool_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SpannerLibServer).CreatePool(ctx, req.(*CreatePoolRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SpannerLib_ClosePool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Pool) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SpannerLibServer).ClosePool(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SpannerLib_ClosePool_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SpannerLibServer).ClosePool(ctx, req.(*Pool)) + } + return interceptor(ctx, in, info, handler) +} + +func _SpannerLib_CreateConnection_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateConnectionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SpannerLibServer).CreateConnection(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SpannerLib_CreateConnection_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SpannerLibServer).CreateConnection(ctx, req.(*CreateConnectionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SpannerLib_CloseConnection_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Connection) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SpannerLibServer).CloseConnection(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SpannerLib_CloseConnection_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SpannerLibServer).CloseConnection(ctx, req.(*Connection)) + } + return interceptor(ctx, in, info, handler) +} + +func _SpannerLib_Execute_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ExecuteRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SpannerLibServer).Execute(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SpannerLib_Execute_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SpannerLibServer).Execute(ctx, req.(*ExecuteRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SpannerLib_ExecuteStreaming_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(ExecuteRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(SpannerLibServer).ExecuteStreaming(m, &grpc.GenericServerStream[ExecuteRequest, RowData]{ServerStream: stream}) +} + +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type SpannerLib_ExecuteStreamingServer = grpc.ServerStreamingServer[RowData] + +func _SpannerLib_ExecuteBatch_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ExecuteBatchRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SpannerLibServer).ExecuteBatch(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SpannerLib_ExecuteBatch_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SpannerLibServer).ExecuteBatch(ctx, req.(*ExecuteBatchRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SpannerLib_Metadata_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Rows) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SpannerLibServer).Metadata(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SpannerLib_Metadata_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SpannerLibServer).Metadata(ctx, req.(*Rows)) + } + return interceptor(ctx, in, info, handler) +} + +func _SpannerLib_Next_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NextRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SpannerLibServer).Next(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SpannerLib_Next_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SpannerLibServer).Next(ctx, req.(*NextRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SpannerLib_ResultSetStats_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Rows) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SpannerLibServer).ResultSetStats(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SpannerLib_ResultSetStats_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SpannerLibServer).ResultSetStats(ctx, req.(*Rows)) + } + return interceptor(ctx, in, info, handler) +} + +func _SpannerLib_CloseRows_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Rows) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SpannerLibServer).CloseRows(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SpannerLib_CloseRows_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SpannerLibServer).CloseRows(ctx, req.(*Rows)) + } + return interceptor(ctx, in, info, handler) +} + +func _SpannerLib_BeginTransaction_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BeginTransactionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SpannerLibServer).BeginTransaction(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SpannerLib_BeginTransaction_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SpannerLibServer).BeginTransaction(ctx, req.(*BeginTransactionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SpannerLib_Commit_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Connection) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SpannerLibServer).Commit(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SpannerLib_Commit_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SpannerLibServer).Commit(ctx, req.(*Connection)) + } + return interceptor(ctx, in, info, handler) +} + +func _SpannerLib_Rollback_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Connection) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SpannerLibServer).Rollback(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SpannerLib_Rollback_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SpannerLibServer).Rollback(ctx, req.(*Connection)) + } + return interceptor(ctx, in, info, handler) +} + +func _SpannerLib_WriteMutations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(WriteMutationsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SpannerLibServer).WriteMutations(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SpannerLib_WriteMutations_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SpannerLibServer).WriteMutations(ctx, req.(*WriteMutationsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SpannerLib_ConnectionStream_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(SpannerLibServer).ConnectionStream(&grpc.GenericServerStream[ConnectionStreamRequest, ConnectionStreamResponse]{ServerStream: stream}) +} + +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type SpannerLib_ConnectionStreamServer = grpc.BidiStreamingServer[ConnectionStreamRequest, ConnectionStreamResponse] + +// SpannerLib_ServiceDesc is the grpc.ServiceDesc for SpannerLib service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var SpannerLib_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "google.spannerlib.v1.SpannerLib", + HandlerType: (*SpannerLibServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreatePool", + Handler: _SpannerLib_CreatePool_Handler, + }, + { + MethodName: "ClosePool", + Handler: _SpannerLib_ClosePool_Handler, + }, + { + MethodName: "CreateConnection", + Handler: _SpannerLib_CreateConnection_Handler, + }, + { + MethodName: "CloseConnection", + Handler: _SpannerLib_CloseConnection_Handler, + }, + { + MethodName: "Execute", + Handler: _SpannerLib_Execute_Handler, + }, + { + MethodName: "ExecuteBatch", + Handler: _SpannerLib_ExecuteBatch_Handler, + }, + { + MethodName: "Metadata", + Handler: _SpannerLib_Metadata_Handler, + }, + { + MethodName: "Next", + Handler: _SpannerLib_Next_Handler, + }, + { + MethodName: "ResultSetStats", + Handler: _SpannerLib_ResultSetStats_Handler, + }, + { + MethodName: "CloseRows", + Handler: _SpannerLib_CloseRows_Handler, + }, + { + MethodName: "BeginTransaction", + Handler: _SpannerLib_BeginTransaction_Handler, + }, + { + MethodName: "Commit", + Handler: _SpannerLib_Commit_Handler, + }, + { + MethodName: "Rollback", + Handler: _SpannerLib_Rollback_Handler, + }, + { + MethodName: "WriteMutations", + Handler: _SpannerLib_WriteMutations_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "ExecuteStreaming", + Handler: _SpannerLib_ExecuteStreaming_Handler, + ServerStreams: true, + }, + { + StreamName: "ConnectionStream", + Handler: _SpannerLib_ConnectionStream_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, + Metadata: "google/spannerlib/v1/spannerlib.proto", +} diff --git a/spannerlib/grpc-server/googleapis b/spannerlib/grpc-server/googleapis new file mode 160000 index 00000000..e9078581 --- /dev/null +++ b/spannerlib/grpc-server/googleapis @@ -0,0 +1 @@ +Subproject commit e9078581209139d142aad60322b6e09f565eae41 diff --git a/spannerlib/grpc-server/server.go b/spannerlib/grpc-server/server.go new file mode 100644 index 00000000..a16fc758 --- /dev/null +++ b/spannerlib/grpc-server/server.go @@ -0,0 +1,230 @@ +package main + +import ( + "context" + "log" + "net" + "os" + + "cloud.google.com/go/spanner/apiv1/spannerpb" + "google.golang.org/grpc" + "google.golang.org/protobuf/types/known/emptypb" + "google.golang.org/protobuf/types/known/structpb" + "spannerlib/api" + pb "spannerlib/grpc-server/google/spannerlib/v1" +) + +func main() { + if len(os.Args) < 2 { + log.Fatalf("Missing gRPC server address\n") + } + name := os.Args[1] + tp := "unix" + if len(os.Args) > 2 { + tp = os.Args[2] + } + if tp == "unix" { + defer func() { _ = os.Remove(name) }() + } + lis, err := net.Listen(tp, name) + if err != nil { + log.Fatalf("failed to listen: %v\n", err) + } + var opts []grpc.ServerOption + grpcServer := grpc.NewServer(opts...) + + server := spannerLibServer{} + pb.RegisterSpannerLibServer(grpcServer, &server) + log.Printf("Starting gRPC server on %s\n", lis.Addr().String()) + err = grpcServer.Serve(lis) + if err != nil { + log.Printf("failed to serve: %v\n", err) + } +} + +var _ pb.SpannerLibServer = &spannerLibServer{} + +type spannerLibServer struct { + pb.UnimplementedSpannerLibServer +} + +func (s *spannerLibServer) CreatePool(ctx context.Context, request *pb.CreatePoolRequest) (*pb.Pool, error) { + id, err := api.CreatePool(ctx, request.ConnectionString) + if err != nil { + return nil, err + } + return &pb.Pool{Id: id}, nil +} + +func (s *spannerLibServer) ClosePool(ctx context.Context, pool *pb.Pool) (*emptypb.Empty, error) { + err := api.ClosePool(ctx, pool.Id) + if err != nil { + return nil, err + } + return &emptypb.Empty{}, nil +} + +func (s *spannerLibServer) CreateConnection(ctx context.Context, request *pb.CreateConnectionRequest) (*pb.Connection, error) { + id, err := api.CreateConnection(ctx, request.Pool.Id) + if err != nil { + return nil, err + } + return &pb.Connection{Pool: request.Pool, Id: id}, nil +} + +func (s *spannerLibServer) CloseConnection(ctx context.Context, connection *pb.Connection) (*emptypb.Empty, error) { + err := api.CloseConnection(ctx, connection.Pool.Id, connection.Id) + if err != nil { + return nil, err + } + return &emptypb.Empty{}, nil +} + +func contextWithSameDeadline(ctx context.Context) context.Context { + newContext := context.Background() + if deadline, ok := ctx.Deadline(); ok { + // Ignore the returned cancel function here, as the context will be closed when the Rows object is closed. + //goland:noinspection GoVetLostCancel + newContext, _ = context.WithDeadline(newContext, deadline) + } + return newContext +} + +func (s *spannerLibServer) Execute(ctx context.Context, request *pb.ExecuteRequest) (*pb.Rows, error) { + // Create a new context that is used for the query. We need to do this, because the context that is passed in to + // this function will be cancelled once the RPC call finishes. That again would cause further calls to Next on the + // underlying rows object to fail with a 'Context cancelled' error. + queryContext := contextWithSameDeadline(ctx) + id, err := api.Execute(queryContext, request.Connection.Pool.Id, request.Connection.Id, request.ExecuteSqlRequest) + if err != nil { + return nil, err + } + return &pb.Rows{Connection: request.Connection, Id: id}, nil +} + +func (s *spannerLibServer) ExecuteStreaming(request *pb.ExecuteRequest, stream grpc.ServerStreamingServer[pb.RowData]) error { + queryContext := contextWithSameDeadline(stream.Context()) + id, err := api.Execute(queryContext, request.Connection.Pool.Id, request.Connection.Id, request.ExecuteSqlRequest) + if err != nil { + return err + } + defer func() { _ = api.CloseRows(queryContext, request.Connection.Pool.Id, request.Connection.Id, id) }() + rows := &pb.Rows{Connection: request.Connection, Id: id} + metadata, err := api.Metadata(queryContext, request.Connection.Pool.Id, request.Connection.Id, id) + if err != nil { + return err + } + first := true + for { + if row, err := api.Next(queryContext, request.Connection.Pool.Id, request.Connection.Id, id); err != nil { + return err + } else { + if row == nil { + stats, err := api.ResultSetStats(queryContext, request.Connection.Pool.Id, request.Connection.Id, id) + if err != nil { + return err + } + res := &pb.RowData{Rows: rows, Stats: stats} + if first { + res.Metadata = metadata + first = false + } + if err := stream.Send(res); err != nil { + return err + } + break + } + res := &pb.RowData{Rows: rows, Data: []*structpb.ListValue{row}} + if first { + res.Metadata = metadata + first = false + } + if err := stream.Send(res); err != nil { + return err + } + } + } + return nil +} + +func (s *spannerLibServer) ExecuteBatch(ctx context.Context, request *pb.ExecuteBatchRequest) (*spannerpb.ExecuteBatchDmlResponse, error) { + resp, err := api.ExecuteBatch(ctx, request.Connection.Pool.Id, request.Connection.Id, request.ExecuteBatchDmlRequest) + if err != nil { + return nil, err + } + return resp, nil +} + +func (s *spannerLibServer) Metadata(ctx context.Context, rows *pb.Rows) (*spannerpb.ResultSetMetadata, error) { + metadata, err := api.Metadata(ctx, rows.Connection.Pool.Id, rows.Connection.Id, rows.Id) + if err != nil { + return nil, err + } + return metadata, nil +} + +func (s *spannerLibServer) Next(ctx context.Context, request *pb.NextRequest) (*structpb.ListValue, error) { + // TODO: Pass in numRows and encoding option. + values, err := api.Next(ctx, request.Rows.Connection.Pool.Id, request.Rows.Connection.Id, request.Rows.Id) + if err != nil { + return nil, err + } + return values, nil +} + +func (s *spannerLibServer) ResultSetStats(ctx context.Context, rows *pb.Rows) (*spannerpb.ResultSetStats, error) { + stats, err := api.ResultSetStats(ctx, rows.Connection.Pool.Id, rows.Connection.Id, rows.Id) + if err != nil { + return nil, err + } + return stats, nil +} + +func (s *spannerLibServer) CloseRows(ctx context.Context, rows *pb.Rows) (*emptypb.Empty, error) { + err := api.CloseRows(ctx, rows.Connection.Pool.Id, rows.Connection.Id, rows.Id) + if err != nil { + return nil, err + } + return &emptypb.Empty{}, nil +} + +func (s *spannerLibServer) BeginTransaction(ctx context.Context, request *pb.BeginTransactionRequest) (*emptypb.Empty, error) { + // Create a new context that is used for the transaction. We need to do this, because the context that is passed in + // to this function will be cancelled once the RPC call finishes. That again would cause further calls on + // the underlying transaction to fail with a 'Context cancelled' error. + txContext := context.Background() + if deadline, ok := ctx.Deadline(); ok { + // Ignore the returned cancel function here, as the context will be closed when the transaction is closed. + //goland:noinspection GoVetLostCancel + txContext, _ = context.WithDeadline(txContext, deadline) + } + err := api.BeginTransaction(txContext, request.Connection.Pool.Id, request.Connection.Id, request.TransactionOptions) + if err != nil { + return nil, err + } + return &emptypb.Empty{}, nil +} + +func (s *spannerLibServer) Commit(ctx context.Context, connection *pb.Connection) (*spannerpb.CommitResponse, error) { + resp, err := api.Commit(ctx, connection.Pool.Id, connection.Id) + if err != nil { + return nil, err + } + return resp, nil +} + +func (s *spannerLibServer) Rollback(ctx context.Context, connection *pb.Connection) (*emptypb.Empty, error) { + err := api.Rollback(ctx, connection.Pool.Id, connection.Id) + if err != nil { + return nil, err + } + return &emptypb.Empty{}, nil +} + +func (s *spannerLibServer) WriteMutations(ctx context.Context, request *pb.WriteMutationsRequest) (*spannerpb.CommitResponse, error) { + resp, err := api.WriteMutations(ctx, request.Connection.Pool.Id, request.Connection.Id, request.Mutations) + if err != nil { + return nil, err + } + return resp, nil +} diff --git a/spannerlib/grpc-server/server_test.go b/spannerlib/grpc-server/server_test.go new file mode 100644 index 00000000..8be4e51c --- /dev/null +++ b/spannerlib/grpc-server/server_test.go @@ -0,0 +1,503 @@ +package main + +import ( + "context" + "fmt" + "net" + "os" + "path/filepath" + "runtime" + "testing" + + "cloud.google.com/go/spanner/admin/database/apiv1/databasepb" + sppb "cloud.google.com/go/spanner/apiv1/spannerpb" + "github.com/google/uuid" + "github.com/googleapis/go-sql-spanner/testutil" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" + "google.golang.org/protobuf/types/known/structpb" + pb "spannerlib/grpc-server/google/spannerlib/v1" +) + +func TestCreatePool(t *testing.T) { + t.Parallel() + ctx := context.Background() + + server, teardown := setupMockSpannerServer(t) + defer teardown() + dsn := fmt.Sprintf("%s/projects/p/instances/i/databases/d?useplaintext=true", server.Address) + + client, cleanup := startTestSpannerLibServer(t) + defer cleanup() + + pool, err := client.CreatePool(ctx, &pb.CreatePoolRequest{ConnectionString: dsn}) + if err != nil { + t.Fatalf("failed to create pool: %v", err) + } + if pool.Id <= 0 { + t.Fatalf("pool id should be greater than zero") + } + + if _, err := client.ClosePool(ctx, pool); err != nil { + t.Fatalf("failed to close pool: %v", err) + } +} + +func TestCreateConnection(t *testing.T) { + t.Parallel() + ctx := context.Background() + + server, teardown := setupMockSpannerServer(t) + defer teardown() + dsn := fmt.Sprintf("%s/projects/p/instances/i/databases/d?useplaintext=true", server.Address) + + client, cleanup := startTestSpannerLibServer(t) + defer cleanup() + + pool, err := client.CreatePool(ctx, &pb.CreatePoolRequest{ConnectionString: dsn}) + if err != nil { + t.Fatalf("failed to create pool: %v", err) + } + connection, err := client.CreateConnection(ctx, &pb.CreateConnectionRequest{Pool: pool}) + if err != nil { + t.Fatalf("failed to create connection: %v", err) + } + if connection.Id <= 0 { + t.Fatalf("connection id should be greater than zero") + } + + if _, err := client.CloseConnection(ctx, connection); err != nil { + t.Fatalf("failed to close connection: %v", err) + } + if _, err := client.ClosePool(ctx, pool); err != nil { + t.Fatalf("failed to close pool: %v", err) + } +} + +func TestExecute(t *testing.T) { + t.Parallel() + ctx := context.Background() + + server, teardown := setupMockSpannerServer(t) + defer teardown() + dsn := fmt.Sprintf("%s/projects/p/instances/i/databases/d?useplaintext=true", server.Address) + + client, cleanup := startTestSpannerLibServer(t) + defer cleanup() + + pool, err := client.CreatePool(ctx, &pb.CreatePoolRequest{ConnectionString: dsn}) + if err != nil { + t.Fatalf("failed to create pool: %v", err) + } + connection, err := client.CreateConnection(ctx, &pb.CreateConnectionRequest{Pool: pool}) + if err != nil { + t.Fatalf("failed to create connection: %v", err) + } + rows, err := client.Execute(ctx, &pb.ExecuteRequest{ + Connection: connection, + ExecuteSqlRequest: &sppb.ExecuteSqlRequest{Sql: testutil.SelectFooFromBar}, + }) + if err != nil { + t.Fatalf("failed to execute: %v", err) + } + metadata, err := client.Metadata(ctx, rows) + if err != nil { + t.Fatalf("failed to get metadata: %v", err) + } + if g, w := len(metadata.RowType.Fields), 1; g != w { + t.Fatalf("num fields mismatch\n Got: %d\nWant: %d", g, w) + } + + numRows := 0 + for { + row, err := client.Next(ctx, &pb.NextRequest{Rows: rows, NumRows: 1}) + if err != nil { + t.Fatalf("failed to fetch next row: %v", err) + } + if row.Values == nil { + break + } + if g, w := len(row.Values), 1; g != w { + t.Fatalf("num values mismatch\n Got: %v\nWant: %v", g, w) + } + numRows++ + } + if g, w := numRows, 2; g != w { + t.Fatalf("num rows mismatch\n Got: %v\nWant: %v", g, w) + } + stats, err := client.ResultSetStats(ctx, rows) + if err != nil { + t.Fatalf("failed to get stats: %v", err) + } + if g, w := stats.GetRowCountExact(), int64(0); g != w { + t.Fatalf("row count mismatch\n Got: %v\nWant: %v", g, w) + } + if _, err := client.CloseRows(ctx, rows); err != nil { + t.Fatalf("failed to close rows: %v", err) + } + + if _, err := client.ClosePool(ctx, pool); err != nil { + t.Fatalf("failed to close pool: %v", err) + } +} + +func TestExecuteStreaming(t *testing.T) { + t.Parallel() + ctx := context.Background() + + server, teardown := setupMockSpannerServer(t) + defer teardown() + dsn := fmt.Sprintf("%s/projects/p/instances/i/databases/d?useplaintext=true", server.Address) + + client, cleanup := startTestSpannerLibServer(t) + defer cleanup() + + pool, err := client.CreatePool(ctx, &pb.CreatePoolRequest{ConnectionString: dsn}) + if err != nil { + t.Fatalf("failed to create pool: %v", err) + } + connection, err := client.CreateConnection(ctx, &pb.CreateConnectionRequest{Pool: pool}) + if err != nil { + t.Fatalf("failed to create connection: %v", err) + } + stream, err := client.ExecuteStreaming(ctx, &pb.ExecuteRequest{ + Connection: connection, + ExecuteSqlRequest: &sppb.ExecuteSqlRequest{Sql: testutil.SelectFooFromBar}, + }) + if err != nil { + t.Fatalf("failed to execute: %v", err) + } + numRows := 0 + for { + row, err := stream.Recv() + if err != nil { + t.Fatalf("failed to receive row: %v", err) + } + if len(row.Data) == 0 { + break + } + if g, w := len(row.Data), 1; g != w { + t.Fatalf("num rows mismatch\n Got: %v\nWant: %v", g, w) + } + if g, w := len(row.Data[0].Values), 1; g != w { + t.Fatalf("num values mismatch\n Got: %v\nWant: %v", g, w) + } + numRows++ + } + if g, w := numRows, 2; g != w { + t.Fatalf("num rows mismatch\n Got: %v\nWant: %v", g, w) + } + + if _, err := client.ClosePool(ctx, pool); err != nil { + t.Fatalf("failed to close pool: %v", err) + } +} + +func TestExecuteStreamingClientSideStatement(t *testing.T) { + t.Parallel() + ctx := context.Background() + + server, teardown := setupMockSpannerServer(t) + defer teardown() + dsn := fmt.Sprintf("%s/projects/p/instances/i/databases/d?useplaintext=true", server.Address) + + client, cleanup := startTestSpannerLibServer(t) + defer cleanup() + + pool, err := client.CreatePool(ctx, &pb.CreatePoolRequest{ConnectionString: dsn}) + if err != nil { + t.Fatalf("failed to create pool: %v", err) + } + connection, err := client.CreateConnection(ctx, &pb.CreateConnectionRequest{Pool: pool}) + if err != nil { + t.Fatalf("failed to create connection: %v", err) + } + stream, err := client.ExecuteStreaming(ctx, &pb.ExecuteRequest{ + Connection: connection, + ExecuteSqlRequest: &sppb.ExecuteSqlRequest{Sql: "begin"}, + }) + if err != nil { + t.Fatalf("failed to execute: %v", err) + } + for { + row, err := stream.Recv() + if err != nil { + t.Fatalf("failed to receive row: %v", err) + } + if len(row.Data) == 0 { + break + } + } + stream, err = client.ExecuteStreaming(context.Background(), &pb.ExecuteRequest{ + Connection: connection, + ExecuteSqlRequest: &sppb.ExecuteSqlRequest{Sql: "commit"}, + }) + if err != nil { + t.Fatalf("failed to execute: %v", err) + } + for { + row, err := stream.Recv() + if err != nil { + t.Fatalf("failed to receive row: %v", err) + } + if len(row.Data) == 0 { + break + } + } + + if _, err := client.ClosePool(ctx, pool); err != nil { + t.Fatalf("failed to close pool: %v", err) + } +} + +func TestExecuteBatch(t *testing.T) { + t.Parallel() + ctx := context.Background() + + server, teardown := setupMockSpannerServer(t) + defer teardown() + dsn := fmt.Sprintf("%s/projects/p/instances/i/databases/d?useplaintext=true", server.Address) + + client, cleanup := startTestSpannerLibServer(t) + defer cleanup() + + pool, err := client.CreatePool(ctx, &pb.CreatePoolRequest{ConnectionString: dsn}) + if err != nil { + t.Fatalf("failed to create pool: %v", err) + } + connection, err := client.CreateConnection(ctx, &pb.CreateConnectionRequest{Pool: pool}) + if err != nil { + t.Fatalf("failed to create connection: %v", err) + } + + resp, err := client.ExecuteBatch(ctx, &pb.ExecuteBatchRequest{ + Connection: connection, + ExecuteBatchDmlRequest: &sppb.ExecuteBatchDmlRequest{ + Statements: []*sppb.ExecuteBatchDmlRequest_Statement{ + {Sql: testutil.UpdateBarSetFoo}, + {Sql: testutil.UpdateBarSetFoo}, + }, + }, + }) + if err != nil { + t.Fatalf("failed to execute batch: %v", err) + } + if g, w := len(resp.ResultSets), 2; g != w { + t.Fatalf("num results mismatch\n Got: %v\nWant: %v", g, w) + } + + if _, err := client.ClosePool(ctx, pool); err != nil { + t.Fatalf("failed to close pool: %v", err) + } +} + +func TestTransaction(t *testing.T) { + t.Parallel() + ctx := context.Background() + + server, teardown := setupMockSpannerServer(t) + defer teardown() + dsn := fmt.Sprintf("%s/projects/p/instances/i/databases/d?useplaintext=true", server.Address) + + client, cleanup := startTestSpannerLibServer(t) + defer cleanup() + + pool, err := client.CreatePool(ctx, &pb.CreatePoolRequest{ConnectionString: dsn}) + if err != nil { + t.Fatalf("failed to create pool: %v", err) + } + connection, err := client.CreateConnection(ctx, &pb.CreateConnectionRequest{Pool: pool}) + if err != nil { + t.Fatalf("failed to create connection: %v", err) + } + if _, err := client.BeginTransaction(ctx, &pb.BeginTransactionRequest{ + Connection: connection, + TransactionOptions: &sppb.TransactionOptions{}, + }); err != nil { + t.Fatalf("failed to begin transaction: %v", err) + } + rows, err := client.Execute(ctx, &pb.ExecuteRequest{ + Connection: connection, + ExecuteSqlRequest: &sppb.ExecuteSqlRequest{Sql: testutil.UpdateBarSetFoo}, + }) + if err != nil { + t.Fatalf("failed to execute: %v", err) + } + row, err := client.Next(ctx, &pb.NextRequest{Rows: rows, NumRows: 1}) + if err != nil { + t.Fatalf("failed to fetch next row: %v", err) + } + if row.Values != nil { + t.Fatalf("row values should be nil: %v", row.Values) + } + stats, err := client.ResultSetStats(ctx, rows) + if err != nil { + t.Fatalf("failed to get stats: %v", err) + } + if g, w := stats.GetRowCountExact(), int64(testutil.UpdateBarSetFooRowCount); g != w { + t.Fatalf("row count mismatch\n Got: %v\nWant: %v", g, w) + } + if _, err := client.CloseRows(ctx, rows); err != nil { + t.Fatalf("failed to close rows: %v", err) + } + if _, err := client.Commit(ctx, connection); err != nil { + t.Fatalf("failed to commit: %v", err) + } + + if _, err := client.ClosePool(ctx, pool); err != nil { + t.Fatalf("failed to close pool: %v", err) + } +} + +func TestRollback(t *testing.T) { + t.Parallel() + ctx := context.Background() + + server, teardown := setupMockSpannerServer(t) + defer teardown() + dsn := fmt.Sprintf("%s/projects/p/instances/i/databases/d?useplaintext=true", server.Address) + + client, cleanup := startTestSpannerLibServer(t) + defer cleanup() + + pool, err := client.CreatePool(ctx, &pb.CreatePoolRequest{ConnectionString: dsn}) + if err != nil { + t.Fatalf("failed to create pool: %v", err) + } + connection, err := client.CreateConnection(ctx, &pb.CreateConnectionRequest{Pool: pool}) + if err != nil { + t.Fatalf("failed to create connection: %v", err) + } + if _, err := client.BeginTransaction(ctx, &pb.BeginTransactionRequest{ + Connection: connection, + TransactionOptions: &sppb.TransactionOptions{}, + }); err != nil { + t.Fatalf("failed to begin transaction: %v", err) + } + rows, err := client.Execute(ctx, &pb.ExecuteRequest{ + Connection: connection, + ExecuteSqlRequest: &sppb.ExecuteSqlRequest{Sql: testutil.UpdateBarSetFoo}, + }) + if err != nil { + t.Fatalf("failed to execute: %v", err) + } + if _, err := client.CloseRows(ctx, rows); err != nil { + t.Fatalf("failed to close rows: %v", err) + } + if _, err := client.Rollback(ctx, connection); err != nil { + t.Fatalf("failed to rollback: %v", err) + } + + if _, err := client.ClosePool(ctx, pool); err != nil { + t.Fatalf("failed to close pool: %v", err) + } +} + +func TestWriteMutations(t *testing.T) { + t.Parallel() + ctx := context.Background() + + server, teardown := setupMockSpannerServer(t) + defer teardown() + dsn := fmt.Sprintf("%s/projects/p/instances/i/databases/d?useplaintext=true", server.Address) + + client, cleanup := startTestSpannerLibServer(t) + defer cleanup() + + pool, err := client.CreatePool(ctx, &pb.CreatePoolRequest{ConnectionString: dsn}) + if err != nil { + t.Fatalf("failed to create pool: %v", err) + } + connection, err := client.CreateConnection(ctx, &pb.CreateConnectionRequest{Pool: pool}) + if err != nil { + t.Fatalf("failed to create connection: %v", err) + } + resp, err := client.WriteMutations(ctx, &pb.WriteMutationsRequest{ + Connection: connection, + Mutations: &sppb.BatchWriteRequest_MutationGroup{ + Mutations: []*sppb.Mutation{ + {Operation: &sppb.Mutation_Update{ + Update: &sppb.Mutation_Write{ + Table: "my_table", + Columns: []string{"id", "value"}, + Values: []*structpb.ListValue{ + {Values: []*structpb.Value{ + {Kind: &structpb.Value_StringValue{StringValue: "1"}}, + {Kind: &structpb.Value_StringValue{StringValue: "One"}}, + }}, + {Values: []*structpb.Value{ + {Kind: &structpb.Value_StringValue{StringValue: "2"}}, + {Kind: &structpb.Value_StringValue{StringValue: "Two"}}, + }}, + }, + }, + }}, + }, + }, + }) + if err != nil { + t.Fatalf("failed to write mutations: %v", err) + } + if resp == nil { + t.Fatalf("response should not be nil") + } + if resp.CommitTimestamp == nil { + t.Fatalf("commit timestamp should not be nil") + } + + if _, err := client.ClosePool(ctx, pool); err != nil { + t.Fatalf("failed to close pool: %v", err) + } +} + +func startTestSpannerLibServer(t *testing.T) (client pb.SpannerLibClient, cleanup func()) { + var tp string + var name string + var protocol string + if runtime.GOOS == "windows" { + tp = "tcp" + name = "localhost:0" + protocol = "" + } else { + tp = "unix" + protocol = "unix://" + name = filepath.Join(os.TempDir(), fmt.Sprintf("spannerlib-%s", uuid.NewString())) + } + lis, err := net.Listen(tp, name) + if err != nil { + t.Fatalf("failed to listen: %v\n", err) + } + addr := lis.Addr().String() + var opts []grpc.ServerOption + grpcServer := grpc.NewServer(opts...) + + server := spannerLibServer{} + pb.RegisterSpannerLibServer(grpcServer, &server) + go func() { _ = grpcServer.Serve(lis) }() + + conn, err := grpc.NewClient( + fmt.Sprintf("%s%s", protocol, addr), + grpc.WithTransportCredentials(insecure.NewCredentials())) + if err != nil { + t.Fatalf("failed to create client connection: %v", err) + } + client = pb.NewSpannerLibClient(conn) + + cleanup = func() { + _ = conn.Close() + grpcServer.GracefulStop() + _ = os.Remove(name) + } + + return +} + +func setupMockSpannerServer(t *testing.T) (server *testutil.MockedSpannerInMemTestServer, teardown func()) { + return setupMockSpannerServerWithDialect(t, databasepb.DatabaseDialect_GOOGLE_STANDARD_SQL) +} + +func setupMockSpannerServerWithDialect(t *testing.T, dialect databasepb.DatabaseDialect) (server *testutil.MockedSpannerInMemTestServer, teardown func()) { + server, _, serverTeardown := testutil.NewMockedSpannerInMemTestServer(t) + server.SetupSelectDialectResult(dialect) + return server, serverTeardown +} diff --git a/spannerlib/shared/shared_lib.go b/spannerlib/shared/shared_lib.go index 8645f219..cef869d0 100644 --- a/spannerlib/shared/shared_lib.go +++ b/spannerlib/shared/shared_lib.go @@ -132,6 +132,8 @@ func WriteMutations(poolId, connectionId int64, mutationsBytes []byte) (int64, i // call the functions Metadata and Next to get respectively the metadata of the result // and the next row of results. // +// TODO: This function should also be able to return a ResultSet containing the first N rows, the metadata, and the stats. +// //export Execute func Execute(poolId, connectionId int64, statement []byte) (int64, int32, int64, int32, unsafe.Pointer) { ctx := context.Background() diff --git a/spannerlib/wrappers/spannerlib-java/pom.xml b/spannerlib/wrappers/spannerlib-java/pom.xml index 2b303271..d8549883 100644 --- a/spannerlib/wrappers/spannerlib-java/pom.xml +++ b/spannerlib/wrappers/spannerlib-java/pom.xml @@ -27,6 +27,20 @@ pom import + + com.google.protobuf + protobuf-bom + 4.32.1 + pom + import + + + io.grpc + grpc-bom + 1.75.0 + pom + import + @@ -35,6 +49,23 @@ com.google.api.grpc proto-google-cloud-spanner-v1 + + com.google.protobuf + protobuf-java + + + io.grpc + grpc-protobuf + + + io.grpc + grpc-stub + + + io.netty + netty-transport-native-epoll + 4.2.6.Final + net.java.dev.jna @@ -68,4 +99,16 @@ test + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + + **/v1/**/* + + + + diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/AbstractLibraryObject.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/AbstractLibraryObject.java index a9d23ade..23b51edf 100644 --- a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/AbstractLibraryObject.java +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/AbstractLibraryObject.java @@ -16,8 +16,6 @@ package com.google.cloud.spannerlib; -import com.google.cloud.spannerlib.internal.SpannerLibrary; - /** * {@link AbstractLibraryObject} is the base class for all objects that are created by SpannerLib, * such as {@link Pool} and {@link Connection}. diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/Connection.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/Connection.java index 18a9ca50..fcb0d58c 100644 --- a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/Connection.java +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/Connection.java @@ -16,28 +16,44 @@ package com.google.cloud.spannerlib; -import static com.google.cloud.spannerlib.internal.SpannerLibrary.executeAndRelease; - -import com.google.cloud.spannerlib.internal.MessageHandler; -import com.google.cloud.spannerlib.internal.WrappedGoBytes; -import com.google.protobuf.InvalidProtocolBufferException; import com.google.spanner.v1.BatchWriteRequest.MutationGroup; import com.google.spanner.v1.CommitResponse; import com.google.spanner.v1.ExecuteBatchDmlRequest; import com.google.spanner.v1.ExecuteBatchDmlResponse; import com.google.spanner.v1.ExecuteSqlRequest; import com.google.spanner.v1.TransactionOptions; -import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.List; /** A {@link Connection} that has been created by SpannerLib. */ public class Connection extends AbstractLibraryObject { private final Pool pool; + private final List streams = new ArrayList<>(); Connection(Pool pool, long id) { super(pool.getLibrary(), id); this.pool = pool; } + void registerStream(StreamingRows stream) { + this.streams.add(stream); + } + + void deregisterStream(StreamingRows stream) { + this.streams.remove(stream); + } + + /** Closes this connection. Any active transaction on the connection is rolled back. */ + @Override + public void close() { + synchronized (this.streams) { + for (StreamingRows stream : this.streams) { + stream.cancel("connection closed"); + } + } + getLibrary().closeConnection(this); + } + public Pool getPool() { return this.pool; } @@ -50,31 +66,12 @@ public Pool getPool() { * mutations were buffered in the current transaction. */ public CommitResponse WriteMutations(MutationGroup mutations) { - try (WrappedGoBytes serializedRequest = WrappedGoBytes.serialize(mutations); - MessageHandler message = - getLibrary() - .execute( - library -> - library.WriteMutations( - pool.getId(), getId(), serializedRequest.getGoBytes()))) { - if (message.getLength() == 0) { - return null; - } - ByteBuffer buffer = message.getValue().getByteBuffer(0, message.getLength()); - return CommitResponse.parseFrom(buffer); - } catch (InvalidProtocolBufferException decodeException) { - throw new RuntimeException(decodeException); - } + return getLibrary().writeMutations(this, mutations); } /** Starts a transaction on this connection. */ public void beginTransaction(TransactionOptions options) { - try (WrappedGoBytes serializedOptions = WrappedGoBytes.serialize(options)) { - executeAndRelease( - getLibrary(), - library -> - library.BeginTransaction(pool.getId(), getId(), serializedOptions.getGoBytes())); - } + getLibrary().beginTransaction(this, options); } /** @@ -82,34 +79,17 @@ public void beginTransaction(TransactionOptions options) { * null if there is no {@link CommitResponse} (e.g. for read-only transactions). */ public CommitResponse commit() { - try (MessageHandler message = - getLibrary().execute(library -> library.Commit(pool.getId(), getId()))) { - // Return null in case there is no CommitResponse. - if (message.getLength() == 0) { - return null; - } - ByteBuffer buffer = message.getValue().getByteBuffer(0, message.getLength()); - return CommitResponse.parseFrom(buffer); - } catch (InvalidProtocolBufferException decodeException) { - throw new RuntimeException(decodeException); - } + return getLibrary().commit(this); } /** Rollbacks the current transaction on this connection. */ public void rollback() { - executeAndRelease(getLibrary(), library -> library.Rollback(pool.getId(), getId())); + getLibrary().rollback(this); } /** Executes the given SQL statement on this connection. */ public Rows execute(ExecuteSqlRequest request) { - try (WrappedGoBytes serializedRequest = WrappedGoBytes.serialize(request); - MessageHandler message = - getLibrary() - .execute( - library -> - library.Execute(pool.getId(), getId(), serializedRequest.getGoBytes()))) { - return new Rows(this, message.getObjectId()); - } + return getLibrary().execute(this, request); } /** @@ -117,23 +97,6 @@ public Rows execute(ExecuteSqlRequest request) { * be of the same type. */ public ExecuteBatchDmlResponse executeBatch(ExecuteBatchDmlRequest request) { - try (WrappedGoBytes serializedRequest = WrappedGoBytes.serialize(request); - MessageHandler message = - getLibrary() - .execute( - library -> - library.ExecuteBatch( - pool.getId(), getId(), serializedRequest.getGoBytes()))) { - ByteBuffer buffer = message.getValue().getByteBuffer(0, message.getLength()); - return ExecuteBatchDmlResponse.parseFrom(buffer); - } catch (InvalidProtocolBufferException decodeException) { - throw new RuntimeException(decodeException); - } - } - - /** Closes this connection. Any active transaction on the connection is rolled back. */ - @Override - public void close() { - executeAndRelease(getLibrary(), library -> library.CloseConnection(pool.getId(), getId())); + return getLibrary().executeBatch(this, request); } } diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/GrpcServer.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/GrpcServer.java new file mode 100644 index 00000000..99440ee0 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/GrpcServer.java @@ -0,0 +1,63 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spannerlib; + +import com.sun.jna.SpannerLibPlatformDetector; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URL; +import java.util.Scanner; + +/** This class starts a gRPC server containing SpannerLib as a child process. */ +class GrpcServer { + private Process process; + + GrpcServer() throws IOException {} + + /** Starts the SpannerLib gRPC server as a child process and returns the address of the server. */ + String start() throws IOException { + String prefix = SpannerLibPlatformDetector.getNativeLibraryResourcePrefix(); + String name = String.format("%s/grpc_server", prefix); + URL resource = ClassLoader.getSystemClassLoader().getResource(name); + if (resource == null) { + throw new IOException(String.format("Unable to find %s", name)); + } + String file = resource.getFile(); + ProcessBuilder processBuilder = new ProcessBuilder(); + processBuilder.command(file, "localhost:0", "tcp"); + processBuilder.redirectErrorStream(true); + process = processBuilder.start(); + try (Scanner scanner = new Scanner(new InputStreamReader(process.getInputStream()))) { + // Read the first line that the gRPC server prints out. + String log = scanner.nextLine(); + if (log.contains("Starting gRPC server on")) { + int lastSpace = log.lastIndexOf(" "); + return log.substring(lastSpace + 1); + } else { + throw new RuntimeException("Failed to read gRPC address"); + } + } + } + + /** Stops the child process. */ + void stop() { + if (process != null && process.isAlive()) { + process.destroy(); + process = null; + } + } +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/GrpcSpannerLibraryImpl.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/GrpcSpannerLibraryImpl.java new file mode 100644 index 00000000..ca546179 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/GrpcSpannerLibraryImpl.java @@ -0,0 +1,281 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spannerlib; + +import com.google.cloud.spannerlib.Rows.Encoding; +import com.google.cloud.spannerlib.v1.BeginTransactionRequest; +import com.google.cloud.spannerlib.v1.CreateConnectionRequest; +import com.google.cloud.spannerlib.v1.CreatePoolRequest; +import com.google.cloud.spannerlib.v1.ExecuteBatchRequest; +import com.google.cloud.spannerlib.v1.ExecuteRequest; +import com.google.cloud.spannerlib.v1.NextRequest; +import com.google.cloud.spannerlib.v1.RowData; +import com.google.cloud.spannerlib.v1.SpannerLibGrpc; +import com.google.cloud.spannerlib.v1.SpannerLibGrpc.SpannerLibBlockingV2Stub; +import com.google.cloud.spannerlib.v1.WriteMutationsRequest; +import com.google.protobuf.ListValue; +import com.google.rpc.Status; +import com.google.spanner.v1.BatchWriteRequest.MutationGroup; +import com.google.spanner.v1.CommitResponse; +import com.google.spanner.v1.ExecuteBatchDmlRequest; +import com.google.spanner.v1.ExecuteBatchDmlResponse; +import com.google.spanner.v1.ExecuteSqlRequest; +import com.google.spanner.v1.ResultSetMetadata; +import com.google.spanner.v1.ResultSetStats; +import com.google.spanner.v1.TransactionOptions; +import io.grpc.Channel; +import io.grpc.ManagedChannel; +import io.grpc.StatusException; +import io.grpc.stub.BlockingClientCall; + +/** This implementation communicates with SpannerLib through a gRPC interface. */ +public class GrpcSpannerLibraryImpl implements SpannerLibrary { + private final Channel channel; + private final SpannerLibBlockingV2Stub stub; + private final boolean useStreamingRows; + + public GrpcSpannerLibraryImpl(Channel channel, boolean useStreamingRows) { + this.channel = channel; + this.stub = SpannerLibGrpc.newBlockingV2Stub(channel); + this.useStreamingRows = useStreamingRows; + } + + static SpannerLibException toSpannerLibException(StatusException exception) { + String message = + exception.getStatus().getDescription() != null + ? exception.getStatus().getDescription() + : exception.getMessage(); + return new SpannerLibException( + Status.newBuilder() + .setCode(exception.getStatus().getCode().value()) + .setMessage(message) + .build()); + } + + private static com.google.cloud.spannerlib.v1.Pool toProto(Pool pool) { + return com.google.cloud.spannerlib.v1.Pool.newBuilder().setId(pool.getId()).build(); + } + + private static com.google.cloud.spannerlib.v1.Connection toProto(Connection connection) { + return com.google.cloud.spannerlib.v1.Connection.newBuilder() + .setPool(toProto(connection.getPool())) + .setId(connection.getId()) + .build(); + } + + private static com.google.cloud.spannerlib.v1.Rows toProto(Rows rows) { + return com.google.cloud.spannerlib.v1.Rows.newBuilder() + .setConnection(toProto(rows.getConnection())) + .setId(rows.getId()) + .build(); + } + + @Override + public void close() { + if (this.channel instanceof ManagedChannel) { + ((ManagedChannel) this.channel).shutdown(); + } + } + + @Override + public Pool createPool(String connectionString) { + try { + return new Pool( + this, + stub.createPool( + CreatePoolRequest.newBuilder().setConnectionString(connectionString).build()) + .getId()); + } catch (StatusException exception) { + throw toSpannerLibException(exception); + } + } + + @Override + public void closePool(Pool pool) { + try { + //noinspection ResultOfMethodCallIgnored + stub.closePool(toProto(pool)); + } catch (StatusException exception) { + throw toSpannerLibException(exception); + } + } + + @Override + public Connection createConnection(Pool pool) { + try { + return new Connection( + pool, + stub.createConnection(CreateConnectionRequest.newBuilder().setPool(toProto(pool)).build()) + .getId()); + } catch (StatusException exception) { + throw toSpannerLibException(exception); + } + } + + @Override + public void closeConnection(Connection connection) { + try { + //noinspection ResultOfMethodCallIgnored + stub.closeConnection(toProto(connection)); + } catch (StatusException exception) { + throw toSpannerLibException(exception); + } + } + + @Override + public CommitResponse writeMutations(Connection connection, MutationGroup mutations) { + try { + CommitResponse response = + stub.writeMutations( + WriteMutationsRequest.newBuilder() + .setConnection(toProto(connection)) + .setMutations(mutations) + .build()); + if (!response.hasCommitTimestamp()) { + return null; + } + return response; + } catch (StatusException exception) { + throw toSpannerLibException(exception); + } + } + + @Override + public void beginTransaction(Connection connection, TransactionOptions options) { + try { + //noinspection ResultOfMethodCallIgnored + stub.beginTransaction( + BeginTransactionRequest.newBuilder() + .setConnection(toProto(connection)) + .setTransactionOptions(options) + .build()); + } catch (StatusException exception) { + throw toSpannerLibException(exception); + } + } + + @Override + public CommitResponse commit(Connection connection) { + try { + return stub.commit(toProto(connection)); + } catch (StatusException exception) { + throw toSpannerLibException(exception); + } + } + + @Override + public void rollback(Connection connection) { + try { + //noinspection ResultOfMethodCallIgnored + stub.rollback(toProto(connection)); + } catch (StatusException exception) { + throw toSpannerLibException(exception); + } + } + + @Override + public Rows execute(Connection connection, ExecuteSqlRequest request) { + if (useStreamingRows) { + return executeStreaming(connection, request); + } + try { + return new Rows( + connection, + stub.execute( + ExecuteRequest.newBuilder() + .setConnection(toProto(connection)) + .setExecuteSqlRequest(request) + .build()) + .getId()); + } catch (StatusException exception) { + throw toSpannerLibException(exception); + } + } + + private Rows executeStreaming(Connection connection, ExecuteSqlRequest request) { + BlockingClientCall stream = + stub.executeStreaming( + ExecuteRequest.newBuilder() + .setConnection(toProto(connection)) + .setExecuteSqlRequest(request) + .build()); + StreamingRows rows = new StreamingRows(connection, stream); + connection.registerStream(rows); + return rows; + } + + @Override + public ResultSetMetadata getMetadata(Rows rows) { + try { + return stub.metadata(toProto(rows)); + } catch (StatusException exception) { + throw toSpannerLibException(exception); + } + } + + @Override + public ListValue next(Rows rows) { + try { + ListValue values = + stub.next( + NextRequest.newBuilder() + .setRows(toProto(rows)) + .setNumRows(1) + .setEncoding(Encoding.PROTOBUF.ordinal()) + .build()); + if (values.getValuesList().isEmpty()) { + return null; + } + return values; + } catch (StatusException exception) { + throw toSpannerLibException(exception); + } + } + + @Override + public ResultSetStats getResultSetStats(Rows rows) { + try { + return stub.resultSetStats(toProto(rows)); + } catch (StatusException exception) { + throw toSpannerLibException(exception); + } + } + + @Override + public void closeRows(Rows rows) { + try { + //noinspection ResultOfMethodCallIgnored + stub.closeRows(toProto(rows)); + } catch (StatusException exception) { + throw toSpannerLibException(exception); + } + } + + @Override + public ExecuteBatchDmlResponse executeBatch( + Connection connection, ExecuteBatchDmlRequest request) { + try { + return stub.executeBatch( + ExecuteBatchRequest.newBuilder() + .setConnection(toProto(connection)) + .setExecuteBatchDmlRequest(request) + .build()); + } catch (StatusException exception) { + throw toSpannerLibException(exception); + } + } +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/NativeSpannerLibraryImpl.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/NativeSpannerLibraryImpl.java new file mode 100644 index 00000000..1f0a1432 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/NativeSpannerLibraryImpl.java @@ -0,0 +1,240 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spannerlib; + +import static com.google.cloud.spannerlib.internal.SpannerLibrary.executeAndRelease; + +import com.google.cloud.spannerlib.Rows.Encoding; +import com.google.cloud.spannerlib.internal.GoString; +import com.google.cloud.spannerlib.internal.MessageHandler; +import com.google.cloud.spannerlib.internal.WrappedGoBytes; +import com.google.protobuf.InvalidProtocolBufferException; +import com.google.protobuf.ListValue; +import com.google.spanner.v1.BatchWriteRequest.MutationGroup; +import com.google.spanner.v1.CommitResponse; +import com.google.spanner.v1.ExecuteBatchDmlRequest; +import com.google.spanner.v1.ExecuteBatchDmlResponse; +import com.google.spanner.v1.ExecuteSqlRequest; +import com.google.spanner.v1.ResultSetMetadata; +import com.google.spanner.v1.ResultSetStats; +import com.google.spanner.v1.TransactionOptions; +import java.nio.ByteBuffer; + +/** This implementation communicates with SpannerLib using native library calls. */ +public class NativeSpannerLibraryImpl implements SpannerLibrary { + private static final NativeSpannerLibraryImpl INSTANCE = new NativeSpannerLibraryImpl(); + + public static NativeSpannerLibraryImpl getInstance() { + return INSTANCE; + } + + private final com.google.cloud.spannerlib.internal.SpannerLibrary library = + com.google.cloud.spannerlib.internal.SpannerLibrary.getInstance(); + + private NativeSpannerLibraryImpl() {} + + @Override + public void close() { + // no-op + } + + @Override + public Pool createPool(String connectionString) { + try (MessageHandler message = + library.execute(lib -> lib.CreatePool(new GoString(connectionString)))) { + return new Pool(this, message.getObjectId()); + } + } + + @Override + public void closePool(Pool pool) { + executeAndRelease(library, library -> library.ClosePool(pool.getId())); + } + + @Override + public Connection createConnection(Pool pool) { + try (MessageHandler message = + library.execute(library -> library.CreateConnection(pool.getId()))) { + return new Connection(pool, message.getObjectId()); + } + } + + @Override + public void closeConnection(Connection connection) { + executeAndRelease( + library, + library -> library.CloseConnection(connection.getPool().getId(), connection.getId())); + } + + @Override + public CommitResponse writeMutations(Connection connection, MutationGroup mutations) { + try (WrappedGoBytes serializedRequest = WrappedGoBytes.serialize(mutations); + MessageHandler message = + library.execute( + library -> + library.WriteMutations( + connection.getPool().getId(), + connection.getId(), + serializedRequest.getGoBytes()))) { + if (message.getLength() == 0) { + return null; + } + ByteBuffer buffer = message.getValue().getByteBuffer(0, message.getLength()); + return CommitResponse.parseFrom(buffer); + } catch (InvalidProtocolBufferException decodeException) { + throw new RuntimeException(decodeException); + } + } + + @Override + public void beginTransaction(Connection connection, TransactionOptions options) { + try (WrappedGoBytes serializedOptions = WrappedGoBytes.serialize(options)) { + executeAndRelease( + library, + library -> + library.BeginTransaction( + connection.getPool().getId(), + connection.getId(), + serializedOptions.getGoBytes())); + } + } + + @Override + public CommitResponse commit(Connection connection) { + try (MessageHandler message = + library.execute( + library -> library.Commit(connection.getPool().getId(), connection.getId()))) { + // Return null in case there is no CommitResponse. + if (message.getLength() == 0) { + return null; + } + ByteBuffer buffer = message.getValue().getByteBuffer(0, message.getLength()); + return CommitResponse.parseFrom(buffer); + } catch (InvalidProtocolBufferException decodeException) { + throw new RuntimeException(decodeException); + } + } + + @Override + public void rollback(Connection connection) { + executeAndRelease( + library, library -> library.Rollback(connection.getPool().getId(), connection.getId())); + } + + @Override + public Rows execute(Connection connection, ExecuteSqlRequest request) { + try (WrappedGoBytes serializedRequest = WrappedGoBytes.serialize(request); + MessageHandler message = + library.execute( + library -> + library.Execute( + connection.getPool().getId(), + connection.getId(), + serializedRequest.getGoBytes()))) { + return new Rows(connection, message.getObjectId()); + } + } + + @Override + public ResultSetMetadata getMetadata(Rows rows) { + try (MessageHandler message = + library.execute( + library -> + library.Metadata( + rows.getConnection().getPool().getId(), + rows.getConnection().getId(), + rows.getId()))) { + if (message.getLength() == 0) { + return ResultSetMetadata.getDefaultInstance(); + } + ByteBuffer buffer = message.getValue().getByteBuffer(0, message.getLength()); + return ResultSetMetadata.parseFrom(buffer); + } catch (InvalidProtocolBufferException decodeException) { + throw new RuntimeException(decodeException); + } + } + + @Override + public ListValue next(Rows rows) { + try (MessageHandler message = + library.execute( + library -> + library.Next( + rows.getConnection().getPool().getId(), + rows.getConnection().getId(), + rows.getId(), + /* numRows= */ 1, + Encoding.PROTOBUF.ordinal()))) { + // An empty message means that we have reached the end of the iterator. + if (message.getLength() == 0) { + return null; + } + ByteBuffer buffer = message.getValue().getByteBuffer(0, message.getLength()); + return ListValue.parseFrom(buffer); + } catch (InvalidProtocolBufferException decodeException) { + throw new RuntimeException(decodeException); + } + } + + @Override + public ResultSetStats getResultSetStats(Rows rows) { + try (MessageHandler message = + library.execute( + library -> + library.ResultSetStats( + rows.getConnection().getPool().getId(), + rows.getConnection().getId(), + rows.getId()))) { + if (message.getLength() == 0) { + return ResultSetStats.getDefaultInstance(); + } + ByteBuffer buffer = message.getValue().getByteBuffer(0, message.getLength()); + return ResultSetStats.parseFrom(buffer); + } catch (InvalidProtocolBufferException decodeException) { + throw new RuntimeException(decodeException); + } + } + + @Override + public void closeRows(Rows rows) { + executeAndRelease( + library, + library -> + library.CloseRows( + rows.getConnection().getPool().getId(), + rows.getConnection().getId(), + rows.getId())); + } + + @Override + public ExecuteBatchDmlResponse executeBatch( + Connection connection, ExecuteBatchDmlRequest request) { + try (WrappedGoBytes serializedRequest = WrappedGoBytes.serialize(request); + MessageHandler message = + library.execute( + library -> + library.ExecuteBatch( + connection.getPool().getId(), + connection.getId(), + serializedRequest.getGoBytes()))) { + ByteBuffer buffer = message.getValue().getByteBuffer(0, message.getLength()); + return ExecuteBatchDmlResponse.parseFrom(buffer); + } catch (InvalidProtocolBufferException decodeException) { + throw new RuntimeException(decodeException); + } + } +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/Pool.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/Pool.java index 2f2203a8..b6727808 100644 --- a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/Pool.java +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/Pool.java @@ -16,12 +16,6 @@ package com.google.cloud.spannerlib; -import static com.google.cloud.spannerlib.internal.SpannerLibrary.executeAndRelease; - -import com.google.cloud.spannerlib.internal.GoString; -import com.google.cloud.spannerlib.internal.MessageHandler; -import com.google.cloud.spannerlib.internal.SpannerLibrary; - /** * A {@link Pool} that has been created by SpannerLib. A {@link Pool} can create any number of * {@link Connection} instances. All {@link Connection} instances share the same underlying Spanner @@ -30,28 +24,21 @@ public class Pool extends AbstractLibraryObject { /** Creates a new {@link Pool} using the given connection string. */ - public static Pool createPool(String connectionString) { - SpannerLibrary library = SpannerLibrary.getInstance(); - try (MessageHandler message = - library.execute(lib -> lib.CreatePool(new GoString(connectionString)))) { - return new Pool(library, message.getObjectId()); - } + public static Pool createPool(SpannerLibrary library, String connectionString) { + return library.createPool(connectionString); } - private Pool(SpannerLibrary library, long id) { + Pool(SpannerLibrary library, long id) { super(library, id); } @Override public void close() { - executeAndRelease(getLibrary(), library -> library.ClosePool(getId())); + getLibrary().closePool(this); } /** Creates a new {@link Connection} in this {@link Pool}. */ public Connection createConnection() { - try (MessageHandler message = - getLibrary().execute(library -> library.CreateConnection(getId()))) { - return new Connection(this, message.getObjectId()); - } + return getLibrary().createConnection(this); } } diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/Rows.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/Rows.java index 6861891b..b1d4f959 100644 --- a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/Rows.java +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/Rows.java @@ -16,14 +16,9 @@ package com.google.cloud.spannerlib; -import static com.google.cloud.spannerlib.internal.SpannerLibrary.executeAndRelease; - -import com.google.cloud.spannerlib.internal.MessageHandler; -import com.google.protobuf.InvalidProtocolBufferException; import com.google.protobuf.ListValue; import com.google.spanner.v1.ResultSetMetadata; import com.google.spanner.v1.ResultSetStats; -import java.nio.ByteBuffer; import java.sql.Statement; public class Rows extends AbstractLibraryObject { @@ -38,44 +33,21 @@ public enum Encoding { this.connection = connection; } + public Connection getConnection() { + return connection; + } + @Override public void close() { - executeAndRelease( - getLibrary(), - library -> library.CloseRows(connection.getPool().getId(), connection.getId(), getId())); + getLibrary().closeRows(this); } public ResultSetMetadata getMetadata() { - try (MessageHandler message = - getLibrary() - .execute( - library -> - library.Metadata(connection.getPool().getId(), connection.getId(), getId()))) { - if (message.getLength() == 0) { - return ResultSetMetadata.getDefaultInstance(); - } - ByteBuffer buffer = message.getValue().getByteBuffer(0, message.getLength()); - return ResultSetMetadata.parseFrom(buffer); - } catch (InvalidProtocolBufferException decodeException) { - throw new RuntimeException(decodeException); - } + return getLibrary().getMetadata(this); } public ResultSetStats getResultSetStats() { - try (MessageHandler message = - getLibrary() - .execute( - library -> - library.ResultSetStats( - connection.getPool().getId(), connection.getId(), getId()))) { - if (message.getLength() == 0) { - return ResultSetStats.getDefaultInstance(); - } - ByteBuffer buffer = message.getValue().getByteBuffer(0, message.getLength()); - return ResultSetStats.parseFrom(buffer); - } catch (InvalidProtocolBufferException decodeException) { - throw new RuntimeException(decodeException); - } + return getLibrary().getResultSetStats(this); } public long getUpdateCount() { @@ -90,24 +62,6 @@ public long getUpdateCount() { /** Returns the next row in this {@link Rows} instance, or null if there are no more rows. */ public ListValue next() { - try (MessageHandler message = - getLibrary() - .execute( - library -> - library.Next( - connection.getPool().getId(), - connection.getId(), - getId(), - /* numRows= */ 1, - Encoding.PROTOBUF.ordinal()))) { - // An empty message means that we have reached the end of the iterator. - if (message.getLength() == 0) { - return null; - } - ByteBuffer buffer = message.getValue().getByteBuffer(0, message.getLength()); - return ListValue.parseFrom(buffer); - } catch (InvalidProtocolBufferException decodeException) { - throw new RuntimeException(decodeException); - } + return getLibrary().next(this); } } diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/SpannerLibrary.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/SpannerLibrary.java new file mode 100644 index 00000000..e9b1e76c --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/SpannerLibrary.java @@ -0,0 +1,63 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spannerlib; + +import com.google.protobuf.ListValue; +import com.google.spanner.v1.BatchWriteRequest.MutationGroup; +import com.google.spanner.v1.CommitResponse; +import com.google.spanner.v1.ExecuteBatchDmlRequest; +import com.google.spanner.v1.ExecuteBatchDmlResponse; +import com.google.spanner.v1.ExecuteSqlRequest; +import com.google.spanner.v1.ResultSetMetadata; +import com.google.spanner.v1.ResultSetStats; +import com.google.spanner.v1.TransactionOptions; +import java.io.Closeable; + +/** + * This is the generic interface that must be implemented by SpannerLib implementations that use the + * various supported communication models (e.g. shared library or gRPC). + */ +public interface SpannerLibrary extends Closeable { + + Pool createPool(String connectionString); + + void closePool(Pool pool); + + Connection createConnection(Pool pool); + + void closeConnection(Connection connection); + + CommitResponse writeMutations(Connection connection, MutationGroup mutations); + + void beginTransaction(Connection connection, TransactionOptions options); + + CommitResponse commit(Connection connection); + + void rollback(Connection connection); + + Rows execute(Connection connection, ExecuteSqlRequest request); + + ResultSetMetadata getMetadata(Rows rows); + + ListValue next(Rows rows); + + ResultSetStats getResultSetStats(Rows rows); + + void closeRows(Rows rows); + + ExecuteBatchDmlResponse executeBatch(Connection connection, ExecuteBatchDmlRequest request); +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/StreamingRows.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/StreamingRows.java new file mode 100644 index 00000000..f25000f5 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/StreamingRows.java @@ -0,0 +1,106 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spannerlib; + +import static com.google.cloud.spannerlib.GrpcSpannerLibraryImpl.toSpannerLibException; + +import com.google.cloud.spannerlib.v1.RowData; +import com.google.common.base.Preconditions; +import com.google.protobuf.ListValue; +import com.google.rpc.Code; +import com.google.spanner.v1.ResultSetMetadata; +import com.google.spanner.v1.ResultSetStats; +import io.grpc.StatusException; +import io.grpc.stub.BlockingClientCall; + +public class StreamingRows extends Rows { + private final BlockingClientCall stream; + private boolean done; + private ListValue pendingRow; + private ResultSetMetadata metadata; + private ResultSetStats stats; + + StreamingRows(Connection connection, BlockingClientCall stream) { + super(connection, 0L); + this.stream = Preconditions.checkNotNull(stream); + this.pendingRow = next(); + } + + @Override + public void close() { + if (done) { + return; + } + markDone(); + cancel("Rows closed"); + } + + void cancel(String message) { + this.stream.cancel(message, null); + } + + private void markDone() { + this.done = true; + getConnection().deregisterStream(this); + } + + @Override + public ListValue next() { + if (this.pendingRow != null) { + ListValue row = pendingRow; + this.pendingRow = null; + return row; + } + try { + RowData rowData = stream.read(); + if (rowData == null) { + markDone(); + return null; + } + if (rowData.hasMetadata()) { + this.metadata = rowData.getMetadata(); + } + if (rowData.hasStats()) { + this.stats = rowData.getStats(); + } + if (rowData.getDataCount() == 0) { + markDone(); + return null; + } + return rowData.getData(0); + } catch (StatusException exception) { + markDone(); + throw toSpannerLibException(exception); + } catch (InterruptedException exception) { + throw new SpannerLibException(Code.CANCELLED, "next() was cancelled", exception); + } + } + + @Override + public ResultSetMetadata getMetadata() { + return this.metadata; + } + + @Override + public ResultSetStats getResultSetStats() { + if (this.stats == null) { + throw new SpannerLibException( + Code.FAILED_PRECONDITION, "stats can only be fetched once all data has been fetched"); + } + return this.stats; + } +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/BeginTransactionRequest.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/BeginTransactionRequest.java new file mode 100644 index 00000000..39dd993d --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/BeginTransactionRequest.java @@ -0,0 +1,859 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +/** Protobuf type {@code google.spannerlib.v1.BeginTransactionRequest} */ +@com.google.protobuf.Generated +public final class BeginTransactionRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spannerlib.v1.BeginTransactionRequest) + BeginTransactionRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 32, + /* patch= */ 1, + /* suffix= */ "", + BeginTransactionRequest.class.getName()); + } + + // Use BeginTransactionRequest.newBuilder() to construct. + private BeginTransactionRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private BeginTransactionRequest() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_BeginTransactionRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_BeginTransactionRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.BeginTransactionRequest.class, + com.google.cloud.spannerlib.v1.BeginTransactionRequest.Builder.class); + } + + private int bitField0_; + public static final int CONNECTION_FIELD_NUMBER = 1; + private com.google.cloud.spannerlib.v1.Connection connection_; + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the connection field is set. + */ + @java.lang.Override + public boolean hasConnection() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The connection. + */ + @java.lang.Override + public com.google.cloud.spannerlib.v1.Connection getConnection() { + return connection_ == null + ? com.google.cloud.spannerlib.v1.Connection.getDefaultInstance() + : connection_; + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public com.google.cloud.spannerlib.v1.ConnectionOrBuilder getConnectionOrBuilder() { + return connection_ == null + ? com.google.cloud.spannerlib.v1.Connection.getDefaultInstance() + : connection_; + } + + public static final int TRANSACTION_OPTIONS_FIELD_NUMBER = 2; + private com.google.spanner.v1.TransactionOptions transactionOptions_; + + /** + * + * .google.spanner.v1.TransactionOptions transaction_options = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the transactionOptions field is set. + */ + @java.lang.Override + public boolean hasTransactionOptions() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * .google.spanner.v1.TransactionOptions transaction_options = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The transactionOptions. + */ + @java.lang.Override + public com.google.spanner.v1.TransactionOptions getTransactionOptions() { + return transactionOptions_ == null + ? com.google.spanner.v1.TransactionOptions.getDefaultInstance() + : transactionOptions_; + } + + /** + * + * .google.spanner.v1.TransactionOptions transaction_options = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public com.google.spanner.v1.TransactionOptionsOrBuilder getTransactionOptionsOrBuilder() { + return transactionOptions_ == null + ? com.google.spanner.v1.TransactionOptions.getDefaultInstance() + : transactionOptions_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(1, getConnection()); + } + if (((bitField0_ & 0x00000002) != 0)) { + output.writeMessage(2, getTransactionOptions()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getConnection()); + } + if (((bitField0_ & 0x00000002) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getTransactionOptions()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.cloud.spannerlib.v1.BeginTransactionRequest)) { + return super.equals(obj); + } + com.google.cloud.spannerlib.v1.BeginTransactionRequest other = + (com.google.cloud.spannerlib.v1.BeginTransactionRequest) obj; + + if (hasConnection() != other.hasConnection()) return false; + if (hasConnection()) { + if (!getConnection().equals(other.getConnection())) return false; + } + if (hasTransactionOptions() != other.hasTransactionOptions()) return false; + if (hasTransactionOptions()) { + if (!getTransactionOptions().equals(other.getTransactionOptions())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasConnection()) { + hash = (37 * hash) + CONNECTION_FIELD_NUMBER; + hash = (53 * hash) + getConnection().hashCode(); + } + if (hasTransactionOptions()) { + hash = (37 * hash) + TRANSACTION_OPTIONS_FIELD_NUMBER; + hash = (53 * hash) + getTransactionOptions().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.cloud.spannerlib.v1.BeginTransactionRequest parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.BeginTransactionRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.BeginTransactionRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.BeginTransactionRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.BeginTransactionRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.BeginTransactionRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.BeginTransactionRequest parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.BeginTransactionRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.BeginTransactionRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.BeginTransactionRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.BeginTransactionRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.BeginTransactionRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.cloud.spannerlib.v1.BeginTransactionRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** Protobuf type {@code google.spannerlib.v1.BeginTransactionRequest} */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spannerlib.v1.BeginTransactionRequest) + com.google.cloud.spannerlib.v1.BeginTransactionRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_BeginTransactionRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_BeginTransactionRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.BeginTransactionRequest.class, + com.google.cloud.spannerlib.v1.BeginTransactionRequest.Builder.class); + } + + // Construct using com.google.cloud.spannerlib.v1.BeginTransactionRequest.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetConnectionFieldBuilder(); + internalGetTransactionOptionsFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + connection_ = null; + if (connectionBuilder_ != null) { + connectionBuilder_.dispose(); + connectionBuilder_ = null; + } + transactionOptions_ = null; + if (transactionOptionsBuilder_ != null) { + transactionOptionsBuilder_.dispose(); + transactionOptionsBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_BeginTransactionRequest_descriptor; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.BeginTransactionRequest getDefaultInstanceForType() { + return com.google.cloud.spannerlib.v1.BeginTransactionRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.BeginTransactionRequest build() { + com.google.cloud.spannerlib.v1.BeginTransactionRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.BeginTransactionRequest buildPartial() { + com.google.cloud.spannerlib.v1.BeginTransactionRequest result = + new com.google.cloud.spannerlib.v1.BeginTransactionRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.cloud.spannerlib.v1.BeginTransactionRequest result) { + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.connection_ = connectionBuilder_ == null ? connection_ : connectionBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.transactionOptions_ = + transactionOptionsBuilder_ == null + ? transactionOptions_ + : transactionOptionsBuilder_.build(); + to_bitField0_ |= 0x00000002; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.cloud.spannerlib.v1.BeginTransactionRequest) { + return mergeFrom((com.google.cloud.spannerlib.v1.BeginTransactionRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.cloud.spannerlib.v1.BeginTransactionRequest other) { + if (other == com.google.cloud.spannerlib.v1.BeginTransactionRequest.getDefaultInstance()) + return this; + if (other.hasConnection()) { + mergeConnection(other.getConnection()); + } + if (other.hasTransactionOptions()) { + mergeTransactionOptions(other.getTransactionOptions()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + input.readMessage( + internalGetConnectionFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + input.readMessage( + internalGetTransactionOptionsFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.cloud.spannerlib.v1.Connection connection_; + private com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.Connection, + com.google.cloud.spannerlib.v1.Connection.Builder, + com.google.cloud.spannerlib.v1.ConnectionOrBuilder> + connectionBuilder_; + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the connection field is set. + */ + public boolean hasConnection() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The connection. + */ + public com.google.cloud.spannerlib.v1.Connection getConnection() { + if (connectionBuilder_ == null) { + return connection_ == null + ? com.google.cloud.spannerlib.v1.Connection.getDefaultInstance() + : connection_; + } else { + return connectionBuilder_.getMessage(); + } + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setConnection(com.google.cloud.spannerlib.v1.Connection value) { + if (connectionBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + connection_ = value; + } else { + connectionBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setConnection( + com.google.cloud.spannerlib.v1.Connection.Builder builderForValue) { + if (connectionBuilder_ == null) { + connection_ = builderForValue.build(); + } else { + connectionBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder mergeConnection(com.google.cloud.spannerlib.v1.Connection value) { + if (connectionBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0) + && connection_ != null + && connection_ != com.google.cloud.spannerlib.v1.Connection.getDefaultInstance()) { + getConnectionBuilder().mergeFrom(value); + } else { + connection_ = value; + } + } else { + connectionBuilder_.mergeFrom(value); + } + if (connection_ != null) { + bitField0_ |= 0x00000001; + onChanged(); + } + return this; + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder clearConnection() { + bitField0_ = (bitField0_ & ~0x00000001); + connection_ = null; + if (connectionBuilder_ != null) { + connectionBuilder_.dispose(); + connectionBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.cloud.spannerlib.v1.Connection.Builder getConnectionBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return internalGetConnectionFieldBuilder().getBuilder(); + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.cloud.spannerlib.v1.ConnectionOrBuilder getConnectionOrBuilder() { + if (connectionBuilder_ != null) { + return connectionBuilder_.getMessageOrBuilder(); + } else { + return connection_ == null + ? com.google.cloud.spannerlib.v1.Connection.getDefaultInstance() + : connection_; + } + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.Connection, + com.google.cloud.spannerlib.v1.Connection.Builder, + com.google.cloud.spannerlib.v1.ConnectionOrBuilder> + internalGetConnectionFieldBuilder() { + if (connectionBuilder_ == null) { + connectionBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.Connection, + com.google.cloud.spannerlib.v1.Connection.Builder, + com.google.cloud.spannerlib.v1.ConnectionOrBuilder>( + getConnection(), getParentForChildren(), isClean()); + connection_ = null; + } + return connectionBuilder_; + } + + private com.google.spanner.v1.TransactionOptions transactionOptions_; + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.TransactionOptions, + com.google.spanner.v1.TransactionOptions.Builder, + com.google.spanner.v1.TransactionOptionsOrBuilder> + transactionOptionsBuilder_; + + /** + * + * .google.spanner.v1.TransactionOptions transaction_options = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the transactionOptions field is set. + */ + public boolean hasTransactionOptions() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * .google.spanner.v1.TransactionOptions transaction_options = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The transactionOptions. + */ + public com.google.spanner.v1.TransactionOptions getTransactionOptions() { + if (transactionOptionsBuilder_ == null) { + return transactionOptions_ == null + ? com.google.spanner.v1.TransactionOptions.getDefaultInstance() + : transactionOptions_; + } else { + return transactionOptionsBuilder_.getMessage(); + } + } + + /** + * + * .google.spanner.v1.TransactionOptions transaction_options = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setTransactionOptions(com.google.spanner.v1.TransactionOptions value) { + if (transactionOptionsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + transactionOptions_ = value; + } else { + transactionOptionsBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * .google.spanner.v1.TransactionOptions transaction_options = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setTransactionOptions( + com.google.spanner.v1.TransactionOptions.Builder builderForValue) { + if (transactionOptionsBuilder_ == null) { + transactionOptions_ = builderForValue.build(); + } else { + transactionOptionsBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * .google.spanner.v1.TransactionOptions transaction_options = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder mergeTransactionOptions(com.google.spanner.v1.TransactionOptions value) { + if (transactionOptionsBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0) + && transactionOptions_ != null + && transactionOptions_ + != com.google.spanner.v1.TransactionOptions.getDefaultInstance()) { + getTransactionOptionsBuilder().mergeFrom(value); + } else { + transactionOptions_ = value; + } + } else { + transactionOptionsBuilder_.mergeFrom(value); + } + if (transactionOptions_ != null) { + bitField0_ |= 0x00000002; + onChanged(); + } + return this; + } + + /** + * + * .google.spanner.v1.TransactionOptions transaction_options = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder clearTransactionOptions() { + bitField0_ = (bitField0_ & ~0x00000002); + transactionOptions_ = null; + if (transactionOptionsBuilder_ != null) { + transactionOptionsBuilder_.dispose(); + transactionOptionsBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * .google.spanner.v1.TransactionOptions transaction_options = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.spanner.v1.TransactionOptions.Builder getTransactionOptionsBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return internalGetTransactionOptionsFieldBuilder().getBuilder(); + } + + /** + * + * .google.spanner.v1.TransactionOptions transaction_options = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.spanner.v1.TransactionOptionsOrBuilder getTransactionOptionsOrBuilder() { + if (transactionOptionsBuilder_ != null) { + return transactionOptionsBuilder_.getMessageOrBuilder(); + } else { + return transactionOptions_ == null + ? com.google.spanner.v1.TransactionOptions.getDefaultInstance() + : transactionOptions_; + } + } + + /** + * + * .google.spanner.v1.TransactionOptions transaction_options = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.TransactionOptions, + com.google.spanner.v1.TransactionOptions.Builder, + com.google.spanner.v1.TransactionOptionsOrBuilder> + internalGetTransactionOptionsFieldBuilder() { + if (transactionOptionsBuilder_ == null) { + transactionOptionsBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.TransactionOptions, + com.google.spanner.v1.TransactionOptions.Builder, + com.google.spanner.v1.TransactionOptionsOrBuilder>( + getTransactionOptions(), getParentForChildren(), isClean()); + transactionOptions_ = null; + } + return transactionOptionsBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.spannerlib.v1.BeginTransactionRequest) + } + + // @@protoc_insertion_point(class_scope:google.spannerlib.v1.BeginTransactionRequest) + private static final com.google.cloud.spannerlib.v1.BeginTransactionRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.cloud.spannerlib.v1.BeginTransactionRequest(); + } + + public static com.google.cloud.spannerlib.v1.BeginTransactionRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public BeginTransactionRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.BeginTransactionRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/BeginTransactionRequestOrBuilder.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/BeginTransactionRequestOrBuilder.java new file mode 100644 index 00000000..6e863d6d --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/BeginTransactionRequestOrBuilder.java @@ -0,0 +1,63 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +@com.google.protobuf.Generated +public interface BeginTransactionRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spannerlib.v1.BeginTransactionRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the connection field is set. + */ + boolean hasConnection(); + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The connection. + */ + com.google.cloud.spannerlib.v1.Connection getConnection(); + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + com.google.cloud.spannerlib.v1.ConnectionOrBuilder getConnectionOrBuilder(); + + /** + * + * .google.spanner.v1.TransactionOptions transaction_options = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the transactionOptions field is set. + */ + boolean hasTransactionOptions(); + + /** + * + * .google.spanner.v1.TransactionOptions transaction_options = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The transactionOptions. + */ + com.google.spanner.v1.TransactionOptions getTransactionOptions(); + + /** + * + * .google.spanner.v1.TransactionOptions transaction_options = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + com.google.spanner.v1.TransactionOptionsOrBuilder getTransactionOptionsOrBuilder(); +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/Connection.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/Connection.java new file mode 100644 index 00000000..9229ee71 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/Connection.java @@ -0,0 +1,656 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +/** Protobuf type {@code google.spannerlib.v1.Connection} */ +@com.google.protobuf.Generated +public final class Connection extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spannerlib.v1.Connection) + ConnectionOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 32, + /* patch= */ 1, + /* suffix= */ "", + Connection.class.getName()); + } + + // Use Connection.newBuilder() to construct. + private Connection(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private Connection() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_Connection_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_Connection_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.Connection.class, + com.google.cloud.spannerlib.v1.Connection.Builder.class); + } + + private int bitField0_; + public static final int POOL_FIELD_NUMBER = 1; + private com.google.cloud.spannerlib.v1.Pool pool_; + + /** + * .google.spannerlib.v1.Pool pool = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the pool field is set. + */ + @java.lang.Override + public boolean hasPool() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * .google.spannerlib.v1.Pool pool = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The pool. + */ + @java.lang.Override + public com.google.cloud.spannerlib.v1.Pool getPool() { + return pool_ == null ? com.google.cloud.spannerlib.v1.Pool.getDefaultInstance() : pool_; + } + + /** .google.spannerlib.v1.Pool pool = 1 [(.google.api.field_behavior) = REQUIRED]; */ + @java.lang.Override + public com.google.cloud.spannerlib.v1.PoolOrBuilder getPoolOrBuilder() { + return pool_ == null ? com.google.cloud.spannerlib.v1.Pool.getDefaultInstance() : pool_; + } + + public static final int ID_FIELD_NUMBER = 2; + private long id_ = 0L; + + /** + * int64 id = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The id. + */ + @java.lang.Override + public long getId() { + return id_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(1, getPool()); + } + if (id_ != 0L) { + output.writeInt64(2, id_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getPool()); + } + if (id_ != 0L) { + size += com.google.protobuf.CodedOutputStream.computeInt64Size(2, id_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.cloud.spannerlib.v1.Connection)) { + return super.equals(obj); + } + com.google.cloud.spannerlib.v1.Connection other = + (com.google.cloud.spannerlib.v1.Connection) obj; + + if (hasPool() != other.hasPool()) return false; + if (hasPool()) { + if (!getPool().equals(other.getPool())) return false; + } + if (getId() != other.getId()) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasPool()) { + hash = (37 * hash) + POOL_FIELD_NUMBER; + hash = (53 * hash) + getPool().hashCode(); + } + hash = (37 * hash) + ID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getId()); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.cloud.spannerlib.v1.Connection parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.Connection parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.Connection parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.Connection parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.Connection parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.Connection parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.Connection parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.Connection parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.Connection parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.Connection parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.Connection parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.Connection parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.cloud.spannerlib.v1.Connection prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** Protobuf type {@code google.spannerlib.v1.Connection} */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spannerlib.v1.Connection) + com.google.cloud.spannerlib.v1.ConnectionOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_Connection_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_Connection_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.Connection.class, + com.google.cloud.spannerlib.v1.Connection.Builder.class); + } + + // Construct using com.google.cloud.spannerlib.v1.Connection.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetPoolFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + pool_ = null; + if (poolBuilder_ != null) { + poolBuilder_.dispose(); + poolBuilder_ = null; + } + id_ = 0L; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_Connection_descriptor; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.Connection getDefaultInstanceForType() { + return com.google.cloud.spannerlib.v1.Connection.getDefaultInstance(); + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.Connection build() { + com.google.cloud.spannerlib.v1.Connection result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.Connection buildPartial() { + com.google.cloud.spannerlib.v1.Connection result = + new com.google.cloud.spannerlib.v1.Connection(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.cloud.spannerlib.v1.Connection result) { + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.pool_ = poolBuilder_ == null ? pool_ : poolBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.id_ = id_; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.cloud.spannerlib.v1.Connection) { + return mergeFrom((com.google.cloud.spannerlib.v1.Connection) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.cloud.spannerlib.v1.Connection other) { + if (other == com.google.cloud.spannerlib.v1.Connection.getDefaultInstance()) return this; + if (other.hasPool()) { + mergePool(other.getPool()); + } + if (other.getId() != 0L) { + setId(other.getId()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + input.readMessage(internalGetPoolFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 16: + { + id_ = input.readInt64(); + bitField0_ |= 0x00000002; + break; + } // case 16 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.cloud.spannerlib.v1.Pool pool_; + private com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.Pool, + com.google.cloud.spannerlib.v1.Pool.Builder, + com.google.cloud.spannerlib.v1.PoolOrBuilder> + poolBuilder_; + + /** + * .google.spannerlib.v1.Pool pool = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the pool field is set. + */ + public boolean hasPool() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * .google.spannerlib.v1.Pool pool = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The pool. + */ + public com.google.cloud.spannerlib.v1.Pool getPool() { + if (poolBuilder_ == null) { + return pool_ == null ? com.google.cloud.spannerlib.v1.Pool.getDefaultInstance() : pool_; + } else { + return poolBuilder_.getMessage(); + } + } + + /** + * .google.spannerlib.v1.Pool pool = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder setPool(com.google.cloud.spannerlib.v1.Pool value) { + if (poolBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + pool_ = value; + } else { + poolBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * .google.spannerlib.v1.Pool pool = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder setPool(com.google.cloud.spannerlib.v1.Pool.Builder builderForValue) { + if (poolBuilder_ == null) { + pool_ = builderForValue.build(); + } else { + poolBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * .google.spannerlib.v1.Pool pool = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder mergePool(com.google.cloud.spannerlib.v1.Pool value) { + if (poolBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0) + && pool_ != null + && pool_ != com.google.cloud.spannerlib.v1.Pool.getDefaultInstance()) { + getPoolBuilder().mergeFrom(value); + } else { + pool_ = value; + } + } else { + poolBuilder_.mergeFrom(value); + } + if (pool_ != null) { + bitField0_ |= 0x00000001; + onChanged(); + } + return this; + } + + /** + * .google.spannerlib.v1.Pool pool = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder clearPool() { + bitField0_ = (bitField0_ & ~0x00000001); + pool_ = null; + if (poolBuilder_ != null) { + poolBuilder_.dispose(); + poolBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * .google.spannerlib.v1.Pool pool = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public com.google.cloud.spannerlib.v1.Pool.Builder getPoolBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return internalGetPoolFieldBuilder().getBuilder(); + } + + /** + * .google.spannerlib.v1.Pool pool = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public com.google.cloud.spannerlib.v1.PoolOrBuilder getPoolOrBuilder() { + if (poolBuilder_ != null) { + return poolBuilder_.getMessageOrBuilder(); + } else { + return pool_ == null ? com.google.cloud.spannerlib.v1.Pool.getDefaultInstance() : pool_; + } + } + + /** + * .google.spannerlib.v1.Pool pool = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.Pool, + com.google.cloud.spannerlib.v1.Pool.Builder, + com.google.cloud.spannerlib.v1.PoolOrBuilder> + internalGetPoolFieldBuilder() { + if (poolBuilder_ == null) { + poolBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.Pool, + com.google.cloud.spannerlib.v1.Pool.Builder, + com.google.cloud.spannerlib.v1.PoolOrBuilder>( + getPool(), getParentForChildren(), isClean()); + pool_ = null; + } + return poolBuilder_; + } + + private long id_; + + /** + * int64 id = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The id. + */ + @java.lang.Override + public long getId() { + return id_; + } + + /** + * int64 id = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The id to set. + * @return This builder for chaining. + */ + public Builder setId(long value) { + + id_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * int64 id = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearId() { + bitField0_ = (bitField0_ & ~0x00000002); + id_ = 0L; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.spannerlib.v1.Connection) + } + + // @@protoc_insertion_point(class_scope:google.spannerlib.v1.Connection) + private static final com.google.cloud.spannerlib.v1.Connection DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.cloud.spannerlib.v1.Connection(); + } + + public static com.google.cloud.spannerlib.v1.Connection getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Connection parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.Connection getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ConnectionOrBuilder.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ConnectionOrBuilder.java new file mode 100644 index 00000000..f3331770 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ConnectionOrBuilder.java @@ -0,0 +1,37 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +@com.google.protobuf.Generated +public interface ConnectionOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spannerlib.v1.Connection) + com.google.protobuf.MessageOrBuilder { + + /** + * .google.spannerlib.v1.Pool pool = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the pool field is set. + */ + boolean hasPool(); + + /** + * .google.spannerlib.v1.Pool pool = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The pool. + */ + com.google.cloud.spannerlib.v1.Pool getPool(); + + /** .google.spannerlib.v1.Pool pool = 1 [(.google.api.field_behavior) = REQUIRED]; */ + com.google.cloud.spannerlib.v1.PoolOrBuilder getPoolOrBuilder(); + + /** + * int64 id = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The id. + */ + long getId(); +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ConnectionStreamRequest.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ConnectionStreamRequest.java new file mode 100644 index 00000000..a339e3a0 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ConnectionStreamRequest.java @@ -0,0 +1,677 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +/** Protobuf type {@code google.spannerlib.v1.ConnectionStreamRequest} */ +@com.google.protobuf.Generated +public final class ConnectionStreamRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spannerlib.v1.ConnectionStreamRequest) + ConnectionStreamRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 32, + /* patch= */ 1, + /* suffix= */ "", + ConnectionStreamRequest.class.getName()); + } + + // Use ConnectionStreamRequest.newBuilder() to construct. + private ConnectionStreamRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ConnectionStreamRequest() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_ConnectionStreamRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_ConnectionStreamRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.ConnectionStreamRequest.class, + com.google.cloud.spannerlib.v1.ConnectionStreamRequest.Builder.class); + } + + private int requestCase_ = 0; + + @SuppressWarnings("serial") + private java.lang.Object request_; + + public enum RequestCase + implements + com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + EXECUTE_REQUEST(1), + REQUEST_NOT_SET(0); + private final int value; + + private RequestCase(int value) { + this.value = value; + } + + /** + * @param value The number of the enum to look for. + * @return The enum associated with the given number. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static RequestCase valueOf(int value) { + return forNumber(value); + } + + public static RequestCase forNumber(int value) { + switch (value) { + case 1: + return EXECUTE_REQUEST; + case 0: + return REQUEST_NOT_SET; + default: + return null; + } + } + + public int getNumber() { + return this.value; + } + }; + + public RequestCase getRequestCase() { + return RequestCase.forNumber(requestCase_); + } + + public static final int EXECUTE_REQUEST_FIELD_NUMBER = 1; + + /** + * .google.spannerlib.v1.ExecuteRequest execute_request = 1; + * + * @return Whether the executeRequest field is set. + */ + @java.lang.Override + public boolean hasExecuteRequest() { + return requestCase_ == 1; + } + + /** + * .google.spannerlib.v1.ExecuteRequest execute_request = 1; + * + * @return The executeRequest. + */ + @java.lang.Override + public com.google.cloud.spannerlib.v1.ExecuteRequest getExecuteRequest() { + if (requestCase_ == 1) { + return (com.google.cloud.spannerlib.v1.ExecuteRequest) request_; + } + return com.google.cloud.spannerlib.v1.ExecuteRequest.getDefaultInstance(); + } + + /** .google.spannerlib.v1.ExecuteRequest execute_request = 1; */ + @java.lang.Override + public com.google.cloud.spannerlib.v1.ExecuteRequestOrBuilder getExecuteRequestOrBuilder() { + if (requestCase_ == 1) { + return (com.google.cloud.spannerlib.v1.ExecuteRequest) request_; + } + return com.google.cloud.spannerlib.v1.ExecuteRequest.getDefaultInstance(); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (requestCase_ == 1) { + output.writeMessage(1, (com.google.cloud.spannerlib.v1.ExecuteRequest) request_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (requestCase_ == 1) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 1, (com.google.cloud.spannerlib.v1.ExecuteRequest) request_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.cloud.spannerlib.v1.ConnectionStreamRequest)) { + return super.equals(obj); + } + com.google.cloud.spannerlib.v1.ConnectionStreamRequest other = + (com.google.cloud.spannerlib.v1.ConnectionStreamRequest) obj; + + if (!getRequestCase().equals(other.getRequestCase())) return false; + switch (requestCase_) { + case 1: + if (!getExecuteRequest().equals(other.getExecuteRequest())) return false; + break; + case 0: + default: + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + switch (requestCase_) { + case 1: + hash = (37 * hash) + EXECUTE_REQUEST_FIELD_NUMBER; + hash = (53 * hash) + getExecuteRequest().hashCode(); + break; + case 0: + default: + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.cloud.spannerlib.v1.ConnectionStreamRequest parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.ConnectionStreamRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.ConnectionStreamRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.ConnectionStreamRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.ConnectionStreamRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.ConnectionStreamRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.ConnectionStreamRequest parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.ConnectionStreamRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.ConnectionStreamRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.ConnectionStreamRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.ConnectionStreamRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.ConnectionStreamRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.cloud.spannerlib.v1.ConnectionStreamRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** Protobuf type {@code google.spannerlib.v1.ConnectionStreamRequest} */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spannerlib.v1.ConnectionStreamRequest) + com.google.cloud.spannerlib.v1.ConnectionStreamRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_ConnectionStreamRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_ConnectionStreamRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.ConnectionStreamRequest.class, + com.google.cloud.spannerlib.v1.ConnectionStreamRequest.Builder.class); + } + + // Construct using com.google.cloud.spannerlib.v1.ConnectionStreamRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + if (executeRequestBuilder_ != null) { + executeRequestBuilder_.clear(); + } + requestCase_ = 0; + request_ = null; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_ConnectionStreamRequest_descriptor; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.ConnectionStreamRequest getDefaultInstanceForType() { + return com.google.cloud.spannerlib.v1.ConnectionStreamRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.ConnectionStreamRequest build() { + com.google.cloud.spannerlib.v1.ConnectionStreamRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.ConnectionStreamRequest buildPartial() { + com.google.cloud.spannerlib.v1.ConnectionStreamRequest result = + new com.google.cloud.spannerlib.v1.ConnectionStreamRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + buildPartialOneofs(result); + onBuilt(); + return result; + } + + private void buildPartial0(com.google.cloud.spannerlib.v1.ConnectionStreamRequest result) { + int from_bitField0_ = bitField0_; + } + + private void buildPartialOneofs(com.google.cloud.spannerlib.v1.ConnectionStreamRequest result) { + result.requestCase_ = requestCase_; + result.request_ = this.request_; + if (requestCase_ == 1 && executeRequestBuilder_ != null) { + result.request_ = executeRequestBuilder_.build(); + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.cloud.spannerlib.v1.ConnectionStreamRequest) { + return mergeFrom((com.google.cloud.spannerlib.v1.ConnectionStreamRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.cloud.spannerlib.v1.ConnectionStreamRequest other) { + if (other == com.google.cloud.spannerlib.v1.ConnectionStreamRequest.getDefaultInstance()) + return this; + switch (other.getRequestCase()) { + case EXECUTE_REQUEST: + { + mergeExecuteRequest(other.getExecuteRequest()); + break; + } + case REQUEST_NOT_SET: + { + break; + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + input.readMessage( + internalGetExecuteRequestFieldBuilder().getBuilder(), extensionRegistry); + requestCase_ = 1; + break; + } // case 10 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int requestCase_ = 0; + private java.lang.Object request_; + + public RequestCase getRequestCase() { + return RequestCase.forNumber(requestCase_); + } + + public Builder clearRequest() { + requestCase_ = 0; + request_ = null; + onChanged(); + return this; + } + + private int bitField0_; + + private com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.ExecuteRequest, + com.google.cloud.spannerlib.v1.ExecuteRequest.Builder, + com.google.cloud.spannerlib.v1.ExecuteRequestOrBuilder> + executeRequestBuilder_; + + /** + * .google.spannerlib.v1.ExecuteRequest execute_request = 1; + * + * @return Whether the executeRequest field is set. + */ + @java.lang.Override + public boolean hasExecuteRequest() { + return requestCase_ == 1; + } + + /** + * .google.spannerlib.v1.ExecuteRequest execute_request = 1; + * + * @return The executeRequest. + */ + @java.lang.Override + public com.google.cloud.spannerlib.v1.ExecuteRequest getExecuteRequest() { + if (executeRequestBuilder_ == null) { + if (requestCase_ == 1) { + return (com.google.cloud.spannerlib.v1.ExecuteRequest) request_; + } + return com.google.cloud.spannerlib.v1.ExecuteRequest.getDefaultInstance(); + } else { + if (requestCase_ == 1) { + return executeRequestBuilder_.getMessage(); + } + return com.google.cloud.spannerlib.v1.ExecuteRequest.getDefaultInstance(); + } + } + + /** .google.spannerlib.v1.ExecuteRequest execute_request = 1; */ + public Builder setExecuteRequest(com.google.cloud.spannerlib.v1.ExecuteRequest value) { + if (executeRequestBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + request_ = value; + onChanged(); + } else { + executeRequestBuilder_.setMessage(value); + } + requestCase_ = 1; + return this; + } + + /** .google.spannerlib.v1.ExecuteRequest execute_request = 1; */ + public Builder setExecuteRequest( + com.google.cloud.spannerlib.v1.ExecuteRequest.Builder builderForValue) { + if (executeRequestBuilder_ == null) { + request_ = builderForValue.build(); + onChanged(); + } else { + executeRequestBuilder_.setMessage(builderForValue.build()); + } + requestCase_ = 1; + return this; + } + + /** .google.spannerlib.v1.ExecuteRequest execute_request = 1; */ + public Builder mergeExecuteRequest(com.google.cloud.spannerlib.v1.ExecuteRequest value) { + if (executeRequestBuilder_ == null) { + if (requestCase_ == 1 + && request_ != com.google.cloud.spannerlib.v1.ExecuteRequest.getDefaultInstance()) { + request_ = + com.google.cloud.spannerlib.v1.ExecuteRequest.newBuilder( + (com.google.cloud.spannerlib.v1.ExecuteRequest) request_) + .mergeFrom(value) + .buildPartial(); + } else { + request_ = value; + } + onChanged(); + } else { + if (requestCase_ == 1) { + executeRequestBuilder_.mergeFrom(value); + } else { + executeRequestBuilder_.setMessage(value); + } + } + requestCase_ = 1; + return this; + } + + /** .google.spannerlib.v1.ExecuteRequest execute_request = 1; */ + public Builder clearExecuteRequest() { + if (executeRequestBuilder_ == null) { + if (requestCase_ == 1) { + requestCase_ = 0; + request_ = null; + onChanged(); + } + } else { + if (requestCase_ == 1) { + requestCase_ = 0; + request_ = null; + } + executeRequestBuilder_.clear(); + } + return this; + } + + /** .google.spannerlib.v1.ExecuteRequest execute_request = 1; */ + public com.google.cloud.spannerlib.v1.ExecuteRequest.Builder getExecuteRequestBuilder() { + return internalGetExecuteRequestFieldBuilder().getBuilder(); + } + + /** .google.spannerlib.v1.ExecuteRequest execute_request = 1; */ + @java.lang.Override + public com.google.cloud.spannerlib.v1.ExecuteRequestOrBuilder getExecuteRequestOrBuilder() { + if ((requestCase_ == 1) && (executeRequestBuilder_ != null)) { + return executeRequestBuilder_.getMessageOrBuilder(); + } else { + if (requestCase_ == 1) { + return (com.google.cloud.spannerlib.v1.ExecuteRequest) request_; + } + return com.google.cloud.spannerlib.v1.ExecuteRequest.getDefaultInstance(); + } + } + + /** .google.spannerlib.v1.ExecuteRequest execute_request = 1; */ + private com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.ExecuteRequest, + com.google.cloud.spannerlib.v1.ExecuteRequest.Builder, + com.google.cloud.spannerlib.v1.ExecuteRequestOrBuilder> + internalGetExecuteRequestFieldBuilder() { + if (executeRequestBuilder_ == null) { + if (!(requestCase_ == 1)) { + request_ = com.google.cloud.spannerlib.v1.ExecuteRequest.getDefaultInstance(); + } + executeRequestBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.ExecuteRequest, + com.google.cloud.spannerlib.v1.ExecuteRequest.Builder, + com.google.cloud.spannerlib.v1.ExecuteRequestOrBuilder>( + (com.google.cloud.spannerlib.v1.ExecuteRequest) request_, + getParentForChildren(), + isClean()); + request_ = null; + } + requestCase_ = 1; + onChanged(); + return executeRequestBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.spannerlib.v1.ConnectionStreamRequest) + } + + // @@protoc_insertion_point(class_scope:google.spannerlib.v1.ConnectionStreamRequest) + private static final com.google.cloud.spannerlib.v1.ConnectionStreamRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.cloud.spannerlib.v1.ConnectionStreamRequest(); + } + + public static com.google.cloud.spannerlib.v1.ConnectionStreamRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ConnectionStreamRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.ConnectionStreamRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ConnectionStreamRequestOrBuilder.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ConnectionStreamRequestOrBuilder.java new file mode 100644 index 00000000..b5bce373 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ConnectionStreamRequestOrBuilder.java @@ -0,0 +1,32 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +@com.google.protobuf.Generated +public interface ConnectionStreamRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spannerlib.v1.ConnectionStreamRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * .google.spannerlib.v1.ExecuteRequest execute_request = 1; + * + * @return Whether the executeRequest field is set. + */ + boolean hasExecuteRequest(); + + /** + * .google.spannerlib.v1.ExecuteRequest execute_request = 1; + * + * @return The executeRequest. + */ + com.google.cloud.spannerlib.v1.ExecuteRequest getExecuteRequest(); + + /** .google.spannerlib.v1.ExecuteRequest execute_request = 1; */ + com.google.cloud.spannerlib.v1.ExecuteRequestOrBuilder getExecuteRequestOrBuilder(); + + com.google.cloud.spannerlib.v1.ConnectionStreamRequest.RequestCase getRequestCase(); +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ConnectionStreamResponse.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ConnectionStreamResponse.java new file mode 100644 index 00000000..e36bc15f --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ConnectionStreamResponse.java @@ -0,0 +1,676 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +/** Protobuf type {@code google.spannerlib.v1.ConnectionStreamResponse} */ +@com.google.protobuf.Generated +public final class ConnectionStreamResponse extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spannerlib.v1.ConnectionStreamResponse) + ConnectionStreamResponseOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 32, + /* patch= */ 1, + /* suffix= */ "", + ConnectionStreamResponse.class.getName()); + } + + // Use ConnectionStreamResponse.newBuilder() to construct. + private ConnectionStreamResponse(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ConnectionStreamResponse() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_ConnectionStreamResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_ConnectionStreamResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.ConnectionStreamResponse.class, + com.google.cloud.spannerlib.v1.ConnectionStreamResponse.Builder.class); + } + + private int responseCase_ = 0; + + @SuppressWarnings("serial") + private java.lang.Object response_; + + public enum ResponseCase + implements + com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + ROW(1), + RESPONSE_NOT_SET(0); + private final int value; + + private ResponseCase(int value) { + this.value = value; + } + + /** + * @param value The number of the enum to look for. + * @return The enum associated with the given number. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static ResponseCase valueOf(int value) { + return forNumber(value); + } + + public static ResponseCase forNumber(int value) { + switch (value) { + case 1: + return ROW; + case 0: + return RESPONSE_NOT_SET; + default: + return null; + } + } + + public int getNumber() { + return this.value; + } + }; + + public ResponseCase getResponseCase() { + return ResponseCase.forNumber(responseCase_); + } + + public static final int ROW_FIELD_NUMBER = 1; + + /** + * .google.spanner.v1.PartialResultSet row = 1; + * + * @return Whether the row field is set. + */ + @java.lang.Override + public boolean hasRow() { + return responseCase_ == 1; + } + + /** + * .google.spanner.v1.PartialResultSet row = 1; + * + * @return The row. + */ + @java.lang.Override + public com.google.spanner.v1.PartialResultSet getRow() { + if (responseCase_ == 1) { + return (com.google.spanner.v1.PartialResultSet) response_; + } + return com.google.spanner.v1.PartialResultSet.getDefaultInstance(); + } + + /** .google.spanner.v1.PartialResultSet row = 1; */ + @java.lang.Override + public com.google.spanner.v1.PartialResultSetOrBuilder getRowOrBuilder() { + if (responseCase_ == 1) { + return (com.google.spanner.v1.PartialResultSet) response_; + } + return com.google.spanner.v1.PartialResultSet.getDefaultInstance(); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (responseCase_ == 1) { + output.writeMessage(1, (com.google.spanner.v1.PartialResultSet) response_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (responseCase_ == 1) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 1, (com.google.spanner.v1.PartialResultSet) response_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.cloud.spannerlib.v1.ConnectionStreamResponse)) { + return super.equals(obj); + } + com.google.cloud.spannerlib.v1.ConnectionStreamResponse other = + (com.google.cloud.spannerlib.v1.ConnectionStreamResponse) obj; + + if (!getResponseCase().equals(other.getResponseCase())) return false; + switch (responseCase_) { + case 1: + if (!getRow().equals(other.getRow())) return false; + break; + case 0: + default: + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + switch (responseCase_) { + case 1: + hash = (37 * hash) + ROW_FIELD_NUMBER; + hash = (53 * hash) + getRow().hashCode(); + break; + case 0: + default: + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.cloud.spannerlib.v1.ConnectionStreamResponse parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.ConnectionStreamResponse parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.ConnectionStreamResponse parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.ConnectionStreamResponse parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.ConnectionStreamResponse parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.ConnectionStreamResponse parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.ConnectionStreamResponse parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.ConnectionStreamResponse parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.ConnectionStreamResponse parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.ConnectionStreamResponse parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.ConnectionStreamResponse parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.ConnectionStreamResponse parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.cloud.spannerlib.v1.ConnectionStreamResponse prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** Protobuf type {@code google.spannerlib.v1.ConnectionStreamResponse} */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spannerlib.v1.ConnectionStreamResponse) + com.google.cloud.spannerlib.v1.ConnectionStreamResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_ConnectionStreamResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_ConnectionStreamResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.ConnectionStreamResponse.class, + com.google.cloud.spannerlib.v1.ConnectionStreamResponse.Builder.class); + } + + // Construct using com.google.cloud.spannerlib.v1.ConnectionStreamResponse.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + if (rowBuilder_ != null) { + rowBuilder_.clear(); + } + responseCase_ = 0; + response_ = null; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_ConnectionStreamResponse_descriptor; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.ConnectionStreamResponse getDefaultInstanceForType() { + return com.google.cloud.spannerlib.v1.ConnectionStreamResponse.getDefaultInstance(); + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.ConnectionStreamResponse build() { + com.google.cloud.spannerlib.v1.ConnectionStreamResponse result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.ConnectionStreamResponse buildPartial() { + com.google.cloud.spannerlib.v1.ConnectionStreamResponse result = + new com.google.cloud.spannerlib.v1.ConnectionStreamResponse(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + buildPartialOneofs(result); + onBuilt(); + return result; + } + + private void buildPartial0(com.google.cloud.spannerlib.v1.ConnectionStreamResponse result) { + int from_bitField0_ = bitField0_; + } + + private void buildPartialOneofs( + com.google.cloud.spannerlib.v1.ConnectionStreamResponse result) { + result.responseCase_ = responseCase_; + result.response_ = this.response_; + if (responseCase_ == 1 && rowBuilder_ != null) { + result.response_ = rowBuilder_.build(); + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.cloud.spannerlib.v1.ConnectionStreamResponse) { + return mergeFrom((com.google.cloud.spannerlib.v1.ConnectionStreamResponse) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.cloud.spannerlib.v1.ConnectionStreamResponse other) { + if (other == com.google.cloud.spannerlib.v1.ConnectionStreamResponse.getDefaultInstance()) + return this; + switch (other.getResponseCase()) { + case ROW: + { + mergeRow(other.getRow()); + break; + } + case RESPONSE_NOT_SET: + { + break; + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + input.readMessage(internalGetRowFieldBuilder().getBuilder(), extensionRegistry); + responseCase_ = 1; + break; + } // case 10 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int responseCase_ = 0; + private java.lang.Object response_; + + public ResponseCase getResponseCase() { + return ResponseCase.forNumber(responseCase_); + } + + public Builder clearResponse() { + responseCase_ = 0; + response_ = null; + onChanged(); + return this; + } + + private int bitField0_; + + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.PartialResultSet, + com.google.spanner.v1.PartialResultSet.Builder, + com.google.spanner.v1.PartialResultSetOrBuilder> + rowBuilder_; + + /** + * .google.spanner.v1.PartialResultSet row = 1; + * + * @return Whether the row field is set. + */ + @java.lang.Override + public boolean hasRow() { + return responseCase_ == 1; + } + + /** + * .google.spanner.v1.PartialResultSet row = 1; + * + * @return The row. + */ + @java.lang.Override + public com.google.spanner.v1.PartialResultSet getRow() { + if (rowBuilder_ == null) { + if (responseCase_ == 1) { + return (com.google.spanner.v1.PartialResultSet) response_; + } + return com.google.spanner.v1.PartialResultSet.getDefaultInstance(); + } else { + if (responseCase_ == 1) { + return rowBuilder_.getMessage(); + } + return com.google.spanner.v1.PartialResultSet.getDefaultInstance(); + } + } + + /** .google.spanner.v1.PartialResultSet row = 1; */ + public Builder setRow(com.google.spanner.v1.PartialResultSet value) { + if (rowBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + response_ = value; + onChanged(); + } else { + rowBuilder_.setMessage(value); + } + responseCase_ = 1; + return this; + } + + /** .google.spanner.v1.PartialResultSet row = 1; */ + public Builder setRow(com.google.spanner.v1.PartialResultSet.Builder builderForValue) { + if (rowBuilder_ == null) { + response_ = builderForValue.build(); + onChanged(); + } else { + rowBuilder_.setMessage(builderForValue.build()); + } + responseCase_ = 1; + return this; + } + + /** .google.spanner.v1.PartialResultSet row = 1; */ + public Builder mergeRow(com.google.spanner.v1.PartialResultSet value) { + if (rowBuilder_ == null) { + if (responseCase_ == 1 + && response_ != com.google.spanner.v1.PartialResultSet.getDefaultInstance()) { + response_ = + com.google.spanner.v1.PartialResultSet.newBuilder( + (com.google.spanner.v1.PartialResultSet) response_) + .mergeFrom(value) + .buildPartial(); + } else { + response_ = value; + } + onChanged(); + } else { + if (responseCase_ == 1) { + rowBuilder_.mergeFrom(value); + } else { + rowBuilder_.setMessage(value); + } + } + responseCase_ = 1; + return this; + } + + /** .google.spanner.v1.PartialResultSet row = 1; */ + public Builder clearRow() { + if (rowBuilder_ == null) { + if (responseCase_ == 1) { + responseCase_ = 0; + response_ = null; + onChanged(); + } + } else { + if (responseCase_ == 1) { + responseCase_ = 0; + response_ = null; + } + rowBuilder_.clear(); + } + return this; + } + + /** .google.spanner.v1.PartialResultSet row = 1; */ + public com.google.spanner.v1.PartialResultSet.Builder getRowBuilder() { + return internalGetRowFieldBuilder().getBuilder(); + } + + /** .google.spanner.v1.PartialResultSet row = 1; */ + @java.lang.Override + public com.google.spanner.v1.PartialResultSetOrBuilder getRowOrBuilder() { + if ((responseCase_ == 1) && (rowBuilder_ != null)) { + return rowBuilder_.getMessageOrBuilder(); + } else { + if (responseCase_ == 1) { + return (com.google.spanner.v1.PartialResultSet) response_; + } + return com.google.spanner.v1.PartialResultSet.getDefaultInstance(); + } + } + + /** .google.spanner.v1.PartialResultSet row = 1; */ + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.PartialResultSet, + com.google.spanner.v1.PartialResultSet.Builder, + com.google.spanner.v1.PartialResultSetOrBuilder> + internalGetRowFieldBuilder() { + if (rowBuilder_ == null) { + if (!(responseCase_ == 1)) { + response_ = com.google.spanner.v1.PartialResultSet.getDefaultInstance(); + } + rowBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.PartialResultSet, + com.google.spanner.v1.PartialResultSet.Builder, + com.google.spanner.v1.PartialResultSetOrBuilder>( + (com.google.spanner.v1.PartialResultSet) response_, + getParentForChildren(), + isClean()); + response_ = null; + } + responseCase_ = 1; + onChanged(); + return rowBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.spannerlib.v1.ConnectionStreamResponse) + } + + // @@protoc_insertion_point(class_scope:google.spannerlib.v1.ConnectionStreamResponse) + private static final com.google.cloud.spannerlib.v1.ConnectionStreamResponse DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.cloud.spannerlib.v1.ConnectionStreamResponse(); + } + + public static com.google.cloud.spannerlib.v1.ConnectionStreamResponse getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ConnectionStreamResponse parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.ConnectionStreamResponse getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ConnectionStreamResponseOrBuilder.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ConnectionStreamResponseOrBuilder.java new file mode 100644 index 00000000..74d1fe30 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ConnectionStreamResponseOrBuilder.java @@ -0,0 +1,32 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +@com.google.protobuf.Generated +public interface ConnectionStreamResponseOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spannerlib.v1.ConnectionStreamResponse) + com.google.protobuf.MessageOrBuilder { + + /** + * .google.spanner.v1.PartialResultSet row = 1; + * + * @return Whether the row field is set. + */ + boolean hasRow(); + + /** + * .google.spanner.v1.PartialResultSet row = 1; + * + * @return The row. + */ + com.google.spanner.v1.PartialResultSet getRow(); + + /** .google.spanner.v1.PartialResultSet row = 1; */ + com.google.spanner.v1.PartialResultSetOrBuilder getRowOrBuilder(); + + com.google.cloud.spannerlib.v1.ConnectionStreamResponse.ResponseCase getResponseCase(); +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/CreateConnectionRequest.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/CreateConnectionRequest.java new file mode 100644 index 00000000..15cdccfa --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/CreateConnectionRequest.java @@ -0,0 +1,585 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +/** Protobuf type {@code google.spannerlib.v1.CreateConnectionRequest} */ +@com.google.protobuf.Generated +public final class CreateConnectionRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spannerlib.v1.CreateConnectionRequest) + CreateConnectionRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 32, + /* patch= */ 1, + /* suffix= */ "", + CreateConnectionRequest.class.getName()); + } + + // Use CreateConnectionRequest.newBuilder() to construct. + private CreateConnectionRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private CreateConnectionRequest() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_CreateConnectionRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_CreateConnectionRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.CreateConnectionRequest.class, + com.google.cloud.spannerlib.v1.CreateConnectionRequest.Builder.class); + } + + private int bitField0_; + public static final int POOL_FIELD_NUMBER = 1; + private com.google.cloud.spannerlib.v1.Pool pool_; + + /** + * .google.spannerlib.v1.Pool pool = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the pool field is set. + */ + @java.lang.Override + public boolean hasPool() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * .google.spannerlib.v1.Pool pool = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The pool. + */ + @java.lang.Override + public com.google.cloud.spannerlib.v1.Pool getPool() { + return pool_ == null ? com.google.cloud.spannerlib.v1.Pool.getDefaultInstance() : pool_; + } + + /** .google.spannerlib.v1.Pool pool = 1 [(.google.api.field_behavior) = REQUIRED]; */ + @java.lang.Override + public com.google.cloud.spannerlib.v1.PoolOrBuilder getPoolOrBuilder() { + return pool_ == null ? com.google.cloud.spannerlib.v1.Pool.getDefaultInstance() : pool_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(1, getPool()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getPool()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.cloud.spannerlib.v1.CreateConnectionRequest)) { + return super.equals(obj); + } + com.google.cloud.spannerlib.v1.CreateConnectionRequest other = + (com.google.cloud.spannerlib.v1.CreateConnectionRequest) obj; + + if (hasPool() != other.hasPool()) return false; + if (hasPool()) { + if (!getPool().equals(other.getPool())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasPool()) { + hash = (37 * hash) + POOL_FIELD_NUMBER; + hash = (53 * hash) + getPool().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.cloud.spannerlib.v1.CreateConnectionRequest parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.CreateConnectionRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.CreateConnectionRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.CreateConnectionRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.CreateConnectionRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.CreateConnectionRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.CreateConnectionRequest parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.CreateConnectionRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.CreateConnectionRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.CreateConnectionRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.CreateConnectionRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.CreateConnectionRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.cloud.spannerlib.v1.CreateConnectionRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** Protobuf type {@code google.spannerlib.v1.CreateConnectionRequest} */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spannerlib.v1.CreateConnectionRequest) + com.google.cloud.spannerlib.v1.CreateConnectionRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_CreateConnectionRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_CreateConnectionRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.CreateConnectionRequest.class, + com.google.cloud.spannerlib.v1.CreateConnectionRequest.Builder.class); + } + + // Construct using com.google.cloud.spannerlib.v1.CreateConnectionRequest.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetPoolFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + pool_ = null; + if (poolBuilder_ != null) { + poolBuilder_.dispose(); + poolBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_CreateConnectionRequest_descriptor; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.CreateConnectionRequest getDefaultInstanceForType() { + return com.google.cloud.spannerlib.v1.CreateConnectionRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.CreateConnectionRequest build() { + com.google.cloud.spannerlib.v1.CreateConnectionRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.CreateConnectionRequest buildPartial() { + com.google.cloud.spannerlib.v1.CreateConnectionRequest result = + new com.google.cloud.spannerlib.v1.CreateConnectionRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.cloud.spannerlib.v1.CreateConnectionRequest result) { + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.pool_ = poolBuilder_ == null ? pool_ : poolBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.cloud.spannerlib.v1.CreateConnectionRequest) { + return mergeFrom((com.google.cloud.spannerlib.v1.CreateConnectionRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.cloud.spannerlib.v1.CreateConnectionRequest other) { + if (other == com.google.cloud.spannerlib.v1.CreateConnectionRequest.getDefaultInstance()) + return this; + if (other.hasPool()) { + mergePool(other.getPool()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + input.readMessage(internalGetPoolFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000001; + break; + } // case 10 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.cloud.spannerlib.v1.Pool pool_; + private com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.Pool, + com.google.cloud.spannerlib.v1.Pool.Builder, + com.google.cloud.spannerlib.v1.PoolOrBuilder> + poolBuilder_; + + /** + * .google.spannerlib.v1.Pool pool = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the pool field is set. + */ + public boolean hasPool() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * .google.spannerlib.v1.Pool pool = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The pool. + */ + public com.google.cloud.spannerlib.v1.Pool getPool() { + if (poolBuilder_ == null) { + return pool_ == null ? com.google.cloud.spannerlib.v1.Pool.getDefaultInstance() : pool_; + } else { + return poolBuilder_.getMessage(); + } + } + + /** + * .google.spannerlib.v1.Pool pool = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder setPool(com.google.cloud.spannerlib.v1.Pool value) { + if (poolBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + pool_ = value; + } else { + poolBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * .google.spannerlib.v1.Pool pool = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder setPool(com.google.cloud.spannerlib.v1.Pool.Builder builderForValue) { + if (poolBuilder_ == null) { + pool_ = builderForValue.build(); + } else { + poolBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * .google.spannerlib.v1.Pool pool = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder mergePool(com.google.cloud.spannerlib.v1.Pool value) { + if (poolBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0) + && pool_ != null + && pool_ != com.google.cloud.spannerlib.v1.Pool.getDefaultInstance()) { + getPoolBuilder().mergeFrom(value); + } else { + pool_ = value; + } + } else { + poolBuilder_.mergeFrom(value); + } + if (pool_ != null) { + bitField0_ |= 0x00000001; + onChanged(); + } + return this; + } + + /** + * .google.spannerlib.v1.Pool pool = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder clearPool() { + bitField0_ = (bitField0_ & ~0x00000001); + pool_ = null; + if (poolBuilder_ != null) { + poolBuilder_.dispose(); + poolBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * .google.spannerlib.v1.Pool pool = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public com.google.cloud.spannerlib.v1.Pool.Builder getPoolBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return internalGetPoolFieldBuilder().getBuilder(); + } + + /** + * .google.spannerlib.v1.Pool pool = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public com.google.cloud.spannerlib.v1.PoolOrBuilder getPoolOrBuilder() { + if (poolBuilder_ != null) { + return poolBuilder_.getMessageOrBuilder(); + } else { + return pool_ == null ? com.google.cloud.spannerlib.v1.Pool.getDefaultInstance() : pool_; + } + } + + /** + * .google.spannerlib.v1.Pool pool = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.Pool, + com.google.cloud.spannerlib.v1.Pool.Builder, + com.google.cloud.spannerlib.v1.PoolOrBuilder> + internalGetPoolFieldBuilder() { + if (poolBuilder_ == null) { + poolBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.Pool, + com.google.cloud.spannerlib.v1.Pool.Builder, + com.google.cloud.spannerlib.v1.PoolOrBuilder>( + getPool(), getParentForChildren(), isClean()); + pool_ = null; + } + return poolBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.spannerlib.v1.CreateConnectionRequest) + } + + // @@protoc_insertion_point(class_scope:google.spannerlib.v1.CreateConnectionRequest) + private static final com.google.cloud.spannerlib.v1.CreateConnectionRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.cloud.spannerlib.v1.CreateConnectionRequest(); + } + + public static com.google.cloud.spannerlib.v1.CreateConnectionRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public CreateConnectionRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.CreateConnectionRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/CreateConnectionRequestOrBuilder.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/CreateConnectionRequestOrBuilder.java new file mode 100644 index 00000000..5384733a --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/CreateConnectionRequestOrBuilder.java @@ -0,0 +1,30 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +@com.google.protobuf.Generated +public interface CreateConnectionRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spannerlib.v1.CreateConnectionRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * .google.spannerlib.v1.Pool pool = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the pool field is set. + */ + boolean hasPool(); + + /** + * .google.spannerlib.v1.Pool pool = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The pool. + */ + com.google.cloud.spannerlib.v1.Pool getPool(); + + /** .google.spannerlib.v1.Pool pool = 1 [(.google.api.field_behavior) = REQUIRED]; */ + com.google.cloud.spannerlib.v1.PoolOrBuilder getPoolOrBuilder(); +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/CreatePoolRequest.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/CreatePoolRequest.java new file mode 100644 index 00000000..1bf9cc87 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/CreatePoolRequest.java @@ -0,0 +1,523 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +/** Protobuf type {@code google.spannerlib.v1.CreatePoolRequest} */ +@com.google.protobuf.Generated +public final class CreatePoolRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spannerlib.v1.CreatePoolRequest) + CreatePoolRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 32, + /* patch= */ 1, + /* suffix= */ "", + CreatePoolRequest.class.getName()); + } + + // Use CreatePoolRequest.newBuilder() to construct. + private CreatePoolRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private CreatePoolRequest() { + connectionString_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_CreatePoolRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_CreatePoolRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.CreatePoolRequest.class, + com.google.cloud.spannerlib.v1.CreatePoolRequest.Builder.class); + } + + public static final int CONNECTION_STRING_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object connectionString_ = ""; + + /** + * string connection_string = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The connectionString. + */ + @java.lang.Override + public java.lang.String getConnectionString() { + java.lang.Object ref = connectionString_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + connectionString_ = s; + return s; + } + } + + /** + * string connection_string = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for connectionString. + */ + @java.lang.Override + public com.google.protobuf.ByteString getConnectionStringBytes() { + java.lang.Object ref = connectionString_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + connectionString_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(connectionString_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, connectionString_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(connectionString_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, connectionString_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.cloud.spannerlib.v1.CreatePoolRequest)) { + return super.equals(obj); + } + com.google.cloud.spannerlib.v1.CreatePoolRequest other = + (com.google.cloud.spannerlib.v1.CreatePoolRequest) obj; + + if (!getConnectionString().equals(other.getConnectionString())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + CONNECTION_STRING_FIELD_NUMBER; + hash = (53 * hash) + getConnectionString().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.cloud.spannerlib.v1.CreatePoolRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.CreatePoolRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.CreatePoolRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.CreatePoolRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.CreatePoolRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.CreatePoolRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.CreatePoolRequest parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.CreatePoolRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.CreatePoolRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.CreatePoolRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.CreatePoolRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.CreatePoolRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.cloud.spannerlib.v1.CreatePoolRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** Protobuf type {@code google.spannerlib.v1.CreatePoolRequest} */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spannerlib.v1.CreatePoolRequest) + com.google.cloud.spannerlib.v1.CreatePoolRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_CreatePoolRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_CreatePoolRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.CreatePoolRequest.class, + com.google.cloud.spannerlib.v1.CreatePoolRequest.Builder.class); + } + + // Construct using com.google.cloud.spannerlib.v1.CreatePoolRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + connectionString_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_CreatePoolRequest_descriptor; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.CreatePoolRequest getDefaultInstanceForType() { + return com.google.cloud.spannerlib.v1.CreatePoolRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.CreatePoolRequest build() { + com.google.cloud.spannerlib.v1.CreatePoolRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.CreatePoolRequest buildPartial() { + com.google.cloud.spannerlib.v1.CreatePoolRequest result = + new com.google.cloud.spannerlib.v1.CreatePoolRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.cloud.spannerlib.v1.CreatePoolRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.connectionString_ = connectionString_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.cloud.spannerlib.v1.CreatePoolRequest) { + return mergeFrom((com.google.cloud.spannerlib.v1.CreatePoolRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.cloud.spannerlib.v1.CreatePoolRequest other) { + if (other == com.google.cloud.spannerlib.v1.CreatePoolRequest.getDefaultInstance()) + return this; + if (!other.getConnectionString().isEmpty()) { + connectionString_ = other.connectionString_; + bitField0_ |= 0x00000001; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + connectionString_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object connectionString_ = ""; + + /** + * string connection_string = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The connectionString. + */ + public java.lang.String getConnectionString() { + java.lang.Object ref = connectionString_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + connectionString_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * string connection_string = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for connectionString. + */ + public com.google.protobuf.ByteString getConnectionStringBytes() { + java.lang.Object ref = connectionString_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + connectionString_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * string connection_string = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The connectionString to set. + * @return This builder for chaining. + */ + public Builder setConnectionString(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + connectionString_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * string connection_string = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearConnectionString() { + connectionString_ = getDefaultInstance().getConnectionString(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * string connection_string = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The bytes for connectionString to set. + * @return This builder for chaining. + */ + public Builder setConnectionStringBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + connectionString_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.spannerlib.v1.CreatePoolRequest) + } + + // @@protoc_insertion_point(class_scope:google.spannerlib.v1.CreatePoolRequest) + private static final com.google.cloud.spannerlib.v1.CreatePoolRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.cloud.spannerlib.v1.CreatePoolRequest(); + } + + public static com.google.cloud.spannerlib.v1.CreatePoolRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public CreatePoolRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.CreatePoolRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/CreatePoolRequestOrBuilder.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/CreatePoolRequestOrBuilder.java new file mode 100644 index 00000000..ba58b808 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/CreatePoolRequestOrBuilder.java @@ -0,0 +1,27 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +@com.google.protobuf.Generated +public interface CreatePoolRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spannerlib.v1.CreatePoolRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * string connection_string = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The connectionString. + */ + java.lang.String getConnectionString(); + + /** + * string connection_string = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for connectionString. + */ + com.google.protobuf.ByteString getConnectionStringBytes(); +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ExecuteBatchRequest.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ExecuteBatchRequest.java new file mode 100644 index 00000000..360d4ee8 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ExecuteBatchRequest.java @@ -0,0 +1,862 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +/** Protobuf type {@code google.spannerlib.v1.ExecuteBatchRequest} */ +@com.google.protobuf.Generated +public final class ExecuteBatchRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spannerlib.v1.ExecuteBatchRequest) + ExecuteBatchRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 32, + /* patch= */ 1, + /* suffix= */ "", + ExecuteBatchRequest.class.getName()); + } + + // Use ExecuteBatchRequest.newBuilder() to construct. + private ExecuteBatchRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ExecuteBatchRequest() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_ExecuteBatchRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_ExecuteBatchRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.ExecuteBatchRequest.class, + com.google.cloud.spannerlib.v1.ExecuteBatchRequest.Builder.class); + } + + private int bitField0_; + public static final int CONNECTION_FIELD_NUMBER = 1; + private com.google.cloud.spannerlib.v1.Connection connection_; + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the connection field is set. + */ + @java.lang.Override + public boolean hasConnection() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The connection. + */ + @java.lang.Override + public com.google.cloud.spannerlib.v1.Connection getConnection() { + return connection_ == null + ? com.google.cloud.spannerlib.v1.Connection.getDefaultInstance() + : connection_; + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public com.google.cloud.spannerlib.v1.ConnectionOrBuilder getConnectionOrBuilder() { + return connection_ == null + ? com.google.cloud.spannerlib.v1.Connection.getDefaultInstance() + : connection_; + } + + public static final int EXECUTE_BATCH_DML_REQUEST_FIELD_NUMBER = 2; + private com.google.spanner.v1.ExecuteBatchDmlRequest executeBatchDmlRequest_; + + /** + * + * .google.spanner.v1.ExecuteBatchDmlRequest execute_batch_dml_request = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the executeBatchDmlRequest field is set. + */ + @java.lang.Override + public boolean hasExecuteBatchDmlRequest() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * .google.spanner.v1.ExecuteBatchDmlRequest execute_batch_dml_request = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The executeBatchDmlRequest. + */ + @java.lang.Override + public com.google.spanner.v1.ExecuteBatchDmlRequest getExecuteBatchDmlRequest() { + return executeBatchDmlRequest_ == null + ? com.google.spanner.v1.ExecuteBatchDmlRequest.getDefaultInstance() + : executeBatchDmlRequest_; + } + + /** + * + * .google.spanner.v1.ExecuteBatchDmlRequest execute_batch_dml_request = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public com.google.spanner.v1.ExecuteBatchDmlRequestOrBuilder + getExecuteBatchDmlRequestOrBuilder() { + return executeBatchDmlRequest_ == null + ? com.google.spanner.v1.ExecuteBatchDmlRequest.getDefaultInstance() + : executeBatchDmlRequest_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(1, getConnection()); + } + if (((bitField0_ & 0x00000002) != 0)) { + output.writeMessage(2, getExecuteBatchDmlRequest()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getConnection()); + } + if (((bitField0_ & 0x00000002) != 0)) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize(2, getExecuteBatchDmlRequest()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.cloud.spannerlib.v1.ExecuteBatchRequest)) { + return super.equals(obj); + } + com.google.cloud.spannerlib.v1.ExecuteBatchRequest other = + (com.google.cloud.spannerlib.v1.ExecuteBatchRequest) obj; + + if (hasConnection() != other.hasConnection()) return false; + if (hasConnection()) { + if (!getConnection().equals(other.getConnection())) return false; + } + if (hasExecuteBatchDmlRequest() != other.hasExecuteBatchDmlRequest()) return false; + if (hasExecuteBatchDmlRequest()) { + if (!getExecuteBatchDmlRequest().equals(other.getExecuteBatchDmlRequest())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasConnection()) { + hash = (37 * hash) + CONNECTION_FIELD_NUMBER; + hash = (53 * hash) + getConnection().hashCode(); + } + if (hasExecuteBatchDmlRequest()) { + hash = (37 * hash) + EXECUTE_BATCH_DML_REQUEST_FIELD_NUMBER; + hash = (53 * hash) + getExecuteBatchDmlRequest().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.cloud.spannerlib.v1.ExecuteBatchRequest parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.ExecuteBatchRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.ExecuteBatchRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.ExecuteBatchRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.ExecuteBatchRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.ExecuteBatchRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.ExecuteBatchRequest parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.ExecuteBatchRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.ExecuteBatchRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.ExecuteBatchRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.ExecuteBatchRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.ExecuteBatchRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.cloud.spannerlib.v1.ExecuteBatchRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** Protobuf type {@code google.spannerlib.v1.ExecuteBatchRequest} */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spannerlib.v1.ExecuteBatchRequest) + com.google.cloud.spannerlib.v1.ExecuteBatchRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_ExecuteBatchRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_ExecuteBatchRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.ExecuteBatchRequest.class, + com.google.cloud.spannerlib.v1.ExecuteBatchRequest.Builder.class); + } + + // Construct using com.google.cloud.spannerlib.v1.ExecuteBatchRequest.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetConnectionFieldBuilder(); + internalGetExecuteBatchDmlRequestFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + connection_ = null; + if (connectionBuilder_ != null) { + connectionBuilder_.dispose(); + connectionBuilder_ = null; + } + executeBatchDmlRequest_ = null; + if (executeBatchDmlRequestBuilder_ != null) { + executeBatchDmlRequestBuilder_.dispose(); + executeBatchDmlRequestBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_ExecuteBatchRequest_descriptor; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.ExecuteBatchRequest getDefaultInstanceForType() { + return com.google.cloud.spannerlib.v1.ExecuteBatchRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.ExecuteBatchRequest build() { + com.google.cloud.spannerlib.v1.ExecuteBatchRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.ExecuteBatchRequest buildPartial() { + com.google.cloud.spannerlib.v1.ExecuteBatchRequest result = + new com.google.cloud.spannerlib.v1.ExecuteBatchRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.cloud.spannerlib.v1.ExecuteBatchRequest result) { + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.connection_ = connectionBuilder_ == null ? connection_ : connectionBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.executeBatchDmlRequest_ = + executeBatchDmlRequestBuilder_ == null + ? executeBatchDmlRequest_ + : executeBatchDmlRequestBuilder_.build(); + to_bitField0_ |= 0x00000002; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.cloud.spannerlib.v1.ExecuteBatchRequest) { + return mergeFrom((com.google.cloud.spannerlib.v1.ExecuteBatchRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.cloud.spannerlib.v1.ExecuteBatchRequest other) { + if (other == com.google.cloud.spannerlib.v1.ExecuteBatchRequest.getDefaultInstance()) + return this; + if (other.hasConnection()) { + mergeConnection(other.getConnection()); + } + if (other.hasExecuteBatchDmlRequest()) { + mergeExecuteBatchDmlRequest(other.getExecuteBatchDmlRequest()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + input.readMessage( + internalGetConnectionFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + input.readMessage( + internalGetExecuteBatchDmlRequestFieldBuilder().getBuilder(), + extensionRegistry); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.cloud.spannerlib.v1.Connection connection_; + private com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.Connection, + com.google.cloud.spannerlib.v1.Connection.Builder, + com.google.cloud.spannerlib.v1.ConnectionOrBuilder> + connectionBuilder_; + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the connection field is set. + */ + public boolean hasConnection() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The connection. + */ + public com.google.cloud.spannerlib.v1.Connection getConnection() { + if (connectionBuilder_ == null) { + return connection_ == null + ? com.google.cloud.spannerlib.v1.Connection.getDefaultInstance() + : connection_; + } else { + return connectionBuilder_.getMessage(); + } + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setConnection(com.google.cloud.spannerlib.v1.Connection value) { + if (connectionBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + connection_ = value; + } else { + connectionBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setConnection( + com.google.cloud.spannerlib.v1.Connection.Builder builderForValue) { + if (connectionBuilder_ == null) { + connection_ = builderForValue.build(); + } else { + connectionBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder mergeConnection(com.google.cloud.spannerlib.v1.Connection value) { + if (connectionBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0) + && connection_ != null + && connection_ != com.google.cloud.spannerlib.v1.Connection.getDefaultInstance()) { + getConnectionBuilder().mergeFrom(value); + } else { + connection_ = value; + } + } else { + connectionBuilder_.mergeFrom(value); + } + if (connection_ != null) { + bitField0_ |= 0x00000001; + onChanged(); + } + return this; + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder clearConnection() { + bitField0_ = (bitField0_ & ~0x00000001); + connection_ = null; + if (connectionBuilder_ != null) { + connectionBuilder_.dispose(); + connectionBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.cloud.spannerlib.v1.Connection.Builder getConnectionBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return internalGetConnectionFieldBuilder().getBuilder(); + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.cloud.spannerlib.v1.ConnectionOrBuilder getConnectionOrBuilder() { + if (connectionBuilder_ != null) { + return connectionBuilder_.getMessageOrBuilder(); + } else { + return connection_ == null + ? com.google.cloud.spannerlib.v1.Connection.getDefaultInstance() + : connection_; + } + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.Connection, + com.google.cloud.spannerlib.v1.Connection.Builder, + com.google.cloud.spannerlib.v1.ConnectionOrBuilder> + internalGetConnectionFieldBuilder() { + if (connectionBuilder_ == null) { + connectionBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.Connection, + com.google.cloud.spannerlib.v1.Connection.Builder, + com.google.cloud.spannerlib.v1.ConnectionOrBuilder>( + getConnection(), getParentForChildren(), isClean()); + connection_ = null; + } + return connectionBuilder_; + } + + private com.google.spanner.v1.ExecuteBatchDmlRequest executeBatchDmlRequest_; + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.ExecuteBatchDmlRequest, + com.google.spanner.v1.ExecuteBatchDmlRequest.Builder, + com.google.spanner.v1.ExecuteBatchDmlRequestOrBuilder> + executeBatchDmlRequestBuilder_; + + /** + * + * .google.spanner.v1.ExecuteBatchDmlRequest execute_batch_dml_request = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the executeBatchDmlRequest field is set. + */ + public boolean hasExecuteBatchDmlRequest() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * .google.spanner.v1.ExecuteBatchDmlRequest execute_batch_dml_request = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The executeBatchDmlRequest. + */ + public com.google.spanner.v1.ExecuteBatchDmlRequest getExecuteBatchDmlRequest() { + if (executeBatchDmlRequestBuilder_ == null) { + return executeBatchDmlRequest_ == null + ? com.google.spanner.v1.ExecuteBatchDmlRequest.getDefaultInstance() + : executeBatchDmlRequest_; + } else { + return executeBatchDmlRequestBuilder_.getMessage(); + } + } + + /** + * + * .google.spanner.v1.ExecuteBatchDmlRequest execute_batch_dml_request = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setExecuteBatchDmlRequest(com.google.spanner.v1.ExecuteBatchDmlRequest value) { + if (executeBatchDmlRequestBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + executeBatchDmlRequest_ = value; + } else { + executeBatchDmlRequestBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * .google.spanner.v1.ExecuteBatchDmlRequest execute_batch_dml_request = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setExecuteBatchDmlRequest( + com.google.spanner.v1.ExecuteBatchDmlRequest.Builder builderForValue) { + if (executeBatchDmlRequestBuilder_ == null) { + executeBatchDmlRequest_ = builderForValue.build(); + } else { + executeBatchDmlRequestBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * .google.spanner.v1.ExecuteBatchDmlRequest execute_batch_dml_request = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder mergeExecuteBatchDmlRequest(com.google.spanner.v1.ExecuteBatchDmlRequest value) { + if (executeBatchDmlRequestBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0) + && executeBatchDmlRequest_ != null + && executeBatchDmlRequest_ + != com.google.spanner.v1.ExecuteBatchDmlRequest.getDefaultInstance()) { + getExecuteBatchDmlRequestBuilder().mergeFrom(value); + } else { + executeBatchDmlRequest_ = value; + } + } else { + executeBatchDmlRequestBuilder_.mergeFrom(value); + } + if (executeBatchDmlRequest_ != null) { + bitField0_ |= 0x00000002; + onChanged(); + } + return this; + } + + /** + * + * .google.spanner.v1.ExecuteBatchDmlRequest execute_batch_dml_request = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder clearExecuteBatchDmlRequest() { + bitField0_ = (bitField0_ & ~0x00000002); + executeBatchDmlRequest_ = null; + if (executeBatchDmlRequestBuilder_ != null) { + executeBatchDmlRequestBuilder_.dispose(); + executeBatchDmlRequestBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * .google.spanner.v1.ExecuteBatchDmlRequest execute_batch_dml_request = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.spanner.v1.ExecuteBatchDmlRequest.Builder getExecuteBatchDmlRequestBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return internalGetExecuteBatchDmlRequestFieldBuilder().getBuilder(); + } + + /** + * + * .google.spanner.v1.ExecuteBatchDmlRequest execute_batch_dml_request = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.spanner.v1.ExecuteBatchDmlRequestOrBuilder + getExecuteBatchDmlRequestOrBuilder() { + if (executeBatchDmlRequestBuilder_ != null) { + return executeBatchDmlRequestBuilder_.getMessageOrBuilder(); + } else { + return executeBatchDmlRequest_ == null + ? com.google.spanner.v1.ExecuteBatchDmlRequest.getDefaultInstance() + : executeBatchDmlRequest_; + } + } + + /** + * + * .google.spanner.v1.ExecuteBatchDmlRequest execute_batch_dml_request = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.ExecuteBatchDmlRequest, + com.google.spanner.v1.ExecuteBatchDmlRequest.Builder, + com.google.spanner.v1.ExecuteBatchDmlRequestOrBuilder> + internalGetExecuteBatchDmlRequestFieldBuilder() { + if (executeBatchDmlRequestBuilder_ == null) { + executeBatchDmlRequestBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.ExecuteBatchDmlRequest, + com.google.spanner.v1.ExecuteBatchDmlRequest.Builder, + com.google.spanner.v1.ExecuteBatchDmlRequestOrBuilder>( + getExecuteBatchDmlRequest(), getParentForChildren(), isClean()); + executeBatchDmlRequest_ = null; + } + return executeBatchDmlRequestBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.spannerlib.v1.ExecuteBatchRequest) + } + + // @@protoc_insertion_point(class_scope:google.spannerlib.v1.ExecuteBatchRequest) + private static final com.google.cloud.spannerlib.v1.ExecuteBatchRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.cloud.spannerlib.v1.ExecuteBatchRequest(); + } + + public static com.google.cloud.spannerlib.v1.ExecuteBatchRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ExecuteBatchRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.ExecuteBatchRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ExecuteBatchRequestOrBuilder.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ExecuteBatchRequestOrBuilder.java new file mode 100644 index 00000000..4a3fd110 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ExecuteBatchRequestOrBuilder.java @@ -0,0 +1,63 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +@com.google.protobuf.Generated +public interface ExecuteBatchRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spannerlib.v1.ExecuteBatchRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the connection field is set. + */ + boolean hasConnection(); + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The connection. + */ + com.google.cloud.spannerlib.v1.Connection getConnection(); + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + com.google.cloud.spannerlib.v1.ConnectionOrBuilder getConnectionOrBuilder(); + + /** + * + * .google.spanner.v1.ExecuteBatchDmlRequest execute_batch_dml_request = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the executeBatchDmlRequest field is set. + */ + boolean hasExecuteBatchDmlRequest(); + + /** + * + * .google.spanner.v1.ExecuteBatchDmlRequest execute_batch_dml_request = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The executeBatchDmlRequest. + */ + com.google.spanner.v1.ExecuteBatchDmlRequest getExecuteBatchDmlRequest(); + + /** + * + * .google.spanner.v1.ExecuteBatchDmlRequest execute_batch_dml_request = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + com.google.spanner.v1.ExecuteBatchDmlRequestOrBuilder getExecuteBatchDmlRequestOrBuilder(); +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ExecuteRequest.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ExecuteRequest.java new file mode 100644 index 00000000..9ed31ec0 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ExecuteRequest.java @@ -0,0 +1,856 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +/** Protobuf type {@code google.spannerlib.v1.ExecuteRequest} */ +@com.google.protobuf.Generated +public final class ExecuteRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spannerlib.v1.ExecuteRequest) + ExecuteRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 32, + /* patch= */ 1, + /* suffix= */ "", + ExecuteRequest.class.getName()); + } + + // Use ExecuteRequest.newBuilder() to construct. + private ExecuteRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ExecuteRequest() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_ExecuteRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_ExecuteRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.ExecuteRequest.class, + com.google.cloud.spannerlib.v1.ExecuteRequest.Builder.class); + } + + private int bitField0_; + public static final int CONNECTION_FIELD_NUMBER = 1; + private com.google.cloud.spannerlib.v1.Connection connection_; + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the connection field is set. + */ + @java.lang.Override + public boolean hasConnection() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The connection. + */ + @java.lang.Override + public com.google.cloud.spannerlib.v1.Connection getConnection() { + return connection_ == null + ? com.google.cloud.spannerlib.v1.Connection.getDefaultInstance() + : connection_; + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public com.google.cloud.spannerlib.v1.ConnectionOrBuilder getConnectionOrBuilder() { + return connection_ == null + ? com.google.cloud.spannerlib.v1.Connection.getDefaultInstance() + : connection_; + } + + public static final int EXECUTE_SQL_REQUEST_FIELD_NUMBER = 2; + private com.google.spanner.v1.ExecuteSqlRequest executeSqlRequest_; + + /** + * + * .google.spanner.v1.ExecuteSqlRequest execute_sql_request = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the executeSqlRequest field is set. + */ + @java.lang.Override + public boolean hasExecuteSqlRequest() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * .google.spanner.v1.ExecuteSqlRequest execute_sql_request = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The executeSqlRequest. + */ + @java.lang.Override + public com.google.spanner.v1.ExecuteSqlRequest getExecuteSqlRequest() { + return executeSqlRequest_ == null + ? com.google.spanner.v1.ExecuteSqlRequest.getDefaultInstance() + : executeSqlRequest_; + } + + /** + * + * .google.spanner.v1.ExecuteSqlRequest execute_sql_request = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public com.google.spanner.v1.ExecuteSqlRequestOrBuilder getExecuteSqlRequestOrBuilder() { + return executeSqlRequest_ == null + ? com.google.spanner.v1.ExecuteSqlRequest.getDefaultInstance() + : executeSqlRequest_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(1, getConnection()); + } + if (((bitField0_ & 0x00000002) != 0)) { + output.writeMessage(2, getExecuteSqlRequest()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getConnection()); + } + if (((bitField0_ & 0x00000002) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getExecuteSqlRequest()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.cloud.spannerlib.v1.ExecuteRequest)) { + return super.equals(obj); + } + com.google.cloud.spannerlib.v1.ExecuteRequest other = + (com.google.cloud.spannerlib.v1.ExecuteRequest) obj; + + if (hasConnection() != other.hasConnection()) return false; + if (hasConnection()) { + if (!getConnection().equals(other.getConnection())) return false; + } + if (hasExecuteSqlRequest() != other.hasExecuteSqlRequest()) return false; + if (hasExecuteSqlRequest()) { + if (!getExecuteSqlRequest().equals(other.getExecuteSqlRequest())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasConnection()) { + hash = (37 * hash) + CONNECTION_FIELD_NUMBER; + hash = (53 * hash) + getConnection().hashCode(); + } + if (hasExecuteSqlRequest()) { + hash = (37 * hash) + EXECUTE_SQL_REQUEST_FIELD_NUMBER; + hash = (53 * hash) + getExecuteSqlRequest().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.cloud.spannerlib.v1.ExecuteRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.ExecuteRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.ExecuteRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.ExecuteRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.ExecuteRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.ExecuteRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.ExecuteRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.ExecuteRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.ExecuteRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.ExecuteRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.ExecuteRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.ExecuteRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.cloud.spannerlib.v1.ExecuteRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** Protobuf type {@code google.spannerlib.v1.ExecuteRequest} */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spannerlib.v1.ExecuteRequest) + com.google.cloud.spannerlib.v1.ExecuteRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_ExecuteRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_ExecuteRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.ExecuteRequest.class, + com.google.cloud.spannerlib.v1.ExecuteRequest.Builder.class); + } + + // Construct using com.google.cloud.spannerlib.v1.ExecuteRequest.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetConnectionFieldBuilder(); + internalGetExecuteSqlRequestFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + connection_ = null; + if (connectionBuilder_ != null) { + connectionBuilder_.dispose(); + connectionBuilder_ = null; + } + executeSqlRequest_ = null; + if (executeSqlRequestBuilder_ != null) { + executeSqlRequestBuilder_.dispose(); + executeSqlRequestBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_ExecuteRequest_descriptor; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.ExecuteRequest getDefaultInstanceForType() { + return com.google.cloud.spannerlib.v1.ExecuteRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.ExecuteRequest build() { + com.google.cloud.spannerlib.v1.ExecuteRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.ExecuteRequest buildPartial() { + com.google.cloud.spannerlib.v1.ExecuteRequest result = + new com.google.cloud.spannerlib.v1.ExecuteRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.cloud.spannerlib.v1.ExecuteRequest result) { + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.connection_ = connectionBuilder_ == null ? connection_ : connectionBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.executeSqlRequest_ = + executeSqlRequestBuilder_ == null + ? executeSqlRequest_ + : executeSqlRequestBuilder_.build(); + to_bitField0_ |= 0x00000002; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.cloud.spannerlib.v1.ExecuteRequest) { + return mergeFrom((com.google.cloud.spannerlib.v1.ExecuteRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.cloud.spannerlib.v1.ExecuteRequest other) { + if (other == com.google.cloud.spannerlib.v1.ExecuteRequest.getDefaultInstance()) return this; + if (other.hasConnection()) { + mergeConnection(other.getConnection()); + } + if (other.hasExecuteSqlRequest()) { + mergeExecuteSqlRequest(other.getExecuteSqlRequest()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + input.readMessage( + internalGetConnectionFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + input.readMessage( + internalGetExecuteSqlRequestFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.cloud.spannerlib.v1.Connection connection_; + private com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.Connection, + com.google.cloud.spannerlib.v1.Connection.Builder, + com.google.cloud.spannerlib.v1.ConnectionOrBuilder> + connectionBuilder_; + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the connection field is set. + */ + public boolean hasConnection() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The connection. + */ + public com.google.cloud.spannerlib.v1.Connection getConnection() { + if (connectionBuilder_ == null) { + return connection_ == null + ? com.google.cloud.spannerlib.v1.Connection.getDefaultInstance() + : connection_; + } else { + return connectionBuilder_.getMessage(); + } + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setConnection(com.google.cloud.spannerlib.v1.Connection value) { + if (connectionBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + connection_ = value; + } else { + connectionBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setConnection( + com.google.cloud.spannerlib.v1.Connection.Builder builderForValue) { + if (connectionBuilder_ == null) { + connection_ = builderForValue.build(); + } else { + connectionBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder mergeConnection(com.google.cloud.spannerlib.v1.Connection value) { + if (connectionBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0) + && connection_ != null + && connection_ != com.google.cloud.spannerlib.v1.Connection.getDefaultInstance()) { + getConnectionBuilder().mergeFrom(value); + } else { + connection_ = value; + } + } else { + connectionBuilder_.mergeFrom(value); + } + if (connection_ != null) { + bitField0_ |= 0x00000001; + onChanged(); + } + return this; + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder clearConnection() { + bitField0_ = (bitField0_ & ~0x00000001); + connection_ = null; + if (connectionBuilder_ != null) { + connectionBuilder_.dispose(); + connectionBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.cloud.spannerlib.v1.Connection.Builder getConnectionBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return internalGetConnectionFieldBuilder().getBuilder(); + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.cloud.spannerlib.v1.ConnectionOrBuilder getConnectionOrBuilder() { + if (connectionBuilder_ != null) { + return connectionBuilder_.getMessageOrBuilder(); + } else { + return connection_ == null + ? com.google.cloud.spannerlib.v1.Connection.getDefaultInstance() + : connection_; + } + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.Connection, + com.google.cloud.spannerlib.v1.Connection.Builder, + com.google.cloud.spannerlib.v1.ConnectionOrBuilder> + internalGetConnectionFieldBuilder() { + if (connectionBuilder_ == null) { + connectionBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.Connection, + com.google.cloud.spannerlib.v1.Connection.Builder, + com.google.cloud.spannerlib.v1.ConnectionOrBuilder>( + getConnection(), getParentForChildren(), isClean()); + connection_ = null; + } + return connectionBuilder_; + } + + private com.google.spanner.v1.ExecuteSqlRequest executeSqlRequest_; + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.ExecuteSqlRequest, + com.google.spanner.v1.ExecuteSqlRequest.Builder, + com.google.spanner.v1.ExecuteSqlRequestOrBuilder> + executeSqlRequestBuilder_; + + /** + * + * .google.spanner.v1.ExecuteSqlRequest execute_sql_request = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the executeSqlRequest field is set. + */ + public boolean hasExecuteSqlRequest() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * .google.spanner.v1.ExecuteSqlRequest execute_sql_request = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The executeSqlRequest. + */ + public com.google.spanner.v1.ExecuteSqlRequest getExecuteSqlRequest() { + if (executeSqlRequestBuilder_ == null) { + return executeSqlRequest_ == null + ? com.google.spanner.v1.ExecuteSqlRequest.getDefaultInstance() + : executeSqlRequest_; + } else { + return executeSqlRequestBuilder_.getMessage(); + } + } + + /** + * + * .google.spanner.v1.ExecuteSqlRequest execute_sql_request = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setExecuteSqlRequest(com.google.spanner.v1.ExecuteSqlRequest value) { + if (executeSqlRequestBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + executeSqlRequest_ = value; + } else { + executeSqlRequestBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * .google.spanner.v1.ExecuteSqlRequest execute_sql_request = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setExecuteSqlRequest( + com.google.spanner.v1.ExecuteSqlRequest.Builder builderForValue) { + if (executeSqlRequestBuilder_ == null) { + executeSqlRequest_ = builderForValue.build(); + } else { + executeSqlRequestBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * .google.spanner.v1.ExecuteSqlRequest execute_sql_request = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder mergeExecuteSqlRequest(com.google.spanner.v1.ExecuteSqlRequest value) { + if (executeSqlRequestBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0) + && executeSqlRequest_ != null + && executeSqlRequest_ != com.google.spanner.v1.ExecuteSqlRequest.getDefaultInstance()) { + getExecuteSqlRequestBuilder().mergeFrom(value); + } else { + executeSqlRequest_ = value; + } + } else { + executeSqlRequestBuilder_.mergeFrom(value); + } + if (executeSqlRequest_ != null) { + bitField0_ |= 0x00000002; + onChanged(); + } + return this; + } + + /** + * + * .google.spanner.v1.ExecuteSqlRequest execute_sql_request = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder clearExecuteSqlRequest() { + bitField0_ = (bitField0_ & ~0x00000002); + executeSqlRequest_ = null; + if (executeSqlRequestBuilder_ != null) { + executeSqlRequestBuilder_.dispose(); + executeSqlRequestBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * .google.spanner.v1.ExecuteSqlRequest execute_sql_request = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.spanner.v1.ExecuteSqlRequest.Builder getExecuteSqlRequestBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return internalGetExecuteSqlRequestFieldBuilder().getBuilder(); + } + + /** + * + * .google.spanner.v1.ExecuteSqlRequest execute_sql_request = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.spanner.v1.ExecuteSqlRequestOrBuilder getExecuteSqlRequestOrBuilder() { + if (executeSqlRequestBuilder_ != null) { + return executeSqlRequestBuilder_.getMessageOrBuilder(); + } else { + return executeSqlRequest_ == null + ? com.google.spanner.v1.ExecuteSqlRequest.getDefaultInstance() + : executeSqlRequest_; + } + } + + /** + * + * .google.spanner.v1.ExecuteSqlRequest execute_sql_request = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.ExecuteSqlRequest, + com.google.spanner.v1.ExecuteSqlRequest.Builder, + com.google.spanner.v1.ExecuteSqlRequestOrBuilder> + internalGetExecuteSqlRequestFieldBuilder() { + if (executeSqlRequestBuilder_ == null) { + executeSqlRequestBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.ExecuteSqlRequest, + com.google.spanner.v1.ExecuteSqlRequest.Builder, + com.google.spanner.v1.ExecuteSqlRequestOrBuilder>( + getExecuteSqlRequest(), getParentForChildren(), isClean()); + executeSqlRequest_ = null; + } + return executeSqlRequestBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.spannerlib.v1.ExecuteRequest) + } + + // @@protoc_insertion_point(class_scope:google.spannerlib.v1.ExecuteRequest) + private static final com.google.cloud.spannerlib.v1.ExecuteRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.cloud.spannerlib.v1.ExecuteRequest(); + } + + public static com.google.cloud.spannerlib.v1.ExecuteRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ExecuteRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.ExecuteRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ExecuteRequestOrBuilder.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ExecuteRequestOrBuilder.java new file mode 100644 index 00000000..85167f60 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ExecuteRequestOrBuilder.java @@ -0,0 +1,63 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +@com.google.protobuf.Generated +public interface ExecuteRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spannerlib.v1.ExecuteRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the connection field is set. + */ + boolean hasConnection(); + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The connection. + */ + com.google.cloud.spannerlib.v1.Connection getConnection(); + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + com.google.cloud.spannerlib.v1.ConnectionOrBuilder getConnectionOrBuilder(); + + /** + * + * .google.spanner.v1.ExecuteSqlRequest execute_sql_request = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the executeSqlRequest field is set. + */ + boolean hasExecuteSqlRequest(); + + /** + * + * .google.spanner.v1.ExecuteSqlRequest execute_sql_request = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The executeSqlRequest. + */ + com.google.spanner.v1.ExecuteSqlRequest getExecuteSqlRequest(); + + /** + * + * .google.spanner.v1.ExecuteSqlRequest execute_sql_request = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + com.google.spanner.v1.ExecuteSqlRequestOrBuilder getExecuteSqlRequestOrBuilder(); +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/MetadataRequest.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/MetadataRequest.java new file mode 100644 index 00000000..f47988b6 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/MetadataRequest.java @@ -0,0 +1,583 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +/** Protobuf type {@code google.spannerlib.v1.MetadataRequest} */ +@com.google.protobuf.Generated +public final class MetadataRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spannerlib.v1.MetadataRequest) + MetadataRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 32, + /* patch= */ 1, + /* suffix= */ "", + MetadataRequest.class.getName()); + } + + // Use MetadataRequest.newBuilder() to construct. + private MetadataRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private MetadataRequest() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_MetadataRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_MetadataRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.MetadataRequest.class, + com.google.cloud.spannerlib.v1.MetadataRequest.Builder.class); + } + + private int bitField0_; + public static final int ROWS_FIELD_NUMBER = 1; + private com.google.cloud.spannerlib.v1.Rows rows_; + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the rows field is set. + */ + @java.lang.Override + public boolean hasRows() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The rows. + */ + @java.lang.Override + public com.google.cloud.spannerlib.v1.Rows getRows() { + return rows_ == null ? com.google.cloud.spannerlib.v1.Rows.getDefaultInstance() : rows_; + } + + /** .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; */ + @java.lang.Override + public com.google.cloud.spannerlib.v1.RowsOrBuilder getRowsOrBuilder() { + return rows_ == null ? com.google.cloud.spannerlib.v1.Rows.getDefaultInstance() : rows_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(1, getRows()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getRows()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.cloud.spannerlib.v1.MetadataRequest)) { + return super.equals(obj); + } + com.google.cloud.spannerlib.v1.MetadataRequest other = + (com.google.cloud.spannerlib.v1.MetadataRequest) obj; + + if (hasRows() != other.hasRows()) return false; + if (hasRows()) { + if (!getRows().equals(other.getRows())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasRows()) { + hash = (37 * hash) + ROWS_FIELD_NUMBER; + hash = (53 * hash) + getRows().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.cloud.spannerlib.v1.MetadataRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.MetadataRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.MetadataRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.MetadataRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.MetadataRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.MetadataRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.MetadataRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.MetadataRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.MetadataRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.MetadataRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.MetadataRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.MetadataRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.cloud.spannerlib.v1.MetadataRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** Protobuf type {@code google.spannerlib.v1.MetadataRequest} */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spannerlib.v1.MetadataRequest) + com.google.cloud.spannerlib.v1.MetadataRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_MetadataRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_MetadataRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.MetadataRequest.class, + com.google.cloud.spannerlib.v1.MetadataRequest.Builder.class); + } + + // Construct using com.google.cloud.spannerlib.v1.MetadataRequest.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetRowsFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + rows_ = null; + if (rowsBuilder_ != null) { + rowsBuilder_.dispose(); + rowsBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_MetadataRequest_descriptor; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.MetadataRequest getDefaultInstanceForType() { + return com.google.cloud.spannerlib.v1.MetadataRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.MetadataRequest build() { + com.google.cloud.spannerlib.v1.MetadataRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.MetadataRequest buildPartial() { + com.google.cloud.spannerlib.v1.MetadataRequest result = + new com.google.cloud.spannerlib.v1.MetadataRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.cloud.spannerlib.v1.MetadataRequest result) { + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.rows_ = rowsBuilder_ == null ? rows_ : rowsBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.cloud.spannerlib.v1.MetadataRequest) { + return mergeFrom((com.google.cloud.spannerlib.v1.MetadataRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.cloud.spannerlib.v1.MetadataRequest other) { + if (other == com.google.cloud.spannerlib.v1.MetadataRequest.getDefaultInstance()) return this; + if (other.hasRows()) { + mergeRows(other.getRows()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + input.readMessage(internalGetRowsFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000001; + break; + } // case 10 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.cloud.spannerlib.v1.Rows rows_; + private com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.Rows, + com.google.cloud.spannerlib.v1.Rows.Builder, + com.google.cloud.spannerlib.v1.RowsOrBuilder> + rowsBuilder_; + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the rows field is set. + */ + public boolean hasRows() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The rows. + */ + public com.google.cloud.spannerlib.v1.Rows getRows() { + if (rowsBuilder_ == null) { + return rows_ == null ? com.google.cloud.spannerlib.v1.Rows.getDefaultInstance() : rows_; + } else { + return rowsBuilder_.getMessage(); + } + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder setRows(com.google.cloud.spannerlib.v1.Rows value) { + if (rowsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + rows_ = value; + } else { + rowsBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder setRows(com.google.cloud.spannerlib.v1.Rows.Builder builderForValue) { + if (rowsBuilder_ == null) { + rows_ = builderForValue.build(); + } else { + rowsBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder mergeRows(com.google.cloud.spannerlib.v1.Rows value) { + if (rowsBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0) + && rows_ != null + && rows_ != com.google.cloud.spannerlib.v1.Rows.getDefaultInstance()) { + getRowsBuilder().mergeFrom(value); + } else { + rows_ = value; + } + } else { + rowsBuilder_.mergeFrom(value); + } + if (rows_ != null) { + bitField0_ |= 0x00000001; + onChanged(); + } + return this; + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder clearRows() { + bitField0_ = (bitField0_ & ~0x00000001); + rows_ = null; + if (rowsBuilder_ != null) { + rowsBuilder_.dispose(); + rowsBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public com.google.cloud.spannerlib.v1.Rows.Builder getRowsBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return internalGetRowsFieldBuilder().getBuilder(); + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public com.google.cloud.spannerlib.v1.RowsOrBuilder getRowsOrBuilder() { + if (rowsBuilder_ != null) { + return rowsBuilder_.getMessageOrBuilder(); + } else { + return rows_ == null ? com.google.cloud.spannerlib.v1.Rows.getDefaultInstance() : rows_; + } + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.Rows, + com.google.cloud.spannerlib.v1.Rows.Builder, + com.google.cloud.spannerlib.v1.RowsOrBuilder> + internalGetRowsFieldBuilder() { + if (rowsBuilder_ == null) { + rowsBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.Rows, + com.google.cloud.spannerlib.v1.Rows.Builder, + com.google.cloud.spannerlib.v1.RowsOrBuilder>( + getRows(), getParentForChildren(), isClean()); + rows_ = null; + } + return rowsBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.spannerlib.v1.MetadataRequest) + } + + // @@protoc_insertion_point(class_scope:google.spannerlib.v1.MetadataRequest) + private static final com.google.cloud.spannerlib.v1.MetadataRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.cloud.spannerlib.v1.MetadataRequest(); + } + + public static com.google.cloud.spannerlib.v1.MetadataRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public MetadataRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.MetadataRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/MetadataRequestOrBuilder.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/MetadataRequestOrBuilder.java new file mode 100644 index 00000000..ddeeec53 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/MetadataRequestOrBuilder.java @@ -0,0 +1,30 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +@com.google.protobuf.Generated +public interface MetadataRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spannerlib.v1.MetadataRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the rows field is set. + */ + boolean hasRows(); + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The rows. + */ + com.google.cloud.spannerlib.v1.Rows getRows(); + + /** .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; */ + com.google.cloud.spannerlib.v1.RowsOrBuilder getRowsOrBuilder(); +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/NextRequest.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/NextRequest.java new file mode 100644 index 00000000..c526610e --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/NextRequest.java @@ -0,0 +1,729 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +/** Protobuf type {@code google.spannerlib.v1.NextRequest} */ +@com.google.protobuf.Generated +public final class NextRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spannerlib.v1.NextRequest) + NextRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 32, + /* patch= */ 1, + /* suffix= */ "", + NextRequest.class.getName()); + } + + // Use NextRequest.newBuilder() to construct. + private NextRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private NextRequest() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_NextRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_NextRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.NextRequest.class, + com.google.cloud.spannerlib.v1.NextRequest.Builder.class); + } + + private int bitField0_; + public static final int ROWS_FIELD_NUMBER = 1; + private com.google.cloud.spannerlib.v1.Rows rows_; + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the rows field is set. + */ + @java.lang.Override + public boolean hasRows() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The rows. + */ + @java.lang.Override + public com.google.cloud.spannerlib.v1.Rows getRows() { + return rows_ == null ? com.google.cloud.spannerlib.v1.Rows.getDefaultInstance() : rows_; + } + + /** .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; */ + @java.lang.Override + public com.google.cloud.spannerlib.v1.RowsOrBuilder getRowsOrBuilder() { + return rows_ == null ? com.google.cloud.spannerlib.v1.Rows.getDefaultInstance() : rows_; + } + + public static final int NUM_ROWS_FIELD_NUMBER = 2; + private long numRows_ = 0L; + + /** + * int64 num_rows = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The numRows. + */ + @java.lang.Override + public long getNumRows() { + return numRows_; + } + + public static final int ENCODING_FIELD_NUMBER = 3; + private long encoding_ = 0L; + + /** + * int64 encoding = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The encoding. + */ + @java.lang.Override + public long getEncoding() { + return encoding_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(1, getRows()); + } + if (numRows_ != 0L) { + output.writeInt64(2, numRows_); + } + if (encoding_ != 0L) { + output.writeInt64(3, encoding_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getRows()); + } + if (numRows_ != 0L) { + size += com.google.protobuf.CodedOutputStream.computeInt64Size(2, numRows_); + } + if (encoding_ != 0L) { + size += com.google.protobuf.CodedOutputStream.computeInt64Size(3, encoding_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.cloud.spannerlib.v1.NextRequest)) { + return super.equals(obj); + } + com.google.cloud.spannerlib.v1.NextRequest other = + (com.google.cloud.spannerlib.v1.NextRequest) obj; + + if (hasRows() != other.hasRows()) return false; + if (hasRows()) { + if (!getRows().equals(other.getRows())) return false; + } + if (getNumRows() != other.getNumRows()) return false; + if (getEncoding() != other.getEncoding()) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasRows()) { + hash = (37 * hash) + ROWS_FIELD_NUMBER; + hash = (53 * hash) + getRows().hashCode(); + } + hash = (37 * hash) + NUM_ROWS_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getNumRows()); + hash = (37 * hash) + ENCODING_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getEncoding()); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.cloud.spannerlib.v1.NextRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.NextRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.NextRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.NextRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.NextRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.NextRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.NextRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.NextRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.NextRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.NextRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.NextRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.NextRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.cloud.spannerlib.v1.NextRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** Protobuf type {@code google.spannerlib.v1.NextRequest} */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spannerlib.v1.NextRequest) + com.google.cloud.spannerlib.v1.NextRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_NextRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_NextRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.NextRequest.class, + com.google.cloud.spannerlib.v1.NextRequest.Builder.class); + } + + // Construct using com.google.cloud.spannerlib.v1.NextRequest.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetRowsFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + rows_ = null; + if (rowsBuilder_ != null) { + rowsBuilder_.dispose(); + rowsBuilder_ = null; + } + numRows_ = 0L; + encoding_ = 0L; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_NextRequest_descriptor; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.NextRequest getDefaultInstanceForType() { + return com.google.cloud.spannerlib.v1.NextRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.NextRequest build() { + com.google.cloud.spannerlib.v1.NextRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.NextRequest buildPartial() { + com.google.cloud.spannerlib.v1.NextRequest result = + new com.google.cloud.spannerlib.v1.NextRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.cloud.spannerlib.v1.NextRequest result) { + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.rows_ = rowsBuilder_ == null ? rows_ : rowsBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.numRows_ = numRows_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.encoding_ = encoding_; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.cloud.spannerlib.v1.NextRequest) { + return mergeFrom((com.google.cloud.spannerlib.v1.NextRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.cloud.spannerlib.v1.NextRequest other) { + if (other == com.google.cloud.spannerlib.v1.NextRequest.getDefaultInstance()) return this; + if (other.hasRows()) { + mergeRows(other.getRows()); + } + if (other.getNumRows() != 0L) { + setNumRows(other.getNumRows()); + } + if (other.getEncoding() != 0L) { + setEncoding(other.getEncoding()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + input.readMessage(internalGetRowsFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 16: + { + numRows_ = input.readInt64(); + bitField0_ |= 0x00000002; + break; + } // case 16 + case 24: + { + encoding_ = input.readInt64(); + bitField0_ |= 0x00000004; + break; + } // case 24 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.cloud.spannerlib.v1.Rows rows_; + private com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.Rows, + com.google.cloud.spannerlib.v1.Rows.Builder, + com.google.cloud.spannerlib.v1.RowsOrBuilder> + rowsBuilder_; + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the rows field is set. + */ + public boolean hasRows() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The rows. + */ + public com.google.cloud.spannerlib.v1.Rows getRows() { + if (rowsBuilder_ == null) { + return rows_ == null ? com.google.cloud.spannerlib.v1.Rows.getDefaultInstance() : rows_; + } else { + return rowsBuilder_.getMessage(); + } + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder setRows(com.google.cloud.spannerlib.v1.Rows value) { + if (rowsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + rows_ = value; + } else { + rowsBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder setRows(com.google.cloud.spannerlib.v1.Rows.Builder builderForValue) { + if (rowsBuilder_ == null) { + rows_ = builderForValue.build(); + } else { + rowsBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder mergeRows(com.google.cloud.spannerlib.v1.Rows value) { + if (rowsBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0) + && rows_ != null + && rows_ != com.google.cloud.spannerlib.v1.Rows.getDefaultInstance()) { + getRowsBuilder().mergeFrom(value); + } else { + rows_ = value; + } + } else { + rowsBuilder_.mergeFrom(value); + } + if (rows_ != null) { + bitField0_ |= 0x00000001; + onChanged(); + } + return this; + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder clearRows() { + bitField0_ = (bitField0_ & ~0x00000001); + rows_ = null; + if (rowsBuilder_ != null) { + rowsBuilder_.dispose(); + rowsBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public com.google.cloud.spannerlib.v1.Rows.Builder getRowsBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return internalGetRowsFieldBuilder().getBuilder(); + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public com.google.cloud.spannerlib.v1.RowsOrBuilder getRowsOrBuilder() { + if (rowsBuilder_ != null) { + return rowsBuilder_.getMessageOrBuilder(); + } else { + return rows_ == null ? com.google.cloud.spannerlib.v1.Rows.getDefaultInstance() : rows_; + } + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.Rows, + com.google.cloud.spannerlib.v1.Rows.Builder, + com.google.cloud.spannerlib.v1.RowsOrBuilder> + internalGetRowsFieldBuilder() { + if (rowsBuilder_ == null) { + rowsBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.Rows, + com.google.cloud.spannerlib.v1.Rows.Builder, + com.google.cloud.spannerlib.v1.RowsOrBuilder>( + getRows(), getParentForChildren(), isClean()); + rows_ = null; + } + return rowsBuilder_; + } + + private long numRows_; + + /** + * int64 num_rows = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The numRows. + */ + @java.lang.Override + public long getNumRows() { + return numRows_; + } + + /** + * int64 num_rows = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The numRows to set. + * @return This builder for chaining. + */ + public Builder setNumRows(long value) { + + numRows_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * int64 num_rows = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearNumRows() { + bitField0_ = (bitField0_ & ~0x00000002); + numRows_ = 0L; + onChanged(); + return this; + } + + private long encoding_; + + /** + * int64 encoding = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The encoding. + */ + @java.lang.Override + public long getEncoding() { + return encoding_; + } + + /** + * int64 encoding = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The encoding to set. + * @return This builder for chaining. + */ + public Builder setEncoding(long value) { + + encoding_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * int64 encoding = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearEncoding() { + bitField0_ = (bitField0_ & ~0x00000004); + encoding_ = 0L; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.spannerlib.v1.NextRequest) + } + + // @@protoc_insertion_point(class_scope:google.spannerlib.v1.NextRequest) + private static final com.google.cloud.spannerlib.v1.NextRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.cloud.spannerlib.v1.NextRequest(); + } + + public static com.google.cloud.spannerlib.v1.NextRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public NextRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.NextRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/NextRequestOrBuilder.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/NextRequestOrBuilder.java new file mode 100644 index 00000000..dbd05168 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/NextRequestOrBuilder.java @@ -0,0 +1,44 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +@com.google.protobuf.Generated +public interface NextRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spannerlib.v1.NextRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the rows field is set. + */ + boolean hasRows(); + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The rows. + */ + com.google.cloud.spannerlib.v1.Rows getRows(); + + /** .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; */ + com.google.cloud.spannerlib.v1.RowsOrBuilder getRowsOrBuilder(); + + /** + * int64 num_rows = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The numRows. + */ + long getNumRows(); + + /** + * int64 encoding = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The encoding. + */ + long getEncoding(); +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/Pool.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/Pool.java new file mode 100644 index 00000000..0dc6944e --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/Pool.java @@ -0,0 +1,444 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +/** Protobuf type {@code google.spannerlib.v1.Pool} */ +@com.google.protobuf.Generated +public final class Pool extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spannerlib.v1.Pool) + PoolOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 32, + /* patch= */ 1, + /* suffix= */ "", + Pool.class.getName()); + } + + // Use Pool.newBuilder() to construct. + private Pool(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private Pool() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_Pool_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_Pool_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.Pool.class, + com.google.cloud.spannerlib.v1.Pool.Builder.class); + } + + public static final int ID_FIELD_NUMBER = 1; + private long id_ = 0L; + + /** + * int64 id = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The id. + */ + @java.lang.Override + public long getId() { + return id_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (id_ != 0L) { + output.writeInt64(1, id_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (id_ != 0L) { + size += com.google.protobuf.CodedOutputStream.computeInt64Size(1, id_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.cloud.spannerlib.v1.Pool)) { + return super.equals(obj); + } + com.google.cloud.spannerlib.v1.Pool other = (com.google.cloud.spannerlib.v1.Pool) obj; + + if (getId() != other.getId()) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + ID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getId()); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.cloud.spannerlib.v1.Pool parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.Pool parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.Pool parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.Pool parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.Pool parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.Pool parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.Pool parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.Pool parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.Pool parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.Pool parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.Pool parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.Pool parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.cloud.spannerlib.v1.Pool prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** Protobuf type {@code google.spannerlib.v1.Pool} */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spannerlib.v1.Pool) + com.google.cloud.spannerlib.v1.PoolOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_Pool_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_Pool_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.Pool.class, + com.google.cloud.spannerlib.v1.Pool.Builder.class); + } + + // Construct using com.google.cloud.spannerlib.v1.Pool.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + id_ = 0L; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_Pool_descriptor; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.Pool getDefaultInstanceForType() { + return com.google.cloud.spannerlib.v1.Pool.getDefaultInstance(); + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.Pool build() { + com.google.cloud.spannerlib.v1.Pool result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.Pool buildPartial() { + com.google.cloud.spannerlib.v1.Pool result = new com.google.cloud.spannerlib.v1.Pool(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.cloud.spannerlib.v1.Pool result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.id_ = id_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.cloud.spannerlib.v1.Pool) { + return mergeFrom((com.google.cloud.spannerlib.v1.Pool) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.cloud.spannerlib.v1.Pool other) { + if (other == com.google.cloud.spannerlib.v1.Pool.getDefaultInstance()) return this; + if (other.getId() != 0L) { + setId(other.getId()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: + { + id_ = input.readInt64(); + bitField0_ |= 0x00000001; + break; + } // case 8 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private long id_; + + /** + * int64 id = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The id. + */ + @java.lang.Override + public long getId() { + return id_; + } + + /** + * int64 id = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The id to set. + * @return This builder for chaining. + */ + public Builder setId(long value) { + + id_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * int64 id = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearId() { + bitField0_ = (bitField0_ & ~0x00000001); + id_ = 0L; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.spannerlib.v1.Pool) + } + + // @@protoc_insertion_point(class_scope:google.spannerlib.v1.Pool) + private static final com.google.cloud.spannerlib.v1.Pool DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.cloud.spannerlib.v1.Pool(); + } + + public static com.google.cloud.spannerlib.v1.Pool getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Pool parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.Pool getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/PoolOrBuilder.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/PoolOrBuilder.java new file mode 100644 index 00000000..1a1fbf44 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/PoolOrBuilder.java @@ -0,0 +1,20 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +@com.google.protobuf.Generated +public interface PoolOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spannerlib.v1.Pool) + com.google.protobuf.MessageOrBuilder { + + /** + * int64 id = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The id. + */ + long getId(); +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ResultSetStatsRequest.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ResultSetStatsRequest.java new file mode 100644 index 00000000..0a985cef --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ResultSetStatsRequest.java @@ -0,0 +1,584 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +/** Protobuf type {@code google.spannerlib.v1.ResultSetStatsRequest} */ +@com.google.protobuf.Generated +public final class ResultSetStatsRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spannerlib.v1.ResultSetStatsRequest) + ResultSetStatsRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 32, + /* patch= */ 1, + /* suffix= */ "", + ResultSetStatsRequest.class.getName()); + } + + // Use ResultSetStatsRequest.newBuilder() to construct. + private ResultSetStatsRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private ResultSetStatsRequest() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_ResultSetStatsRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_ResultSetStatsRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.ResultSetStatsRequest.class, + com.google.cloud.spannerlib.v1.ResultSetStatsRequest.Builder.class); + } + + private int bitField0_; + public static final int ROWS_FIELD_NUMBER = 1; + private com.google.cloud.spannerlib.v1.Rows rows_; + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the rows field is set. + */ + @java.lang.Override + public boolean hasRows() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The rows. + */ + @java.lang.Override + public com.google.cloud.spannerlib.v1.Rows getRows() { + return rows_ == null ? com.google.cloud.spannerlib.v1.Rows.getDefaultInstance() : rows_; + } + + /** .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; */ + @java.lang.Override + public com.google.cloud.spannerlib.v1.RowsOrBuilder getRowsOrBuilder() { + return rows_ == null ? com.google.cloud.spannerlib.v1.Rows.getDefaultInstance() : rows_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(1, getRows()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getRows()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.cloud.spannerlib.v1.ResultSetStatsRequest)) { + return super.equals(obj); + } + com.google.cloud.spannerlib.v1.ResultSetStatsRequest other = + (com.google.cloud.spannerlib.v1.ResultSetStatsRequest) obj; + + if (hasRows() != other.hasRows()) return false; + if (hasRows()) { + if (!getRows().equals(other.getRows())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasRows()) { + hash = (37 * hash) + ROWS_FIELD_NUMBER; + hash = (53 * hash) + getRows().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.cloud.spannerlib.v1.ResultSetStatsRequest parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.ResultSetStatsRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.ResultSetStatsRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.ResultSetStatsRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.ResultSetStatsRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.ResultSetStatsRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.ResultSetStatsRequest parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.ResultSetStatsRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.ResultSetStatsRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.ResultSetStatsRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.ResultSetStatsRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.ResultSetStatsRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.cloud.spannerlib.v1.ResultSetStatsRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** Protobuf type {@code google.spannerlib.v1.ResultSetStatsRequest} */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spannerlib.v1.ResultSetStatsRequest) + com.google.cloud.spannerlib.v1.ResultSetStatsRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_ResultSetStatsRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_ResultSetStatsRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.ResultSetStatsRequest.class, + com.google.cloud.spannerlib.v1.ResultSetStatsRequest.Builder.class); + } + + // Construct using com.google.cloud.spannerlib.v1.ResultSetStatsRequest.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetRowsFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + rows_ = null; + if (rowsBuilder_ != null) { + rowsBuilder_.dispose(); + rowsBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_ResultSetStatsRequest_descriptor; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.ResultSetStatsRequest getDefaultInstanceForType() { + return com.google.cloud.spannerlib.v1.ResultSetStatsRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.ResultSetStatsRequest build() { + com.google.cloud.spannerlib.v1.ResultSetStatsRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.ResultSetStatsRequest buildPartial() { + com.google.cloud.spannerlib.v1.ResultSetStatsRequest result = + new com.google.cloud.spannerlib.v1.ResultSetStatsRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.cloud.spannerlib.v1.ResultSetStatsRequest result) { + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.rows_ = rowsBuilder_ == null ? rows_ : rowsBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.cloud.spannerlib.v1.ResultSetStatsRequest) { + return mergeFrom((com.google.cloud.spannerlib.v1.ResultSetStatsRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.cloud.spannerlib.v1.ResultSetStatsRequest other) { + if (other == com.google.cloud.spannerlib.v1.ResultSetStatsRequest.getDefaultInstance()) + return this; + if (other.hasRows()) { + mergeRows(other.getRows()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + input.readMessage(internalGetRowsFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000001; + break; + } // case 10 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.cloud.spannerlib.v1.Rows rows_; + private com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.Rows, + com.google.cloud.spannerlib.v1.Rows.Builder, + com.google.cloud.spannerlib.v1.RowsOrBuilder> + rowsBuilder_; + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the rows field is set. + */ + public boolean hasRows() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The rows. + */ + public com.google.cloud.spannerlib.v1.Rows getRows() { + if (rowsBuilder_ == null) { + return rows_ == null ? com.google.cloud.spannerlib.v1.Rows.getDefaultInstance() : rows_; + } else { + return rowsBuilder_.getMessage(); + } + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder setRows(com.google.cloud.spannerlib.v1.Rows value) { + if (rowsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + rows_ = value; + } else { + rowsBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder setRows(com.google.cloud.spannerlib.v1.Rows.Builder builderForValue) { + if (rowsBuilder_ == null) { + rows_ = builderForValue.build(); + } else { + rowsBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder mergeRows(com.google.cloud.spannerlib.v1.Rows value) { + if (rowsBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0) + && rows_ != null + && rows_ != com.google.cloud.spannerlib.v1.Rows.getDefaultInstance()) { + getRowsBuilder().mergeFrom(value); + } else { + rows_ = value; + } + } else { + rowsBuilder_.mergeFrom(value); + } + if (rows_ != null) { + bitField0_ |= 0x00000001; + onChanged(); + } + return this; + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder clearRows() { + bitField0_ = (bitField0_ & ~0x00000001); + rows_ = null; + if (rowsBuilder_ != null) { + rowsBuilder_.dispose(); + rowsBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public com.google.cloud.spannerlib.v1.Rows.Builder getRowsBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return internalGetRowsFieldBuilder().getBuilder(); + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public com.google.cloud.spannerlib.v1.RowsOrBuilder getRowsOrBuilder() { + if (rowsBuilder_ != null) { + return rowsBuilder_.getMessageOrBuilder(); + } else { + return rows_ == null ? com.google.cloud.spannerlib.v1.Rows.getDefaultInstance() : rows_; + } + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.Rows, + com.google.cloud.spannerlib.v1.Rows.Builder, + com.google.cloud.spannerlib.v1.RowsOrBuilder> + internalGetRowsFieldBuilder() { + if (rowsBuilder_ == null) { + rowsBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.Rows, + com.google.cloud.spannerlib.v1.Rows.Builder, + com.google.cloud.spannerlib.v1.RowsOrBuilder>( + getRows(), getParentForChildren(), isClean()); + rows_ = null; + } + return rowsBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.spannerlib.v1.ResultSetStatsRequest) + } + + // @@protoc_insertion_point(class_scope:google.spannerlib.v1.ResultSetStatsRequest) + private static final com.google.cloud.spannerlib.v1.ResultSetStatsRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.cloud.spannerlib.v1.ResultSetStatsRequest(); + } + + public static com.google.cloud.spannerlib.v1.ResultSetStatsRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ResultSetStatsRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.ResultSetStatsRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ResultSetStatsRequestOrBuilder.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ResultSetStatsRequestOrBuilder.java new file mode 100644 index 00000000..c7f98a39 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/ResultSetStatsRequestOrBuilder.java @@ -0,0 +1,30 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +@com.google.protobuf.Generated +public interface ResultSetStatsRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spannerlib.v1.ResultSetStatsRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the rows field is set. + */ + boolean hasRows(); + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The rows. + */ + com.google.cloud.spannerlib.v1.Rows getRows(); + + /** .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; */ + com.google.cloud.spannerlib.v1.RowsOrBuilder getRowsOrBuilder(); +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/RowData.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/RowData.java new file mode 100644 index 00000000..13712ebc --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/RowData.java @@ -0,0 +1,1352 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +/** Protobuf type {@code google.spannerlib.v1.RowData} */ +@com.google.protobuf.Generated +public final class RowData extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spannerlib.v1.RowData) + RowDataOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 32, + /* patch= */ 1, + /* suffix= */ "", + RowData.class.getName()); + } + + // Use RowData.newBuilder() to construct. + private RowData(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private RowData() { + data_ = java.util.Collections.emptyList(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_RowData_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_RowData_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.RowData.class, + com.google.cloud.spannerlib.v1.RowData.Builder.class); + } + + private int bitField0_; + public static final int ROWS_FIELD_NUMBER = 1; + private com.google.cloud.spannerlib.v1.Rows rows_; + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the rows field is set. + */ + @java.lang.Override + public boolean hasRows() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The rows. + */ + @java.lang.Override + public com.google.cloud.spannerlib.v1.Rows getRows() { + return rows_ == null ? com.google.cloud.spannerlib.v1.Rows.getDefaultInstance() : rows_; + } + + /** .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; */ + @java.lang.Override + public com.google.cloud.spannerlib.v1.RowsOrBuilder getRowsOrBuilder() { + return rows_ == null ? com.google.cloud.spannerlib.v1.Rows.getDefaultInstance() : rows_; + } + + public static final int METADATA_FIELD_NUMBER = 2; + private com.google.spanner.v1.ResultSetMetadata metadata_; + + /** + * .google.spanner.v1.ResultSetMetadata metadata = 2; + * + * @return Whether the metadata field is set. + */ + @java.lang.Override + public boolean hasMetadata() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * .google.spanner.v1.ResultSetMetadata metadata = 2; + * + * @return The metadata. + */ + @java.lang.Override + public com.google.spanner.v1.ResultSetMetadata getMetadata() { + return metadata_ == null + ? com.google.spanner.v1.ResultSetMetadata.getDefaultInstance() + : metadata_; + } + + /** .google.spanner.v1.ResultSetMetadata metadata = 2; */ + @java.lang.Override + public com.google.spanner.v1.ResultSetMetadataOrBuilder getMetadataOrBuilder() { + return metadata_ == null + ? com.google.spanner.v1.ResultSetMetadata.getDefaultInstance() + : metadata_; + } + + public static final int DATA_FIELD_NUMBER = 3; + + @SuppressWarnings("serial") + private java.util.List data_; + + /** + * repeated .google.protobuf.ListValue data = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public java.util.List getDataList() { + return data_; + } + + /** + * repeated .google.protobuf.ListValue data = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public java.util.List getDataOrBuilderList() { + return data_; + } + + /** + * repeated .google.protobuf.ListValue data = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public int getDataCount() { + return data_.size(); + } + + /** + * repeated .google.protobuf.ListValue data = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public com.google.protobuf.ListValue getData(int index) { + return data_.get(index); + } + + /** + * repeated .google.protobuf.ListValue data = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public com.google.protobuf.ListValueOrBuilder getDataOrBuilder(int index) { + return data_.get(index); + } + + public static final int STATS_FIELD_NUMBER = 4; + private com.google.spanner.v1.ResultSetStats stats_; + + /** + * .google.spanner.v1.ResultSetStats stats = 4; + * + * @return Whether the stats field is set. + */ + @java.lang.Override + public boolean hasStats() { + return ((bitField0_ & 0x00000004) != 0); + } + + /** + * .google.spanner.v1.ResultSetStats stats = 4; + * + * @return The stats. + */ + @java.lang.Override + public com.google.spanner.v1.ResultSetStats getStats() { + return stats_ == null ? com.google.spanner.v1.ResultSetStats.getDefaultInstance() : stats_; + } + + /** .google.spanner.v1.ResultSetStats stats = 4; */ + @java.lang.Override + public com.google.spanner.v1.ResultSetStatsOrBuilder getStatsOrBuilder() { + return stats_ == null ? com.google.spanner.v1.ResultSetStats.getDefaultInstance() : stats_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(1, getRows()); + } + if (((bitField0_ & 0x00000002) != 0)) { + output.writeMessage(2, getMetadata()); + } + for (int i = 0; i < data_.size(); i++) { + output.writeMessage(3, data_.get(i)); + } + if (((bitField0_ & 0x00000004) != 0)) { + output.writeMessage(4, getStats()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getRows()); + } + if (((bitField0_ & 0x00000002) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getMetadata()); + } + for (int i = 0; i < data_.size(); i++) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, data_.get(i)); + } + if (((bitField0_ & 0x00000004) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getStats()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.cloud.spannerlib.v1.RowData)) { + return super.equals(obj); + } + com.google.cloud.spannerlib.v1.RowData other = (com.google.cloud.spannerlib.v1.RowData) obj; + + if (hasRows() != other.hasRows()) return false; + if (hasRows()) { + if (!getRows().equals(other.getRows())) return false; + } + if (hasMetadata() != other.hasMetadata()) return false; + if (hasMetadata()) { + if (!getMetadata().equals(other.getMetadata())) return false; + } + if (!getDataList().equals(other.getDataList())) return false; + if (hasStats() != other.hasStats()) return false; + if (hasStats()) { + if (!getStats().equals(other.getStats())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasRows()) { + hash = (37 * hash) + ROWS_FIELD_NUMBER; + hash = (53 * hash) + getRows().hashCode(); + } + if (hasMetadata()) { + hash = (37 * hash) + METADATA_FIELD_NUMBER; + hash = (53 * hash) + getMetadata().hashCode(); + } + if (getDataCount() > 0) { + hash = (37 * hash) + DATA_FIELD_NUMBER; + hash = (53 * hash) + getDataList().hashCode(); + } + if (hasStats()) { + hash = (37 * hash) + STATS_FIELD_NUMBER; + hash = (53 * hash) + getStats().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.cloud.spannerlib.v1.RowData parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.RowData parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.RowData parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.RowData parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.RowData parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.RowData parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.RowData parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.RowData parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.RowData parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.RowData parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.RowData parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.RowData parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.cloud.spannerlib.v1.RowData prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** Protobuf type {@code google.spannerlib.v1.RowData} */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spannerlib.v1.RowData) + com.google.cloud.spannerlib.v1.RowDataOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_RowData_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_RowData_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.RowData.class, + com.google.cloud.spannerlib.v1.RowData.Builder.class); + } + + // Construct using com.google.cloud.spannerlib.v1.RowData.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetRowsFieldBuilder(); + internalGetMetadataFieldBuilder(); + internalGetDataFieldBuilder(); + internalGetStatsFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + rows_ = null; + if (rowsBuilder_ != null) { + rowsBuilder_.dispose(); + rowsBuilder_ = null; + } + metadata_ = null; + if (metadataBuilder_ != null) { + metadataBuilder_.dispose(); + metadataBuilder_ = null; + } + if (dataBuilder_ == null) { + data_ = java.util.Collections.emptyList(); + } else { + data_ = null; + dataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); + stats_ = null; + if (statsBuilder_ != null) { + statsBuilder_.dispose(); + statsBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_RowData_descriptor; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.RowData getDefaultInstanceForType() { + return com.google.cloud.spannerlib.v1.RowData.getDefaultInstance(); + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.RowData build() { + com.google.cloud.spannerlib.v1.RowData result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.RowData buildPartial() { + com.google.cloud.spannerlib.v1.RowData result = + new com.google.cloud.spannerlib.v1.RowData(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields(com.google.cloud.spannerlib.v1.RowData result) { + if (dataBuilder_ == null) { + if (((bitField0_ & 0x00000004) != 0)) { + data_ = java.util.Collections.unmodifiableList(data_); + bitField0_ = (bitField0_ & ~0x00000004); + } + result.data_ = data_; + } else { + result.data_ = dataBuilder_.build(); + } + } + + private void buildPartial0(com.google.cloud.spannerlib.v1.RowData result) { + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.rows_ = rowsBuilder_ == null ? rows_ : rowsBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.metadata_ = metadataBuilder_ == null ? metadata_ : metadataBuilder_.build(); + to_bitField0_ |= 0x00000002; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.stats_ = statsBuilder_ == null ? stats_ : statsBuilder_.build(); + to_bitField0_ |= 0x00000004; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.cloud.spannerlib.v1.RowData) { + return mergeFrom((com.google.cloud.spannerlib.v1.RowData) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.cloud.spannerlib.v1.RowData other) { + if (other == com.google.cloud.spannerlib.v1.RowData.getDefaultInstance()) return this; + if (other.hasRows()) { + mergeRows(other.getRows()); + } + if (other.hasMetadata()) { + mergeMetadata(other.getMetadata()); + } + if (dataBuilder_ == null) { + if (!other.data_.isEmpty()) { + if (data_.isEmpty()) { + data_ = other.data_; + bitField0_ = (bitField0_ & ~0x00000004); + } else { + ensureDataIsMutable(); + data_.addAll(other.data_); + } + onChanged(); + } + } else { + if (!other.data_.isEmpty()) { + if (dataBuilder_.isEmpty()) { + dataBuilder_.dispose(); + dataBuilder_ = null; + data_ = other.data_; + bitField0_ = (bitField0_ & ~0x00000004); + dataBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders + ? internalGetDataFieldBuilder() + : null; + } else { + dataBuilder_.addAllMessages(other.data_); + } + } + } + if (other.hasStats()) { + mergeStats(other.getStats()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + input.readMessage(internalGetRowsFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + input.readMessage( + internalGetMetadataFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: + { + com.google.protobuf.ListValue m = + input.readMessage(com.google.protobuf.ListValue.parser(), extensionRegistry); + if (dataBuilder_ == null) { + ensureDataIsMutable(); + data_.add(m); + } else { + dataBuilder_.addMessage(m); + } + break; + } // case 26 + case 34: + { + input.readMessage(internalGetStatsFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000008; + break; + } // case 34 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.cloud.spannerlib.v1.Rows rows_; + private com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.Rows, + com.google.cloud.spannerlib.v1.Rows.Builder, + com.google.cloud.spannerlib.v1.RowsOrBuilder> + rowsBuilder_; + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the rows field is set. + */ + public boolean hasRows() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The rows. + */ + public com.google.cloud.spannerlib.v1.Rows getRows() { + if (rowsBuilder_ == null) { + return rows_ == null ? com.google.cloud.spannerlib.v1.Rows.getDefaultInstance() : rows_; + } else { + return rowsBuilder_.getMessage(); + } + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder setRows(com.google.cloud.spannerlib.v1.Rows value) { + if (rowsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + rows_ = value; + } else { + rowsBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder setRows(com.google.cloud.spannerlib.v1.Rows.Builder builderForValue) { + if (rowsBuilder_ == null) { + rows_ = builderForValue.build(); + } else { + rowsBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder mergeRows(com.google.cloud.spannerlib.v1.Rows value) { + if (rowsBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0) + && rows_ != null + && rows_ != com.google.cloud.spannerlib.v1.Rows.getDefaultInstance()) { + getRowsBuilder().mergeFrom(value); + } else { + rows_ = value; + } + } else { + rowsBuilder_.mergeFrom(value); + } + if (rows_ != null) { + bitField0_ |= 0x00000001; + onChanged(); + } + return this; + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder clearRows() { + bitField0_ = (bitField0_ & ~0x00000001); + rows_ = null; + if (rowsBuilder_ != null) { + rowsBuilder_.dispose(); + rowsBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public com.google.cloud.spannerlib.v1.Rows.Builder getRowsBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return internalGetRowsFieldBuilder().getBuilder(); + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + public com.google.cloud.spannerlib.v1.RowsOrBuilder getRowsOrBuilder() { + if (rowsBuilder_ != null) { + return rowsBuilder_.getMessageOrBuilder(); + } else { + return rows_ == null ? com.google.cloud.spannerlib.v1.Rows.getDefaultInstance() : rows_; + } + } + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.Rows, + com.google.cloud.spannerlib.v1.Rows.Builder, + com.google.cloud.spannerlib.v1.RowsOrBuilder> + internalGetRowsFieldBuilder() { + if (rowsBuilder_ == null) { + rowsBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.Rows, + com.google.cloud.spannerlib.v1.Rows.Builder, + com.google.cloud.spannerlib.v1.RowsOrBuilder>( + getRows(), getParentForChildren(), isClean()); + rows_ = null; + } + return rowsBuilder_; + } + + private com.google.spanner.v1.ResultSetMetadata metadata_; + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.ResultSetMetadata, + com.google.spanner.v1.ResultSetMetadata.Builder, + com.google.spanner.v1.ResultSetMetadataOrBuilder> + metadataBuilder_; + + /** + * .google.spanner.v1.ResultSetMetadata metadata = 2; + * + * @return Whether the metadata field is set. + */ + public boolean hasMetadata() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * .google.spanner.v1.ResultSetMetadata metadata = 2; + * + * @return The metadata. + */ + public com.google.spanner.v1.ResultSetMetadata getMetadata() { + if (metadataBuilder_ == null) { + return metadata_ == null + ? com.google.spanner.v1.ResultSetMetadata.getDefaultInstance() + : metadata_; + } else { + return metadataBuilder_.getMessage(); + } + } + + /** .google.spanner.v1.ResultSetMetadata metadata = 2; */ + public Builder setMetadata(com.google.spanner.v1.ResultSetMetadata value) { + if (metadataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + metadata_ = value; + } else { + metadataBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** .google.spanner.v1.ResultSetMetadata metadata = 2; */ + public Builder setMetadata(com.google.spanner.v1.ResultSetMetadata.Builder builderForValue) { + if (metadataBuilder_ == null) { + metadata_ = builderForValue.build(); + } else { + metadataBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** .google.spanner.v1.ResultSetMetadata metadata = 2; */ + public Builder mergeMetadata(com.google.spanner.v1.ResultSetMetadata value) { + if (metadataBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0) + && metadata_ != null + && metadata_ != com.google.spanner.v1.ResultSetMetadata.getDefaultInstance()) { + getMetadataBuilder().mergeFrom(value); + } else { + metadata_ = value; + } + } else { + metadataBuilder_.mergeFrom(value); + } + if (metadata_ != null) { + bitField0_ |= 0x00000002; + onChanged(); + } + return this; + } + + /** .google.spanner.v1.ResultSetMetadata metadata = 2; */ + public Builder clearMetadata() { + bitField0_ = (bitField0_ & ~0x00000002); + metadata_ = null; + if (metadataBuilder_ != null) { + metadataBuilder_.dispose(); + metadataBuilder_ = null; + } + onChanged(); + return this; + } + + /** .google.spanner.v1.ResultSetMetadata metadata = 2; */ + public com.google.spanner.v1.ResultSetMetadata.Builder getMetadataBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return internalGetMetadataFieldBuilder().getBuilder(); + } + + /** .google.spanner.v1.ResultSetMetadata metadata = 2; */ + public com.google.spanner.v1.ResultSetMetadataOrBuilder getMetadataOrBuilder() { + if (metadataBuilder_ != null) { + return metadataBuilder_.getMessageOrBuilder(); + } else { + return metadata_ == null + ? com.google.spanner.v1.ResultSetMetadata.getDefaultInstance() + : metadata_; + } + } + + /** .google.spanner.v1.ResultSetMetadata metadata = 2; */ + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.ResultSetMetadata, + com.google.spanner.v1.ResultSetMetadata.Builder, + com.google.spanner.v1.ResultSetMetadataOrBuilder> + internalGetMetadataFieldBuilder() { + if (metadataBuilder_ == null) { + metadataBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.ResultSetMetadata, + com.google.spanner.v1.ResultSetMetadata.Builder, + com.google.spanner.v1.ResultSetMetadataOrBuilder>( + getMetadata(), getParentForChildren(), isClean()); + metadata_ = null; + } + return metadataBuilder_; + } + + private java.util.List data_ = java.util.Collections.emptyList(); + + private void ensureDataIsMutable() { + if (!((bitField0_ & 0x00000004) != 0)) { + data_ = new java.util.ArrayList(data_); + bitField0_ |= 0x00000004; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.protobuf.ListValue, + com.google.protobuf.ListValue.Builder, + com.google.protobuf.ListValueOrBuilder> + dataBuilder_; + + /** + * repeated .google.protobuf.ListValue data = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public java.util.List getDataList() { + if (dataBuilder_ == null) { + return java.util.Collections.unmodifiableList(data_); + } else { + return dataBuilder_.getMessageList(); + } + } + + /** + * repeated .google.protobuf.ListValue data = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public int getDataCount() { + if (dataBuilder_ == null) { + return data_.size(); + } else { + return dataBuilder_.getCount(); + } + } + + /** + * repeated .google.protobuf.ListValue data = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.protobuf.ListValue getData(int index) { + if (dataBuilder_ == null) { + return data_.get(index); + } else { + return dataBuilder_.getMessage(index); + } + } + + /** + * repeated .google.protobuf.ListValue data = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setData(int index, com.google.protobuf.ListValue value) { + if (dataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureDataIsMutable(); + data_.set(index, value); + onChanged(); + } else { + dataBuilder_.setMessage(index, value); + } + return this; + } + + /** + * repeated .google.protobuf.ListValue data = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setData(int index, com.google.protobuf.ListValue.Builder builderForValue) { + if (dataBuilder_ == null) { + ensureDataIsMutable(); + data_.set(index, builderForValue.build()); + onChanged(); + } else { + dataBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** + * repeated .google.protobuf.ListValue data = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder addData(com.google.protobuf.ListValue value) { + if (dataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureDataIsMutable(); + data_.add(value); + onChanged(); + } else { + dataBuilder_.addMessage(value); + } + return this; + } + + /** + * repeated .google.protobuf.ListValue data = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder addData(int index, com.google.protobuf.ListValue value) { + if (dataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureDataIsMutable(); + data_.add(index, value); + onChanged(); + } else { + dataBuilder_.addMessage(index, value); + } + return this; + } + + /** + * repeated .google.protobuf.ListValue data = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder addData(com.google.protobuf.ListValue.Builder builderForValue) { + if (dataBuilder_ == null) { + ensureDataIsMutable(); + data_.add(builderForValue.build()); + onChanged(); + } else { + dataBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** + * repeated .google.protobuf.ListValue data = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder addData(int index, com.google.protobuf.ListValue.Builder builderForValue) { + if (dataBuilder_ == null) { + ensureDataIsMutable(); + data_.add(index, builderForValue.build()); + onChanged(); + } else { + dataBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** + * repeated .google.protobuf.ListValue data = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder addAllData(java.lang.Iterable values) { + if (dataBuilder_ == null) { + ensureDataIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, data_); + onChanged(); + } else { + dataBuilder_.addAllMessages(values); + } + return this; + } + + /** + * repeated .google.protobuf.ListValue data = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder clearData() { + if (dataBuilder_ == null) { + data_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + } else { + dataBuilder_.clear(); + } + return this; + } + + /** + * repeated .google.protobuf.ListValue data = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder removeData(int index) { + if (dataBuilder_ == null) { + ensureDataIsMutable(); + data_.remove(index); + onChanged(); + } else { + dataBuilder_.remove(index); + } + return this; + } + + /** + * repeated .google.protobuf.ListValue data = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.protobuf.ListValue.Builder getDataBuilder(int index) { + return internalGetDataFieldBuilder().getBuilder(index); + } + + /** + * repeated .google.protobuf.ListValue data = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.protobuf.ListValueOrBuilder getDataOrBuilder(int index) { + if (dataBuilder_ == null) { + return data_.get(index); + } else { + return dataBuilder_.getMessageOrBuilder(index); + } + } + + /** + * repeated .google.protobuf.ListValue data = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public java.util.List getDataOrBuilderList() { + if (dataBuilder_ != null) { + return dataBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(data_); + } + } + + /** + * repeated .google.protobuf.ListValue data = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.protobuf.ListValue.Builder addDataBuilder() { + return internalGetDataFieldBuilder() + .addBuilder(com.google.protobuf.ListValue.getDefaultInstance()); + } + + /** + * repeated .google.protobuf.ListValue data = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.protobuf.ListValue.Builder addDataBuilder(int index) { + return internalGetDataFieldBuilder() + .addBuilder(index, com.google.protobuf.ListValue.getDefaultInstance()); + } + + /** + * repeated .google.protobuf.ListValue data = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public java.util.List getDataBuilderList() { + return internalGetDataFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.google.protobuf.ListValue, + com.google.protobuf.ListValue.Builder, + com.google.protobuf.ListValueOrBuilder> + internalGetDataFieldBuilder() { + if (dataBuilder_ == null) { + dataBuilder_ = + new com.google.protobuf.RepeatedFieldBuilder< + com.google.protobuf.ListValue, + com.google.protobuf.ListValue.Builder, + com.google.protobuf.ListValueOrBuilder>( + data_, ((bitField0_ & 0x00000004) != 0), getParentForChildren(), isClean()); + data_ = null; + } + return dataBuilder_; + } + + private com.google.spanner.v1.ResultSetStats stats_; + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.ResultSetStats, + com.google.spanner.v1.ResultSetStats.Builder, + com.google.spanner.v1.ResultSetStatsOrBuilder> + statsBuilder_; + + /** + * .google.spanner.v1.ResultSetStats stats = 4; + * + * @return Whether the stats field is set. + */ + public boolean hasStats() { + return ((bitField0_ & 0x00000008) != 0); + } + + /** + * .google.spanner.v1.ResultSetStats stats = 4; + * + * @return The stats. + */ + public com.google.spanner.v1.ResultSetStats getStats() { + if (statsBuilder_ == null) { + return stats_ == null ? com.google.spanner.v1.ResultSetStats.getDefaultInstance() : stats_; + } else { + return statsBuilder_.getMessage(); + } + } + + /** .google.spanner.v1.ResultSetStats stats = 4; */ + public Builder setStats(com.google.spanner.v1.ResultSetStats value) { + if (statsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + stats_ = value; + } else { + statsBuilder_.setMessage(value); + } + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** .google.spanner.v1.ResultSetStats stats = 4; */ + public Builder setStats(com.google.spanner.v1.ResultSetStats.Builder builderForValue) { + if (statsBuilder_ == null) { + stats_ = builderForValue.build(); + } else { + statsBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** .google.spanner.v1.ResultSetStats stats = 4; */ + public Builder mergeStats(com.google.spanner.v1.ResultSetStats value) { + if (statsBuilder_ == null) { + if (((bitField0_ & 0x00000008) != 0) + && stats_ != null + && stats_ != com.google.spanner.v1.ResultSetStats.getDefaultInstance()) { + getStatsBuilder().mergeFrom(value); + } else { + stats_ = value; + } + } else { + statsBuilder_.mergeFrom(value); + } + if (stats_ != null) { + bitField0_ |= 0x00000008; + onChanged(); + } + return this; + } + + /** .google.spanner.v1.ResultSetStats stats = 4; */ + public Builder clearStats() { + bitField0_ = (bitField0_ & ~0x00000008); + stats_ = null; + if (statsBuilder_ != null) { + statsBuilder_.dispose(); + statsBuilder_ = null; + } + onChanged(); + return this; + } + + /** .google.spanner.v1.ResultSetStats stats = 4; */ + public com.google.spanner.v1.ResultSetStats.Builder getStatsBuilder() { + bitField0_ |= 0x00000008; + onChanged(); + return internalGetStatsFieldBuilder().getBuilder(); + } + + /** .google.spanner.v1.ResultSetStats stats = 4; */ + public com.google.spanner.v1.ResultSetStatsOrBuilder getStatsOrBuilder() { + if (statsBuilder_ != null) { + return statsBuilder_.getMessageOrBuilder(); + } else { + return stats_ == null ? com.google.spanner.v1.ResultSetStats.getDefaultInstance() : stats_; + } + } + + /** .google.spanner.v1.ResultSetStats stats = 4; */ + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.ResultSetStats, + com.google.spanner.v1.ResultSetStats.Builder, + com.google.spanner.v1.ResultSetStatsOrBuilder> + internalGetStatsFieldBuilder() { + if (statsBuilder_ == null) { + statsBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.ResultSetStats, + com.google.spanner.v1.ResultSetStats.Builder, + com.google.spanner.v1.ResultSetStatsOrBuilder>( + getStats(), getParentForChildren(), isClean()); + stats_ = null; + } + return statsBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.spannerlib.v1.RowData) + } + + // @@protoc_insertion_point(class_scope:google.spannerlib.v1.RowData) + private static final com.google.cloud.spannerlib.v1.RowData DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.cloud.spannerlib.v1.RowData(); + } + + public static com.google.cloud.spannerlib.v1.RowData getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public RowData parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.RowData getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/RowDataOrBuilder.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/RowDataOrBuilder.java new file mode 100644 index 00000000..73687452 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/RowDataOrBuilder.java @@ -0,0 +1,94 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +@com.google.protobuf.Generated +public interface RowDataOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spannerlib.v1.RowData) + com.google.protobuf.MessageOrBuilder { + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the rows field is set. + */ + boolean hasRows(); + + /** + * .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The rows. + */ + com.google.cloud.spannerlib.v1.Rows getRows(); + + /** .google.spannerlib.v1.Rows rows = 1 [(.google.api.field_behavior) = REQUIRED]; */ + com.google.cloud.spannerlib.v1.RowsOrBuilder getRowsOrBuilder(); + + /** + * .google.spanner.v1.ResultSetMetadata metadata = 2; + * + * @return Whether the metadata field is set. + */ + boolean hasMetadata(); + + /** + * .google.spanner.v1.ResultSetMetadata metadata = 2; + * + * @return The metadata. + */ + com.google.spanner.v1.ResultSetMetadata getMetadata(); + + /** .google.spanner.v1.ResultSetMetadata metadata = 2; */ + com.google.spanner.v1.ResultSetMetadataOrBuilder getMetadataOrBuilder(); + + /** + * repeated .google.protobuf.ListValue data = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + java.util.List getDataList(); + + /** + * repeated .google.protobuf.ListValue data = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + com.google.protobuf.ListValue getData(int index); + + /** + * repeated .google.protobuf.ListValue data = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + int getDataCount(); + + /** + * repeated .google.protobuf.ListValue data = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + java.util.List getDataOrBuilderList(); + + /** + * repeated .google.protobuf.ListValue data = 3 [(.google.api.field_behavior) = REQUIRED]; + * + */ + com.google.protobuf.ListValueOrBuilder getDataOrBuilder(int index); + + /** + * .google.spanner.v1.ResultSetStats stats = 4; + * + * @return Whether the stats field is set. + */ + boolean hasStats(); + + /** + * .google.spanner.v1.ResultSetStats stats = 4; + * + * @return The stats. + */ + com.google.spanner.v1.ResultSetStats getStats(); + + /** .google.spanner.v1.ResultSetStats stats = 4; */ + com.google.spanner.v1.ResultSetStatsOrBuilder getStatsOrBuilder(); +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/Rows.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/Rows.java new file mode 100644 index 00000000..e43fcf69 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/Rows.java @@ -0,0 +1,689 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +/** Protobuf type {@code google.spannerlib.v1.Rows} */ +@com.google.protobuf.Generated +public final class Rows extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spannerlib.v1.Rows) + RowsOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 32, + /* patch= */ 1, + /* suffix= */ "", + Rows.class.getName()); + } + + // Use Rows.newBuilder() to construct. + private Rows(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private Rows() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_Rows_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_Rows_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.Rows.class, + com.google.cloud.spannerlib.v1.Rows.Builder.class); + } + + private int bitField0_; + public static final int CONNECTION_FIELD_NUMBER = 1; + private com.google.cloud.spannerlib.v1.Connection connection_; + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the connection field is set. + */ + @java.lang.Override + public boolean hasConnection() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The connection. + */ + @java.lang.Override + public com.google.cloud.spannerlib.v1.Connection getConnection() { + return connection_ == null + ? com.google.cloud.spannerlib.v1.Connection.getDefaultInstance() + : connection_; + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public com.google.cloud.spannerlib.v1.ConnectionOrBuilder getConnectionOrBuilder() { + return connection_ == null + ? com.google.cloud.spannerlib.v1.Connection.getDefaultInstance() + : connection_; + } + + public static final int ID_FIELD_NUMBER = 2; + private long id_ = 0L; + + /** + * int64 id = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The id. + */ + @java.lang.Override + public long getId() { + return id_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(1, getConnection()); + } + if (id_ != 0L) { + output.writeInt64(2, id_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getConnection()); + } + if (id_ != 0L) { + size += com.google.protobuf.CodedOutputStream.computeInt64Size(2, id_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.cloud.spannerlib.v1.Rows)) { + return super.equals(obj); + } + com.google.cloud.spannerlib.v1.Rows other = (com.google.cloud.spannerlib.v1.Rows) obj; + + if (hasConnection() != other.hasConnection()) return false; + if (hasConnection()) { + if (!getConnection().equals(other.getConnection())) return false; + } + if (getId() != other.getId()) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasConnection()) { + hash = (37 * hash) + CONNECTION_FIELD_NUMBER; + hash = (53 * hash) + getConnection().hashCode(); + } + hash = (37 * hash) + ID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getId()); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.cloud.spannerlib.v1.Rows parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.Rows parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.Rows parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.Rows parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.Rows parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.Rows parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.Rows parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.Rows parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.Rows parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.Rows parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.Rows parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.Rows parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.cloud.spannerlib.v1.Rows prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** Protobuf type {@code google.spannerlib.v1.Rows} */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spannerlib.v1.Rows) + com.google.cloud.spannerlib.v1.RowsOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_Rows_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_Rows_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.Rows.class, + com.google.cloud.spannerlib.v1.Rows.Builder.class); + } + + // Construct using com.google.cloud.spannerlib.v1.Rows.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetConnectionFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + connection_ = null; + if (connectionBuilder_ != null) { + connectionBuilder_.dispose(); + connectionBuilder_ = null; + } + id_ = 0L; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_Rows_descriptor; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.Rows getDefaultInstanceForType() { + return com.google.cloud.spannerlib.v1.Rows.getDefaultInstance(); + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.Rows build() { + com.google.cloud.spannerlib.v1.Rows result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.Rows buildPartial() { + com.google.cloud.spannerlib.v1.Rows result = new com.google.cloud.spannerlib.v1.Rows(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.cloud.spannerlib.v1.Rows result) { + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.connection_ = connectionBuilder_ == null ? connection_ : connectionBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.id_ = id_; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.cloud.spannerlib.v1.Rows) { + return mergeFrom((com.google.cloud.spannerlib.v1.Rows) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.cloud.spannerlib.v1.Rows other) { + if (other == com.google.cloud.spannerlib.v1.Rows.getDefaultInstance()) return this; + if (other.hasConnection()) { + mergeConnection(other.getConnection()); + } + if (other.getId() != 0L) { + setId(other.getId()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + input.readMessage( + internalGetConnectionFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 16: + { + id_ = input.readInt64(); + bitField0_ |= 0x00000002; + break; + } // case 16 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.cloud.spannerlib.v1.Connection connection_; + private com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.Connection, + com.google.cloud.spannerlib.v1.Connection.Builder, + com.google.cloud.spannerlib.v1.ConnectionOrBuilder> + connectionBuilder_; + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the connection field is set. + */ + public boolean hasConnection() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The connection. + */ + public com.google.cloud.spannerlib.v1.Connection getConnection() { + if (connectionBuilder_ == null) { + return connection_ == null + ? com.google.cloud.spannerlib.v1.Connection.getDefaultInstance() + : connection_; + } else { + return connectionBuilder_.getMessage(); + } + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setConnection(com.google.cloud.spannerlib.v1.Connection value) { + if (connectionBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + connection_ = value; + } else { + connectionBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setConnection( + com.google.cloud.spannerlib.v1.Connection.Builder builderForValue) { + if (connectionBuilder_ == null) { + connection_ = builderForValue.build(); + } else { + connectionBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder mergeConnection(com.google.cloud.spannerlib.v1.Connection value) { + if (connectionBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0) + && connection_ != null + && connection_ != com.google.cloud.spannerlib.v1.Connection.getDefaultInstance()) { + getConnectionBuilder().mergeFrom(value); + } else { + connection_ = value; + } + } else { + connectionBuilder_.mergeFrom(value); + } + if (connection_ != null) { + bitField0_ |= 0x00000001; + onChanged(); + } + return this; + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder clearConnection() { + bitField0_ = (bitField0_ & ~0x00000001); + connection_ = null; + if (connectionBuilder_ != null) { + connectionBuilder_.dispose(); + connectionBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.cloud.spannerlib.v1.Connection.Builder getConnectionBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return internalGetConnectionFieldBuilder().getBuilder(); + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.cloud.spannerlib.v1.ConnectionOrBuilder getConnectionOrBuilder() { + if (connectionBuilder_ != null) { + return connectionBuilder_.getMessageOrBuilder(); + } else { + return connection_ == null + ? com.google.cloud.spannerlib.v1.Connection.getDefaultInstance() + : connection_; + } + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.Connection, + com.google.cloud.spannerlib.v1.Connection.Builder, + com.google.cloud.spannerlib.v1.ConnectionOrBuilder> + internalGetConnectionFieldBuilder() { + if (connectionBuilder_ == null) { + connectionBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.Connection, + com.google.cloud.spannerlib.v1.Connection.Builder, + com.google.cloud.spannerlib.v1.ConnectionOrBuilder>( + getConnection(), getParentForChildren(), isClean()); + connection_ = null; + } + return connectionBuilder_; + } + + private long id_; + + /** + * int64 id = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The id. + */ + @java.lang.Override + public long getId() { + return id_; + } + + /** + * int64 id = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The id to set. + * @return This builder for chaining. + */ + public Builder setId(long value) { + + id_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * int64 id = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearId() { + bitField0_ = (bitField0_ & ~0x00000002); + id_ = 0L; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.spannerlib.v1.Rows) + } + + // @@protoc_insertion_point(class_scope:google.spannerlib.v1.Rows) + private static final com.google.cloud.spannerlib.v1.Rows DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.cloud.spannerlib.v1.Rows(); + } + + public static com.google.cloud.spannerlib.v1.Rows getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Rows parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.Rows getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/RowsOrBuilder.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/RowsOrBuilder.java new file mode 100644 index 00000000..698bfd75 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/RowsOrBuilder.java @@ -0,0 +1,45 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +@com.google.protobuf.Generated +public interface RowsOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spannerlib.v1.Rows) + com.google.protobuf.MessageOrBuilder { + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the connection field is set. + */ + boolean hasConnection(); + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The connection. + */ + com.google.cloud.spannerlib.v1.Connection getConnection(); + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + com.google.cloud.spannerlib.v1.ConnectionOrBuilder getConnectionOrBuilder(); + + /** + * int64 id = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The id. + */ + long getId(); +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/SpannerLibGrpc.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/SpannerLibGrpc.java new file mode 100644 index 00000000..939d2530 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/SpannerLibGrpc.java @@ -0,0 +1,1695 @@ +package com.google.cloud.spannerlib.v1; + +import static io.grpc.MethodDescriptor.generateFullMethodName; + +/** */ +@io.grpc.stub.annotations.GrpcGenerated +public final class SpannerLibGrpc { + + private SpannerLibGrpc() {} + + public static final java.lang.String SERVICE_NAME = "google.spannerlib.v1.SpannerLib"; + + // Static method descriptors that strictly reflect the proto. + private static volatile io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.CreatePoolRequest, com.google.cloud.spannerlib.v1.Pool> + getCreatePoolMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "CreatePool", + requestType = com.google.cloud.spannerlib.v1.CreatePoolRequest.class, + responseType = com.google.cloud.spannerlib.v1.Pool.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.CreatePoolRequest, com.google.cloud.spannerlib.v1.Pool> + getCreatePoolMethod() { + io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.CreatePoolRequest, com.google.cloud.spannerlib.v1.Pool> + getCreatePoolMethod; + if ((getCreatePoolMethod = SpannerLibGrpc.getCreatePoolMethod) == null) { + synchronized (SpannerLibGrpc.class) { + if ((getCreatePoolMethod = SpannerLibGrpc.getCreatePoolMethod) == null) { + SpannerLibGrpc.getCreatePoolMethod = + getCreatePoolMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "CreatePool")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.cloud.spannerlib.v1.CreatePoolRequest + .getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.cloud.spannerlib.v1.Pool.getDefaultInstance())) + .setSchemaDescriptor(new SpannerLibMethodDescriptorSupplier("CreatePool")) + .build(); + } + } + } + return getCreatePoolMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.Pool, com.google.protobuf.Empty> + getClosePoolMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "ClosePool", + requestType = com.google.cloud.spannerlib.v1.Pool.class, + responseType = com.google.protobuf.Empty.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.Pool, com.google.protobuf.Empty> + getClosePoolMethod() { + io.grpc.MethodDescriptor + getClosePoolMethod; + if ((getClosePoolMethod = SpannerLibGrpc.getClosePoolMethod) == null) { + synchronized (SpannerLibGrpc.class) { + if ((getClosePoolMethod = SpannerLibGrpc.getClosePoolMethod) == null) { + SpannerLibGrpc.getClosePoolMethod = + getClosePoolMethod = + io.grpc.MethodDescriptor + .newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ClosePool")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.cloud.spannerlib.v1.Pool.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.protobuf.Empty.getDefaultInstance())) + .setSchemaDescriptor(new SpannerLibMethodDescriptorSupplier("ClosePool")) + .build(); + } + } + } + return getClosePoolMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.CreateConnectionRequest, + com.google.cloud.spannerlib.v1.Connection> + getCreateConnectionMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "CreateConnection", + requestType = com.google.cloud.spannerlib.v1.CreateConnectionRequest.class, + responseType = com.google.cloud.spannerlib.v1.Connection.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.CreateConnectionRequest, + com.google.cloud.spannerlib.v1.Connection> + getCreateConnectionMethod() { + io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.CreateConnectionRequest, + com.google.cloud.spannerlib.v1.Connection> + getCreateConnectionMethod; + if ((getCreateConnectionMethod = SpannerLibGrpc.getCreateConnectionMethod) == null) { + synchronized (SpannerLibGrpc.class) { + if ((getCreateConnectionMethod = SpannerLibGrpc.getCreateConnectionMethod) == null) { + SpannerLibGrpc.getCreateConnectionMethod = + getCreateConnectionMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "CreateConnection")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.cloud.spannerlib.v1.CreateConnectionRequest + .getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.cloud.spannerlib.v1.Connection.getDefaultInstance())) + .setSchemaDescriptor( + new SpannerLibMethodDescriptorSupplier("CreateConnection")) + .build(); + } + } + } + return getCreateConnectionMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.Connection, com.google.protobuf.Empty> + getCloseConnectionMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "CloseConnection", + requestType = com.google.cloud.spannerlib.v1.Connection.class, + responseType = com.google.protobuf.Empty.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.Connection, com.google.protobuf.Empty> + getCloseConnectionMethod() { + io.grpc.MethodDescriptor + getCloseConnectionMethod; + if ((getCloseConnectionMethod = SpannerLibGrpc.getCloseConnectionMethod) == null) { + synchronized (SpannerLibGrpc.class) { + if ((getCloseConnectionMethod = SpannerLibGrpc.getCloseConnectionMethod) == null) { + SpannerLibGrpc.getCloseConnectionMethod = + getCloseConnectionMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "CloseConnection")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.cloud.spannerlib.v1.Connection.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.protobuf.Empty.getDefaultInstance())) + .setSchemaDescriptor( + new SpannerLibMethodDescriptorSupplier("CloseConnection")) + .build(); + } + } + } + return getCloseConnectionMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.ExecuteRequest, com.google.cloud.spannerlib.v1.Rows> + getExecuteMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "Execute", + requestType = com.google.cloud.spannerlib.v1.ExecuteRequest.class, + responseType = com.google.cloud.spannerlib.v1.Rows.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.ExecuteRequest, com.google.cloud.spannerlib.v1.Rows> + getExecuteMethod() { + io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.ExecuteRequest, com.google.cloud.spannerlib.v1.Rows> + getExecuteMethod; + if ((getExecuteMethod = SpannerLibGrpc.getExecuteMethod) == null) { + synchronized (SpannerLibGrpc.class) { + if ((getExecuteMethod = SpannerLibGrpc.getExecuteMethod) == null) { + SpannerLibGrpc.getExecuteMethod = + getExecuteMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "Execute")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.cloud.spannerlib.v1.ExecuteRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.cloud.spannerlib.v1.Rows.getDefaultInstance())) + .setSchemaDescriptor(new SpannerLibMethodDescriptorSupplier("Execute")) + .build(); + } + } + } + return getExecuteMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.ExecuteRequest, com.google.cloud.spannerlib.v1.RowData> + getExecuteStreamingMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "ExecuteStreaming", + requestType = com.google.cloud.spannerlib.v1.ExecuteRequest.class, + responseType = com.google.cloud.spannerlib.v1.RowData.class, + methodType = io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING) + public static io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.ExecuteRequest, com.google.cloud.spannerlib.v1.RowData> + getExecuteStreamingMethod() { + io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.ExecuteRequest, com.google.cloud.spannerlib.v1.RowData> + getExecuteStreamingMethod; + if ((getExecuteStreamingMethod = SpannerLibGrpc.getExecuteStreamingMethod) == null) { + synchronized (SpannerLibGrpc.class) { + if ((getExecuteStreamingMethod = SpannerLibGrpc.getExecuteStreamingMethod) == null) { + SpannerLibGrpc.getExecuteStreamingMethod = + getExecuteStreamingMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ExecuteStreaming")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.cloud.spannerlib.v1.ExecuteRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.cloud.spannerlib.v1.RowData.getDefaultInstance())) + .setSchemaDescriptor( + new SpannerLibMethodDescriptorSupplier("ExecuteStreaming")) + .build(); + } + } + } + return getExecuteStreamingMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.ExecuteBatchRequest, + com.google.spanner.v1.ExecuteBatchDmlResponse> + getExecuteBatchMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "ExecuteBatch", + requestType = com.google.cloud.spannerlib.v1.ExecuteBatchRequest.class, + responseType = com.google.spanner.v1.ExecuteBatchDmlResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.ExecuteBatchRequest, + com.google.spanner.v1.ExecuteBatchDmlResponse> + getExecuteBatchMethod() { + io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.ExecuteBatchRequest, + com.google.spanner.v1.ExecuteBatchDmlResponse> + getExecuteBatchMethod; + if ((getExecuteBatchMethod = SpannerLibGrpc.getExecuteBatchMethod) == null) { + synchronized (SpannerLibGrpc.class) { + if ((getExecuteBatchMethod = SpannerLibGrpc.getExecuteBatchMethod) == null) { + SpannerLibGrpc.getExecuteBatchMethod = + getExecuteBatchMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ExecuteBatch")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.cloud.spannerlib.v1.ExecuteBatchRequest + .getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.spanner.v1.ExecuteBatchDmlResponse.getDefaultInstance())) + .setSchemaDescriptor(new SpannerLibMethodDescriptorSupplier("ExecuteBatch")) + .build(); + } + } + } + return getExecuteBatchMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.Rows, com.google.spanner.v1.ResultSetMetadata> + getMetadataMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "Metadata", + requestType = com.google.cloud.spannerlib.v1.Rows.class, + responseType = com.google.spanner.v1.ResultSetMetadata.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.Rows, com.google.spanner.v1.ResultSetMetadata> + getMetadataMethod() { + io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.Rows, com.google.spanner.v1.ResultSetMetadata> + getMetadataMethod; + if ((getMetadataMethod = SpannerLibGrpc.getMetadataMethod) == null) { + synchronized (SpannerLibGrpc.class) { + if ((getMetadataMethod = SpannerLibGrpc.getMetadataMethod) == null) { + SpannerLibGrpc.getMetadataMethod = + getMetadataMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "Metadata")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.cloud.spannerlib.v1.Rows.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.spanner.v1.ResultSetMetadata.getDefaultInstance())) + .setSchemaDescriptor(new SpannerLibMethodDescriptorSupplier("Metadata")) + .build(); + } + } + } + return getMetadataMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.NextRequest, com.google.protobuf.ListValue> + getNextMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "Next", + requestType = com.google.cloud.spannerlib.v1.NextRequest.class, + responseType = com.google.protobuf.ListValue.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.NextRequest, com.google.protobuf.ListValue> + getNextMethod() { + io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.NextRequest, com.google.protobuf.ListValue> + getNextMethod; + if ((getNextMethod = SpannerLibGrpc.getNextMethod) == null) { + synchronized (SpannerLibGrpc.class) { + if ((getNextMethod = SpannerLibGrpc.getNextMethod) == null) { + SpannerLibGrpc.getNextMethod = + getNextMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "Next")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.cloud.spannerlib.v1.NextRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.protobuf.ListValue.getDefaultInstance())) + .setSchemaDescriptor(new SpannerLibMethodDescriptorSupplier("Next")) + .build(); + } + } + } + return getNextMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.Rows, com.google.spanner.v1.ResultSetStats> + getResultSetStatsMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "ResultSetStats", + requestType = com.google.cloud.spannerlib.v1.Rows.class, + responseType = com.google.spanner.v1.ResultSetStats.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.Rows, com.google.spanner.v1.ResultSetStats> + getResultSetStatsMethod() { + io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.Rows, com.google.spanner.v1.ResultSetStats> + getResultSetStatsMethod; + if ((getResultSetStatsMethod = SpannerLibGrpc.getResultSetStatsMethod) == null) { + synchronized (SpannerLibGrpc.class) { + if ((getResultSetStatsMethod = SpannerLibGrpc.getResultSetStatsMethod) == null) { + SpannerLibGrpc.getResultSetStatsMethod = + getResultSetStatsMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ResultSetStats")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.cloud.spannerlib.v1.Rows.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.spanner.v1.ResultSetStats.getDefaultInstance())) + .setSchemaDescriptor(new SpannerLibMethodDescriptorSupplier("ResultSetStats")) + .build(); + } + } + } + return getResultSetStatsMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.Rows, com.google.protobuf.Empty> + getCloseRowsMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "CloseRows", + requestType = com.google.cloud.spannerlib.v1.Rows.class, + responseType = com.google.protobuf.Empty.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.Rows, com.google.protobuf.Empty> + getCloseRowsMethod() { + io.grpc.MethodDescriptor + getCloseRowsMethod; + if ((getCloseRowsMethod = SpannerLibGrpc.getCloseRowsMethod) == null) { + synchronized (SpannerLibGrpc.class) { + if ((getCloseRowsMethod = SpannerLibGrpc.getCloseRowsMethod) == null) { + SpannerLibGrpc.getCloseRowsMethod = + getCloseRowsMethod = + io.grpc.MethodDescriptor + .newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "CloseRows")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.cloud.spannerlib.v1.Rows.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.protobuf.Empty.getDefaultInstance())) + .setSchemaDescriptor(new SpannerLibMethodDescriptorSupplier("CloseRows")) + .build(); + } + } + } + return getCloseRowsMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.BeginTransactionRequest, com.google.protobuf.Empty> + getBeginTransactionMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "BeginTransaction", + requestType = com.google.cloud.spannerlib.v1.BeginTransactionRequest.class, + responseType = com.google.protobuf.Empty.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.BeginTransactionRequest, com.google.protobuf.Empty> + getBeginTransactionMethod() { + io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.BeginTransactionRequest, com.google.protobuf.Empty> + getBeginTransactionMethod; + if ((getBeginTransactionMethod = SpannerLibGrpc.getBeginTransactionMethod) == null) { + synchronized (SpannerLibGrpc.class) { + if ((getBeginTransactionMethod = SpannerLibGrpc.getBeginTransactionMethod) == null) { + SpannerLibGrpc.getBeginTransactionMethod = + getBeginTransactionMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "BeginTransaction")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.cloud.spannerlib.v1.BeginTransactionRequest + .getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.protobuf.Empty.getDefaultInstance())) + .setSchemaDescriptor( + new SpannerLibMethodDescriptorSupplier("BeginTransaction")) + .build(); + } + } + } + return getBeginTransactionMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.Connection, com.google.spanner.v1.CommitResponse> + getCommitMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "Commit", + requestType = com.google.cloud.spannerlib.v1.Connection.class, + responseType = com.google.spanner.v1.CommitResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.Connection, com.google.spanner.v1.CommitResponse> + getCommitMethod() { + io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.Connection, com.google.spanner.v1.CommitResponse> + getCommitMethod; + if ((getCommitMethod = SpannerLibGrpc.getCommitMethod) == null) { + synchronized (SpannerLibGrpc.class) { + if ((getCommitMethod = SpannerLibGrpc.getCommitMethod) == null) { + SpannerLibGrpc.getCommitMethod = + getCommitMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "Commit")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.cloud.spannerlib.v1.Connection.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.spanner.v1.CommitResponse.getDefaultInstance())) + .setSchemaDescriptor(new SpannerLibMethodDescriptorSupplier("Commit")) + .build(); + } + } + } + return getCommitMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.Connection, com.google.protobuf.Empty> + getRollbackMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "Rollback", + requestType = com.google.cloud.spannerlib.v1.Connection.class, + responseType = com.google.protobuf.Empty.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.Connection, com.google.protobuf.Empty> + getRollbackMethod() { + io.grpc.MethodDescriptor + getRollbackMethod; + if ((getRollbackMethod = SpannerLibGrpc.getRollbackMethod) == null) { + synchronized (SpannerLibGrpc.class) { + if ((getRollbackMethod = SpannerLibGrpc.getRollbackMethod) == null) { + SpannerLibGrpc.getRollbackMethod = + getRollbackMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "Rollback")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.cloud.spannerlib.v1.Connection.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.protobuf.Empty.getDefaultInstance())) + .setSchemaDescriptor(new SpannerLibMethodDescriptorSupplier("Rollback")) + .build(); + } + } + } + return getRollbackMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.WriteMutationsRequest, + com.google.spanner.v1.CommitResponse> + getWriteMutationsMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "WriteMutations", + requestType = com.google.cloud.spannerlib.v1.WriteMutationsRequest.class, + responseType = com.google.spanner.v1.CommitResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.WriteMutationsRequest, + com.google.spanner.v1.CommitResponse> + getWriteMutationsMethod() { + io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.WriteMutationsRequest, + com.google.spanner.v1.CommitResponse> + getWriteMutationsMethod; + if ((getWriteMutationsMethod = SpannerLibGrpc.getWriteMutationsMethod) == null) { + synchronized (SpannerLibGrpc.class) { + if ((getWriteMutationsMethod = SpannerLibGrpc.getWriteMutationsMethod) == null) { + SpannerLibGrpc.getWriteMutationsMethod = + getWriteMutationsMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "WriteMutations")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.cloud.spannerlib.v1.WriteMutationsRequest + .getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.spanner.v1.CommitResponse.getDefaultInstance())) + .setSchemaDescriptor(new SpannerLibMethodDescriptorSupplier("WriteMutations")) + .build(); + } + } + } + return getWriteMutationsMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.ConnectionStreamRequest, + com.google.cloud.spannerlib.v1.ConnectionStreamResponse> + getConnectionStreamMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "ConnectionStream", + requestType = com.google.cloud.spannerlib.v1.ConnectionStreamRequest.class, + responseType = com.google.cloud.spannerlib.v1.ConnectionStreamResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.BIDI_STREAMING) + public static io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.ConnectionStreamRequest, + com.google.cloud.spannerlib.v1.ConnectionStreamResponse> + getConnectionStreamMethod() { + io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.ConnectionStreamRequest, + com.google.cloud.spannerlib.v1.ConnectionStreamResponse> + getConnectionStreamMethod; + if ((getConnectionStreamMethod = SpannerLibGrpc.getConnectionStreamMethod) == null) { + synchronized (SpannerLibGrpc.class) { + if ((getConnectionStreamMethod = SpannerLibGrpc.getConnectionStreamMethod) == null) { + SpannerLibGrpc.getConnectionStreamMethod = + getConnectionStreamMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.BIDI_STREAMING) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ConnectionStream")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.cloud.spannerlib.v1.ConnectionStreamRequest + .getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.cloud.spannerlib.v1.ConnectionStreamResponse + .getDefaultInstance())) + .setSchemaDescriptor( + new SpannerLibMethodDescriptorSupplier("ConnectionStream")) + .build(); + } + } + } + return getConnectionStreamMethod; + } + + /** Creates a new async stub that supports all call types for the service */ + public static SpannerLibStub newStub(io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public SpannerLibStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new SpannerLibStub(channel, callOptions); + } + }; + return SpannerLibStub.newStub(factory, channel); + } + + /** Creates a new blocking-style stub that supports all types of calls on the service */ + public static SpannerLibBlockingV2Stub newBlockingV2Stub(io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public SpannerLibBlockingV2Stub newStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new SpannerLibBlockingV2Stub(channel, callOptions); + } + }; + return SpannerLibBlockingV2Stub.newStub(factory, channel); + } + + /** + * Creates a new blocking-style stub that supports unary and streaming output calls on the service + */ + public static SpannerLibBlockingStub newBlockingStub(io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public SpannerLibBlockingStub newStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new SpannerLibBlockingStub(channel, callOptions); + } + }; + return SpannerLibBlockingStub.newStub(factory, channel); + } + + /** Creates a new ListenableFuture-style stub that supports unary calls on the service */ + public static SpannerLibFutureStub newFutureStub(io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public SpannerLibFutureStub newStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new SpannerLibFutureStub(channel, callOptions); + } + }; + return SpannerLibFutureStub.newStub(factory, channel); + } + + /** */ + public interface AsyncService { + + /** */ + default void createPool( + com.google.cloud.spannerlib.v1.CreatePoolRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getCreatePoolMethod(), responseObserver); + } + + /** */ + default void closePool( + com.google.cloud.spannerlib.v1.Pool request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getClosePoolMethod(), responseObserver); + } + + /** */ + default void createConnection( + com.google.cloud.spannerlib.v1.CreateConnectionRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getCreateConnectionMethod(), responseObserver); + } + + /** */ + default void closeConnection( + com.google.cloud.spannerlib.v1.Connection request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getCloseConnectionMethod(), responseObserver); + } + + /** */ + default void execute( + com.google.cloud.spannerlib.v1.ExecuteRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getExecuteMethod(), responseObserver); + } + + /** */ + default void executeStreaming( + com.google.cloud.spannerlib.v1.ExecuteRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getExecuteStreamingMethod(), responseObserver); + } + + /** */ + default void executeBatch( + com.google.cloud.spannerlib.v1.ExecuteBatchRequest request, + io.grpc.stub.StreamObserver + responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getExecuteBatchMethod(), responseObserver); + } + + /** */ + default void metadata( + com.google.cloud.spannerlib.v1.Rows request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getMetadataMethod(), responseObserver); + } + + /** */ + default void next( + com.google.cloud.spannerlib.v1.NextRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getNextMethod(), responseObserver); + } + + /** */ + default void resultSetStats( + com.google.cloud.spannerlib.v1.Rows request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getResultSetStatsMethod(), responseObserver); + } + + /** */ + default void closeRows( + com.google.cloud.spannerlib.v1.Rows request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getCloseRowsMethod(), responseObserver); + } + + /** */ + default void beginTransaction( + com.google.cloud.spannerlib.v1.BeginTransactionRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getBeginTransactionMethod(), responseObserver); + } + + /** */ + default void commit( + com.google.cloud.spannerlib.v1.Connection request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getCommitMethod(), responseObserver); + } + + /** */ + default void rollback( + com.google.cloud.spannerlib.v1.Connection request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getRollbackMethod(), responseObserver); + } + + /** */ + default void writeMutations( + com.google.cloud.spannerlib.v1.WriteMutationsRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getWriteMutationsMethod(), responseObserver); + } + + /** */ + default io.grpc.stub.StreamObserver + connectionStream( + io.grpc.stub.StreamObserver + responseObserver) { + return io.grpc.stub.ServerCalls.asyncUnimplementedStreamingCall( + getConnectionStreamMethod(), responseObserver); + } + } + + /** Base class for the server implementation of the service SpannerLib. */ + public abstract static class SpannerLibImplBase implements io.grpc.BindableService, AsyncService { + + @java.lang.Override + public final io.grpc.ServerServiceDefinition bindService() { + return SpannerLibGrpc.bindService(this); + } + } + + /** A stub to allow clients to do asynchronous rpc calls to service SpannerLib. */ + public static final class SpannerLibStub extends io.grpc.stub.AbstractAsyncStub { + private SpannerLibStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected SpannerLibStub build(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new SpannerLibStub(channel, callOptions); + } + + /** */ + public void createPool( + com.google.cloud.spannerlib.v1.CreatePoolRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getCreatePoolMethod(), getCallOptions()), request, responseObserver); + } + + /** */ + public void closePool( + com.google.cloud.spannerlib.v1.Pool request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getClosePoolMethod(), getCallOptions()), request, responseObserver); + } + + /** */ + public void createConnection( + com.google.cloud.spannerlib.v1.CreateConnectionRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getCreateConnectionMethod(), getCallOptions()), + request, + responseObserver); + } + + /** */ + public void closeConnection( + com.google.cloud.spannerlib.v1.Connection request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getCloseConnectionMethod(), getCallOptions()), + request, + responseObserver); + } + + /** */ + public void execute( + com.google.cloud.spannerlib.v1.ExecuteRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getExecuteMethod(), getCallOptions()), request, responseObserver); + } + + /** */ + public void executeStreaming( + com.google.cloud.spannerlib.v1.ExecuteRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncServerStreamingCall( + getChannel().newCall(getExecuteStreamingMethod(), getCallOptions()), + request, + responseObserver); + } + + /** */ + public void executeBatch( + com.google.cloud.spannerlib.v1.ExecuteBatchRequest request, + io.grpc.stub.StreamObserver + responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getExecuteBatchMethod(), getCallOptions()), + request, + responseObserver); + } + + /** */ + public void metadata( + com.google.cloud.spannerlib.v1.Rows request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getMetadataMethod(), getCallOptions()), request, responseObserver); + } + + /** */ + public void next( + com.google.cloud.spannerlib.v1.NextRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getNextMethod(), getCallOptions()), request, responseObserver); + } + + /** */ + public void resultSetStats( + com.google.cloud.spannerlib.v1.Rows request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getResultSetStatsMethod(), getCallOptions()), + request, + responseObserver); + } + + /** */ + public void closeRows( + com.google.cloud.spannerlib.v1.Rows request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getCloseRowsMethod(), getCallOptions()), request, responseObserver); + } + + /** */ + public void beginTransaction( + com.google.cloud.spannerlib.v1.BeginTransactionRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getBeginTransactionMethod(), getCallOptions()), + request, + responseObserver); + } + + /** */ + public void commit( + com.google.cloud.spannerlib.v1.Connection request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getCommitMethod(), getCallOptions()), request, responseObserver); + } + + /** */ + public void rollback( + com.google.cloud.spannerlib.v1.Connection request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getRollbackMethod(), getCallOptions()), request, responseObserver); + } + + /** */ + public void writeMutations( + com.google.cloud.spannerlib.v1.WriteMutationsRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getWriteMutationsMethod(), getCallOptions()), + request, + responseObserver); + } + + /** */ + public io.grpc.stub.StreamObserver + connectionStream( + io.grpc.stub.StreamObserver + responseObserver) { + return io.grpc.stub.ClientCalls.asyncBidiStreamingCall( + getChannel().newCall(getConnectionStreamMethod(), getCallOptions()), responseObserver); + } + } + + /** A stub to allow clients to do synchronous rpc calls to service SpannerLib. */ + public static final class SpannerLibBlockingV2Stub + extends io.grpc.stub.AbstractBlockingStub { + private SpannerLibBlockingV2Stub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected SpannerLibBlockingV2Stub build( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new SpannerLibBlockingV2Stub(channel, callOptions); + } + + /** */ + public com.google.cloud.spannerlib.v1.Pool createPool( + com.google.cloud.spannerlib.v1.CreatePoolRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getCreatePoolMethod(), getCallOptions(), request); + } + + /** */ + public com.google.protobuf.Empty closePool(com.google.cloud.spannerlib.v1.Pool request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getClosePoolMethod(), getCallOptions(), request); + } + + /** */ + public com.google.cloud.spannerlib.v1.Connection createConnection( + com.google.cloud.spannerlib.v1.CreateConnectionRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getCreateConnectionMethod(), getCallOptions(), request); + } + + /** */ + public com.google.protobuf.Empty closeConnection( + com.google.cloud.spannerlib.v1.Connection request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getCloseConnectionMethod(), getCallOptions(), request); + } + + /** */ + public com.google.cloud.spannerlib.v1.Rows execute( + com.google.cloud.spannerlib.v1.ExecuteRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getExecuteMethod(), getCallOptions(), request); + } + + /** */ + @io.grpc.ExperimentalApi("https://github.com/grpc/grpc-java/issues/10918") + public io.grpc.stub.BlockingClientCall + executeStreaming(com.google.cloud.spannerlib.v1.ExecuteRequest request) { + return io.grpc.stub.ClientCalls.blockingV2ServerStreamingCall( + getChannel(), getExecuteStreamingMethod(), getCallOptions(), request); + } + + /** */ + public com.google.spanner.v1.ExecuteBatchDmlResponse executeBatch( + com.google.cloud.spannerlib.v1.ExecuteBatchRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getExecuteBatchMethod(), getCallOptions(), request); + } + + /** */ + public com.google.spanner.v1.ResultSetMetadata metadata( + com.google.cloud.spannerlib.v1.Rows request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getMetadataMethod(), getCallOptions(), request); + } + + /** */ + public com.google.protobuf.ListValue next(com.google.cloud.spannerlib.v1.NextRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getNextMethod(), getCallOptions(), request); + } + + /** */ + public com.google.spanner.v1.ResultSetStats resultSetStats( + com.google.cloud.spannerlib.v1.Rows request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getResultSetStatsMethod(), getCallOptions(), request); + } + + /** */ + public com.google.protobuf.Empty closeRows(com.google.cloud.spannerlib.v1.Rows request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getCloseRowsMethod(), getCallOptions(), request); + } + + /** */ + public com.google.protobuf.Empty beginTransaction( + com.google.cloud.spannerlib.v1.BeginTransactionRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getBeginTransactionMethod(), getCallOptions(), request); + } + + /** */ + public com.google.spanner.v1.CommitResponse commit( + com.google.cloud.spannerlib.v1.Connection request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getCommitMethod(), getCallOptions(), request); + } + + /** */ + public com.google.protobuf.Empty rollback(com.google.cloud.spannerlib.v1.Connection request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getRollbackMethod(), getCallOptions(), request); + } + + /** */ + public com.google.spanner.v1.CommitResponse writeMutations( + com.google.cloud.spannerlib.v1.WriteMutationsRequest request) + throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getWriteMutationsMethod(), getCallOptions(), request); + } + + /** */ + @io.grpc.ExperimentalApi("https://github.com/grpc/grpc-java/issues/10918") + public io.grpc.stub.BlockingClientCall< + com.google.cloud.spannerlib.v1.ConnectionStreamRequest, + com.google.cloud.spannerlib.v1.ConnectionStreamResponse> + connectionStream() { + return io.grpc.stub.ClientCalls.blockingBidiStreamingCall( + getChannel(), getConnectionStreamMethod(), getCallOptions()); + } + } + + /** A stub to allow clients to do limited synchronous rpc calls to service SpannerLib. */ + public static final class SpannerLibBlockingStub + extends io.grpc.stub.AbstractBlockingStub { + private SpannerLibBlockingStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected SpannerLibBlockingStub build( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new SpannerLibBlockingStub(channel, callOptions); + } + + /** */ + public com.google.cloud.spannerlib.v1.Pool createPool( + com.google.cloud.spannerlib.v1.CreatePoolRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getCreatePoolMethod(), getCallOptions(), request); + } + + /** */ + public com.google.protobuf.Empty closePool(com.google.cloud.spannerlib.v1.Pool request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getClosePoolMethod(), getCallOptions(), request); + } + + /** */ + public com.google.cloud.spannerlib.v1.Connection createConnection( + com.google.cloud.spannerlib.v1.CreateConnectionRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getCreateConnectionMethod(), getCallOptions(), request); + } + + /** */ + public com.google.protobuf.Empty closeConnection( + com.google.cloud.spannerlib.v1.Connection request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getCloseConnectionMethod(), getCallOptions(), request); + } + + /** */ + public com.google.cloud.spannerlib.v1.Rows execute( + com.google.cloud.spannerlib.v1.ExecuteRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getExecuteMethod(), getCallOptions(), request); + } + + /** */ + public java.util.Iterator executeStreaming( + com.google.cloud.spannerlib.v1.ExecuteRequest request) { + return io.grpc.stub.ClientCalls.blockingServerStreamingCall( + getChannel(), getExecuteStreamingMethod(), getCallOptions(), request); + } + + /** */ + public com.google.spanner.v1.ExecuteBatchDmlResponse executeBatch( + com.google.cloud.spannerlib.v1.ExecuteBatchRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getExecuteBatchMethod(), getCallOptions(), request); + } + + /** */ + public com.google.spanner.v1.ResultSetMetadata metadata( + com.google.cloud.spannerlib.v1.Rows request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getMetadataMethod(), getCallOptions(), request); + } + + /** */ + public com.google.protobuf.ListValue next(com.google.cloud.spannerlib.v1.NextRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getNextMethod(), getCallOptions(), request); + } + + /** */ + public com.google.spanner.v1.ResultSetStats resultSetStats( + com.google.cloud.spannerlib.v1.Rows request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getResultSetStatsMethod(), getCallOptions(), request); + } + + /** */ + public com.google.protobuf.Empty closeRows(com.google.cloud.spannerlib.v1.Rows request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getCloseRowsMethod(), getCallOptions(), request); + } + + /** */ + public com.google.protobuf.Empty beginTransaction( + com.google.cloud.spannerlib.v1.BeginTransactionRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getBeginTransactionMethod(), getCallOptions(), request); + } + + /** */ + public com.google.spanner.v1.CommitResponse commit( + com.google.cloud.spannerlib.v1.Connection request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getCommitMethod(), getCallOptions(), request); + } + + /** */ + public com.google.protobuf.Empty rollback(com.google.cloud.spannerlib.v1.Connection request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getRollbackMethod(), getCallOptions(), request); + } + + /** */ + public com.google.spanner.v1.CommitResponse writeMutations( + com.google.cloud.spannerlib.v1.WriteMutationsRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getWriteMutationsMethod(), getCallOptions(), request); + } + } + + /** A stub to allow clients to do ListenableFuture-style rpc calls to service SpannerLib. */ + public static final class SpannerLibFutureStub + extends io.grpc.stub.AbstractFutureStub { + private SpannerLibFutureStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected SpannerLibFutureStub build(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new SpannerLibFutureStub(channel, callOptions); + } + + /** */ + public com.google.common.util.concurrent.ListenableFuture + createPool(com.google.cloud.spannerlib.v1.CreatePoolRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getCreatePoolMethod(), getCallOptions()), request); + } + + /** */ + public com.google.common.util.concurrent.ListenableFuture closePool( + com.google.cloud.spannerlib.v1.Pool request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getClosePoolMethod(), getCallOptions()), request); + } + + /** */ + public com.google.common.util.concurrent.ListenableFuture< + com.google.cloud.spannerlib.v1.Connection> + createConnection(com.google.cloud.spannerlib.v1.CreateConnectionRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getCreateConnectionMethod(), getCallOptions()), request); + } + + /** */ + public com.google.common.util.concurrent.ListenableFuture + closeConnection(com.google.cloud.spannerlib.v1.Connection request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getCloseConnectionMethod(), getCallOptions()), request); + } + + /** */ + public com.google.common.util.concurrent.ListenableFuture + execute(com.google.cloud.spannerlib.v1.ExecuteRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getExecuteMethod(), getCallOptions()), request); + } + + /** */ + public com.google.common.util.concurrent.ListenableFuture< + com.google.spanner.v1.ExecuteBatchDmlResponse> + executeBatch(com.google.cloud.spannerlib.v1.ExecuteBatchRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getExecuteBatchMethod(), getCallOptions()), request); + } + + /** */ + public com.google.common.util.concurrent.ListenableFuture< + com.google.spanner.v1.ResultSetMetadata> + metadata(com.google.cloud.spannerlib.v1.Rows request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getMetadataMethod(), getCallOptions()), request); + } + + /** */ + public com.google.common.util.concurrent.ListenableFuture next( + com.google.cloud.spannerlib.v1.NextRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getNextMethod(), getCallOptions()), request); + } + + /** */ + public com.google.common.util.concurrent.ListenableFuture + resultSetStats(com.google.cloud.spannerlib.v1.Rows request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getResultSetStatsMethod(), getCallOptions()), request); + } + + /** */ + public com.google.common.util.concurrent.ListenableFuture closeRows( + com.google.cloud.spannerlib.v1.Rows request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getCloseRowsMethod(), getCallOptions()), request); + } + + /** */ + public com.google.common.util.concurrent.ListenableFuture + beginTransaction(com.google.cloud.spannerlib.v1.BeginTransactionRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getBeginTransactionMethod(), getCallOptions()), request); + } + + /** */ + public com.google.common.util.concurrent.ListenableFuture + commit(com.google.cloud.spannerlib.v1.Connection request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getCommitMethod(), getCallOptions()), request); + } + + /** */ + public com.google.common.util.concurrent.ListenableFuture rollback( + com.google.cloud.spannerlib.v1.Connection request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getRollbackMethod(), getCallOptions()), request); + } + + /** */ + public com.google.common.util.concurrent.ListenableFuture + writeMutations(com.google.cloud.spannerlib.v1.WriteMutationsRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getWriteMutationsMethod(), getCallOptions()), request); + } + } + + private static final int METHODID_CREATE_POOL = 0; + private static final int METHODID_CLOSE_POOL = 1; + private static final int METHODID_CREATE_CONNECTION = 2; + private static final int METHODID_CLOSE_CONNECTION = 3; + private static final int METHODID_EXECUTE = 4; + private static final int METHODID_EXECUTE_STREAMING = 5; + private static final int METHODID_EXECUTE_BATCH = 6; + private static final int METHODID_METADATA = 7; + private static final int METHODID_NEXT = 8; + private static final int METHODID_RESULT_SET_STATS = 9; + private static final int METHODID_CLOSE_ROWS = 10; + private static final int METHODID_BEGIN_TRANSACTION = 11; + private static final int METHODID_COMMIT = 12; + private static final int METHODID_ROLLBACK = 13; + private static final int METHODID_WRITE_MUTATIONS = 14; + private static final int METHODID_CONNECTION_STREAM = 15; + + private static final class MethodHandlers + implements io.grpc.stub.ServerCalls.UnaryMethod, + io.grpc.stub.ServerCalls.ServerStreamingMethod, + io.grpc.stub.ServerCalls.ClientStreamingMethod, + io.grpc.stub.ServerCalls.BidiStreamingMethod { + private final AsyncService serviceImpl; + private final int methodId; + + MethodHandlers(AsyncService serviceImpl, int methodId) { + this.serviceImpl = serviceImpl; + this.methodId = methodId; + } + + @java.lang.Override + @java.lang.SuppressWarnings("unchecked") + public void invoke(Req request, io.grpc.stub.StreamObserver responseObserver) { + switch (methodId) { + case METHODID_CREATE_POOL: + serviceImpl.createPool( + (com.google.cloud.spannerlib.v1.CreatePoolRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_CLOSE_POOL: + serviceImpl.closePool( + (com.google.cloud.spannerlib.v1.Pool) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_CREATE_CONNECTION: + serviceImpl.createConnection( + (com.google.cloud.spannerlib.v1.CreateConnectionRequest) request, + (io.grpc.stub.StreamObserver) + responseObserver); + break; + case METHODID_CLOSE_CONNECTION: + serviceImpl.closeConnection( + (com.google.cloud.spannerlib.v1.Connection) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_EXECUTE: + serviceImpl.execute( + (com.google.cloud.spannerlib.v1.ExecuteRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_EXECUTE_STREAMING: + serviceImpl.executeStreaming( + (com.google.cloud.spannerlib.v1.ExecuteRequest) request, + (io.grpc.stub.StreamObserver) + responseObserver); + break; + case METHODID_EXECUTE_BATCH: + serviceImpl.executeBatch( + (com.google.cloud.spannerlib.v1.ExecuteBatchRequest) request, + (io.grpc.stub.StreamObserver) + responseObserver); + break; + case METHODID_METADATA: + serviceImpl.metadata( + (com.google.cloud.spannerlib.v1.Rows) request, + (io.grpc.stub.StreamObserver) + responseObserver); + break; + case METHODID_NEXT: + serviceImpl.next( + (com.google.cloud.spannerlib.v1.NextRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_RESULT_SET_STATS: + serviceImpl.resultSetStats( + (com.google.cloud.spannerlib.v1.Rows) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_CLOSE_ROWS: + serviceImpl.closeRows( + (com.google.cloud.spannerlib.v1.Rows) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_BEGIN_TRANSACTION: + serviceImpl.beginTransaction( + (com.google.cloud.spannerlib.v1.BeginTransactionRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_COMMIT: + serviceImpl.commit( + (com.google.cloud.spannerlib.v1.Connection) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_ROLLBACK: + serviceImpl.rollback( + (com.google.cloud.spannerlib.v1.Connection) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_WRITE_MUTATIONS: + serviceImpl.writeMutations( + (com.google.cloud.spannerlib.v1.WriteMutationsRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + default: + throw new AssertionError(); + } + } + + @java.lang.Override + @java.lang.SuppressWarnings("unchecked") + public io.grpc.stub.StreamObserver invoke( + io.grpc.stub.StreamObserver responseObserver) { + switch (methodId) { + case METHODID_CONNECTION_STREAM: + return (io.grpc.stub.StreamObserver) + serviceImpl.connectionStream( + (io.grpc.stub.StreamObserver< + com.google.cloud.spannerlib.v1.ConnectionStreamResponse>) + responseObserver); + default: + throw new AssertionError(); + } + } + } + + public static final io.grpc.ServerServiceDefinition bindService(AsyncService service) { + return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor()) + .addMethod( + getCreatePoolMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.cloud.spannerlib.v1.CreatePoolRequest, + com.google.cloud.spannerlib.v1.Pool>(service, METHODID_CREATE_POOL))) + .addMethod( + getClosePoolMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers( + service, METHODID_CLOSE_POOL))) + .addMethod( + getCreateConnectionMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.cloud.spannerlib.v1.CreateConnectionRequest, + com.google.cloud.spannerlib.v1.Connection>( + service, METHODID_CREATE_CONNECTION))) + .addMethod( + getCloseConnectionMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.cloud.spannerlib.v1.Connection, com.google.protobuf.Empty>( + service, METHODID_CLOSE_CONNECTION))) + .addMethod( + getExecuteMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.cloud.spannerlib.v1.ExecuteRequest, + com.google.cloud.spannerlib.v1.Rows>(service, METHODID_EXECUTE))) + .addMethod( + getExecuteStreamingMethod(), + io.grpc.stub.ServerCalls.asyncServerStreamingCall( + new MethodHandlers< + com.google.cloud.spannerlib.v1.ExecuteRequest, + com.google.cloud.spannerlib.v1.RowData>(service, METHODID_EXECUTE_STREAMING))) + .addMethod( + getExecuteBatchMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.cloud.spannerlib.v1.ExecuteBatchRequest, + com.google.spanner.v1.ExecuteBatchDmlResponse>( + service, METHODID_EXECUTE_BATCH))) + .addMethod( + getMetadataMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.cloud.spannerlib.v1.Rows, com.google.spanner.v1.ResultSetMetadata>( + service, METHODID_METADATA))) + .addMethod( + getNextMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.cloud.spannerlib.v1.NextRequest, com.google.protobuf.ListValue>( + service, METHODID_NEXT))) + .addMethod( + getResultSetStatsMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.cloud.spannerlib.v1.Rows, com.google.spanner.v1.ResultSetStats>( + service, METHODID_RESULT_SET_STATS))) + .addMethod( + getCloseRowsMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers( + service, METHODID_CLOSE_ROWS))) + .addMethod( + getBeginTransactionMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.cloud.spannerlib.v1.BeginTransactionRequest, + com.google.protobuf.Empty>(service, METHODID_BEGIN_TRANSACTION))) + .addMethod( + getCommitMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.cloud.spannerlib.v1.Connection, + com.google.spanner.v1.CommitResponse>(service, METHODID_COMMIT))) + .addMethod( + getRollbackMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.cloud.spannerlib.v1.Connection, com.google.protobuf.Empty>( + service, METHODID_ROLLBACK))) + .addMethod( + getWriteMutationsMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.cloud.spannerlib.v1.WriteMutationsRequest, + com.google.spanner.v1.CommitResponse>(service, METHODID_WRITE_MUTATIONS))) + .addMethod( + getConnectionStreamMethod(), + io.grpc.stub.ServerCalls.asyncBidiStreamingCall( + new MethodHandlers< + com.google.cloud.spannerlib.v1.ConnectionStreamRequest, + com.google.cloud.spannerlib.v1.ConnectionStreamResponse>( + service, METHODID_CONNECTION_STREAM))) + .build(); + } + + private abstract static class SpannerLibBaseDescriptorSupplier + implements io.grpc.protobuf.ProtoFileDescriptorSupplier, + io.grpc.protobuf.ProtoServiceDescriptorSupplier { + SpannerLibBaseDescriptorSupplier() {} + + @java.lang.Override + public com.google.protobuf.Descriptors.FileDescriptor getFileDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto.getDescriptor(); + } + + @java.lang.Override + public com.google.protobuf.Descriptors.ServiceDescriptor getServiceDescriptor() { + return getFileDescriptor().findServiceByName("SpannerLib"); + } + } + + private static final class SpannerLibFileDescriptorSupplier + extends SpannerLibBaseDescriptorSupplier { + SpannerLibFileDescriptorSupplier() {} + } + + private static final class SpannerLibMethodDescriptorSupplier + extends SpannerLibBaseDescriptorSupplier + implements io.grpc.protobuf.ProtoMethodDescriptorSupplier { + private final java.lang.String methodName; + + SpannerLibMethodDescriptorSupplier(java.lang.String methodName) { + this.methodName = methodName; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.MethodDescriptor getMethodDescriptor() { + return getServiceDescriptor().findMethodByName(methodName); + } + } + + private static volatile io.grpc.ServiceDescriptor serviceDescriptor; + + public static io.grpc.ServiceDescriptor getServiceDescriptor() { + io.grpc.ServiceDescriptor result = serviceDescriptor; + if (result == null) { + synchronized (SpannerLibGrpc.class) { + result = serviceDescriptor; + if (result == null) { + serviceDescriptor = + result = + io.grpc.ServiceDescriptor.newBuilder(SERVICE_NAME) + .setSchemaDescriptor(new SpannerLibFileDescriptorSupplier()) + .addMethod(getCreatePoolMethod()) + .addMethod(getClosePoolMethod()) + .addMethod(getCreateConnectionMethod()) + .addMethod(getCloseConnectionMethod()) + .addMethod(getExecuteMethod()) + .addMethod(getExecuteStreamingMethod()) + .addMethod(getExecuteBatchMethod()) + .addMethod(getMetadataMethod()) + .addMethod(getNextMethod()) + .addMethod(getResultSetStatsMethod()) + .addMethod(getCloseRowsMethod()) + .addMethod(getBeginTransactionMethod()) + .addMethod(getCommitMethod()) + .addMethod(getRollbackMethod()) + .addMethod(getWriteMutationsMethod()) + .addMethod(getConnectionStreamMethod()) + .build(); + } + } + } + return result; + } +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/SpannerLibProto.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/SpannerLibProto.java new file mode 100644 index 00000000..a1e78d92 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/SpannerLibProto.java @@ -0,0 +1,329 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +@com.google.protobuf.Generated +public final class SpannerLibProto extends com.google.protobuf.GeneratedFile { + private SpannerLibProto() {} + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 32, + /* patch= */ 1, + /* suffix= */ "", + SpannerLibProto.class.getName()); + } + + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {} + + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions((com.google.protobuf.ExtensionRegistryLite) registry); + } + + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spannerlib_v1_CreatePoolRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spannerlib_v1_CreatePoolRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spannerlib_v1_CreateConnectionRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spannerlib_v1_CreateConnectionRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spannerlib_v1_ExecuteRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spannerlib_v1_ExecuteRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spannerlib_v1_ExecuteBatchRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spannerlib_v1_ExecuteBatchRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spannerlib_v1_BeginTransactionRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spannerlib_v1_BeginTransactionRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spannerlib_v1_WriteMutationsRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spannerlib_v1_WriteMutationsRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spannerlib_v1_Pool_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spannerlib_v1_Pool_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spannerlib_v1_Connection_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spannerlib_v1_Connection_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spannerlib_v1_Rows_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spannerlib_v1_Rows_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spannerlib_v1_NextRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spannerlib_v1_NextRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spannerlib_v1_RowData_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spannerlib_v1_RowData_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spannerlib_v1_MetadataRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spannerlib_v1_MetadataRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spannerlib_v1_ResultSetStatsRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spannerlib_v1_ResultSetStatsRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spannerlib_v1_ConnectionStreamRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spannerlib_v1_ConnectionStreamRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spannerlib_v1_ConnectionStreamResponse_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spannerlib_v1_ConnectionStreamResponse_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + return descriptor; + } + + private static com.google.protobuf.Descriptors.FileDescriptor descriptor; + + static { + java.lang.String[] descriptorData = { + "\n%google/spannerlib/v1/spannerlib.proto\022" + + "\024google.spannerlib.v1\032\037google/api/field_" + + "behavior.proto\032\033google/protobuf/empty.pr" + + "oto\032\034google/protobuf/struct.proto\032\"googl" + + "e/spanner/v1/result_set.proto\032\037google/sp" + + "anner/v1/spanner.proto\032#google/spanner/v" + + "1/transaction.proto\"3\n\021CreatePoolRequest" + + "\022\036\n\021connection_string\030\001 \001(\tB\003\340A\002\"H\n\027Crea" + + "teConnectionRequest\022-\n\004pool\030\001 \001(\0132\032.goog" + + "le.spannerlib.v1.PoolB\003\340A\002\"\223\001\n\016ExecuteRe" + + "quest\0229\n\nconnection\030\001 \001(\0132 .google.spann" + + "erlib.v1.ConnectionB\003\340A\002\022F\n\023execute_sql_" + + "request\030\002 \001(\0132$.google.spanner.v1.Execut" + + "eSqlRequestB\003\340A\002\"\243\001\n\023ExecuteBatchRequest" + + "\0229\n\nconnection\030\001 \001(\0132 .google.spannerlib" + + ".v1.ConnectionB\003\340A\002\022Q\n\031execute_batch_dml" + + "_request\030\002 \001(\0132).google.spanner.v1.Execu" + + "teBatchDmlRequestB\003\340A\002\"\235\001\n\027BeginTransact" + + "ionRequest\0229\n\nconnection\030\001 \001(\0132 .google." + + "spannerlib.v1.ConnectionB\003\340A\002\022G\n\023transac" + + "tion_options\030\002 \001(\0132%.google.spanner.v1.T" + + "ransactionOptionsB\003\340A\002\"\236\001\n\025WriteMutation" + + "sRequest\0229\n\nconnection\030\001 \001(\0132 .google.sp" + + "annerlib.v1.ConnectionB\003\340A\002\022J\n\tmutations" + + "\030\002 \001(\01322.google.spanner.v1.BatchWriteReq" + + "uest.MutationGroupB\003\340A\002\"\027\n\004Pool\022\017\n\002id\030\001 " + + "\001(\003B\003\340A\002\"L\n\nConnection\022-\n\004pool\030\001 \001(\0132\032.g" + + "oogle.spannerlib.v1.PoolB\003\340A\002\022\017\n\002id\030\002 \001(" + + "\003B\003\340A\002\"R\n\004Rows\0229\n\nconnection\030\001 \001(\0132 .goo" + + "gle.spannerlib.v1.ConnectionB\003\340A\002\022\017\n\002id\030" + + "\002 \001(\003B\003\340A\002\"j\n\013NextRequest\022-\n\004rows\030\001 \001(\0132" + + "\032.google.spannerlib.v1.RowsB\003\340A\002\022\025\n\010num_" + + "rows\030\002 \001(\003B\003\340A\002\022\025\n\010encoding\030\003 \001(\003B\003\340A\002\"\321" + + "\001\n\007RowData\022-\n\004rows\030\001 \001(\0132\032.google.spanne" + + "rlib.v1.RowsB\003\340A\002\0226\n\010metadata\030\002 \001(\0132$.go" + + "ogle.spanner.v1.ResultSetMetadata\022-\n\004dat" + + "a\030\003 \003(\0132\032.google.protobuf.ListValueB\003\340A\002" + + "\0220\n\005stats\030\004 \001(\0132!.google.spanner.v1.Resu" + + "ltSetStats\"@\n\017MetadataRequest\022-\n\004rows\030\001 " + + "\001(\0132\032.google.spannerlib.v1.RowsB\003\340A\002\"F\n\025" + + "ResultSetStatsRequest\022-\n\004rows\030\001 \001(\0132\032.go" + + "ogle.spannerlib.v1.RowsB\003\340A\002\"e\n\027Connecti" + + "onStreamRequest\022?\n\017execute_request\030\001 \001(\013" + + "2$.google.spannerlib.v1.ExecuteRequestH\000" + + "B\t\n\007request\"Z\n\030ConnectionStreamResponse\022" + + "2\n\003row\030\001 \001(\0132#.google.spanner.v1.Partial" + + "ResultSetH\000B\n\n\010response2\361\n\n\nSpannerLib\022S" + + "\n\nCreatePool\022\'.google.spannerlib.v1.Crea" + + "tePoolRequest\032\032.google.spannerlib.v1.Poo" + + "l\"\000\022A\n\tClosePool\022\032.google.spannerlib.v1." + + "Pool\032\026.google.protobuf.Empty\"\000\022e\n\020Create" + + "Connection\022-.google.spannerlib.v1.Create" + + "ConnectionRequest\032 .google.spannerlib.v1" + + ".Connection\"\000\022M\n\017CloseConnection\022 .googl" + + "e.spannerlib.v1.Connection\032\026.google.prot" + + "obuf.Empty\"\000\022M\n\007Execute\022$.google.spanner" + + "lib.v1.ExecuteRequest\032\032.google.spannerli" + + "b.v1.Rows\"\000\022[\n\020ExecuteStreaming\022$.google" + + ".spannerlib.v1.ExecuteRequest\032\035.google.s" + + "pannerlib.v1.RowData\"\0000\001\022g\n\014ExecuteBatch" + + "\022).google.spannerlib.v1.ExecuteBatchRequ" + + "est\032*.google.spanner.v1.ExecuteBatchDmlR" + + "esponse\"\000\022N\n\010Metadata\022\032.google.spannerli" + + "b.v1.Rows\032$.google.spanner.v1.ResultSetM" + + "etadata\"\000\022G\n\004Next\022!.google.spannerlib.v1" + + ".NextRequest\032\032.google.protobuf.ListValue" + + "\"\000\022Q\n\016ResultSetStats\022\032.google.spannerlib" + + ".v1.Rows\032!.google.spanner.v1.ResultSetSt" + + "ats\"\000\022A\n\tCloseRows\022\032.google.spannerlib.v" + + "1.Rows\032\026.google.protobuf.Empty\"\000\022[\n\020Begi" + + "nTransaction\022-.google.spannerlib.v1.Begi" + + "nTransactionRequest\032\026.google.protobuf.Em" + + "pty\"\000\022O\n\006Commit\022 .google.spannerlib.v1.C" + + "onnection\032!.google.spanner.v1.CommitResp" + + "onse\"\000\022F\n\010Rollback\022 .google.spannerlib.v" + + "1.Connection\032\026.google.protobuf.Empty\"\000\022b" + + "\n\016WriteMutations\022+.google.spannerlib.v1." + + "WriteMutationsRequest\032!.google.spanner.v" + + "1.CommitResponse\"\000\022w\n\020ConnectionStream\022-" + + ".google.spannerlib.v1.ConnectionStreamRe" + + "quest\032..google.spannerlib.v1.ConnectionS" + + "treamResponse\"\000(\0010\001B\315\001\n\036com.google.cloud" + + ".spannerlib.v1B\017SpannerLibProtoP\001Z>cloud" + + ".google.com/go/spannerlib/apiv1/spannerl" + + "ibpb;spannerlibpb\252\002\032Google.Cloud.Spanner" + + "Lib.V1\312\002\032Google\\Cloud\\SpannerLib\\V1\352\002\035Go" + + "ogle::Cloud::SpannerLib::V1b\006proto3" + }; + descriptor = + com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( + descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + com.google.api.FieldBehaviorProto.getDescriptor(), + com.google.protobuf.EmptyProto.getDescriptor(), + com.google.protobuf.StructProto.getDescriptor(), + com.google.spanner.v1.ResultSetProto.getDescriptor(), + com.google.spanner.v1.SpannerProto.getDescriptor(), + com.google.spanner.v1.TransactionProto.getDescriptor(), + }); + internal_static_google_spannerlib_v1_CreatePoolRequest_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_google_spannerlib_v1_CreatePoolRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spannerlib_v1_CreatePoolRequest_descriptor, + new java.lang.String[] { + "ConnectionString", + }); + internal_static_google_spannerlib_v1_CreateConnectionRequest_descriptor = + getDescriptor().getMessageTypes().get(1); + internal_static_google_spannerlib_v1_CreateConnectionRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spannerlib_v1_CreateConnectionRequest_descriptor, + new java.lang.String[] { + "Pool", + }); + internal_static_google_spannerlib_v1_ExecuteRequest_descriptor = + getDescriptor().getMessageTypes().get(2); + internal_static_google_spannerlib_v1_ExecuteRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spannerlib_v1_ExecuteRequest_descriptor, + new java.lang.String[] { + "Connection", "ExecuteSqlRequest", + }); + internal_static_google_spannerlib_v1_ExecuteBatchRequest_descriptor = + getDescriptor().getMessageTypes().get(3); + internal_static_google_spannerlib_v1_ExecuteBatchRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spannerlib_v1_ExecuteBatchRequest_descriptor, + new java.lang.String[] { + "Connection", "ExecuteBatchDmlRequest", + }); + internal_static_google_spannerlib_v1_BeginTransactionRequest_descriptor = + getDescriptor().getMessageTypes().get(4); + internal_static_google_spannerlib_v1_BeginTransactionRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spannerlib_v1_BeginTransactionRequest_descriptor, + new java.lang.String[] { + "Connection", "TransactionOptions", + }); + internal_static_google_spannerlib_v1_WriteMutationsRequest_descriptor = + getDescriptor().getMessageTypes().get(5); + internal_static_google_spannerlib_v1_WriteMutationsRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spannerlib_v1_WriteMutationsRequest_descriptor, + new java.lang.String[] { + "Connection", "Mutations", + }); + internal_static_google_spannerlib_v1_Pool_descriptor = getDescriptor().getMessageTypes().get(6); + internal_static_google_spannerlib_v1_Pool_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spannerlib_v1_Pool_descriptor, + new java.lang.String[] { + "Id", + }); + internal_static_google_spannerlib_v1_Connection_descriptor = + getDescriptor().getMessageTypes().get(7); + internal_static_google_spannerlib_v1_Connection_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spannerlib_v1_Connection_descriptor, + new java.lang.String[] { + "Pool", "Id", + }); + internal_static_google_spannerlib_v1_Rows_descriptor = getDescriptor().getMessageTypes().get(8); + internal_static_google_spannerlib_v1_Rows_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spannerlib_v1_Rows_descriptor, + new java.lang.String[] { + "Connection", "Id", + }); + internal_static_google_spannerlib_v1_NextRequest_descriptor = + getDescriptor().getMessageTypes().get(9); + internal_static_google_spannerlib_v1_NextRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spannerlib_v1_NextRequest_descriptor, + new java.lang.String[] { + "Rows", "NumRows", "Encoding", + }); + internal_static_google_spannerlib_v1_RowData_descriptor = + getDescriptor().getMessageTypes().get(10); + internal_static_google_spannerlib_v1_RowData_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spannerlib_v1_RowData_descriptor, + new java.lang.String[] { + "Rows", "Metadata", "Data", "Stats", + }); + internal_static_google_spannerlib_v1_MetadataRequest_descriptor = + getDescriptor().getMessageTypes().get(11); + internal_static_google_spannerlib_v1_MetadataRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spannerlib_v1_MetadataRequest_descriptor, + new java.lang.String[] { + "Rows", + }); + internal_static_google_spannerlib_v1_ResultSetStatsRequest_descriptor = + getDescriptor().getMessageTypes().get(12); + internal_static_google_spannerlib_v1_ResultSetStatsRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spannerlib_v1_ResultSetStatsRequest_descriptor, + new java.lang.String[] { + "Rows", + }); + internal_static_google_spannerlib_v1_ConnectionStreamRequest_descriptor = + getDescriptor().getMessageTypes().get(13); + internal_static_google_spannerlib_v1_ConnectionStreamRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spannerlib_v1_ConnectionStreamRequest_descriptor, + new java.lang.String[] { + "ExecuteRequest", "Request", + }); + internal_static_google_spannerlib_v1_ConnectionStreamResponse_descriptor = + getDescriptor().getMessageTypes().get(14); + internal_static_google_spannerlib_v1_ConnectionStreamResponse_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spannerlib_v1_ConnectionStreamResponse_descriptor, + new java.lang.String[] { + "Row", "Response", + }); + descriptor.resolveAllFeaturesImmutable(); + com.google.api.FieldBehaviorProto.getDescriptor(); + com.google.protobuf.EmptyProto.getDescriptor(); + com.google.protobuf.StructProto.getDescriptor(); + com.google.spanner.v1.ResultSetProto.getDescriptor(); + com.google.spanner.v1.SpannerProto.getDescriptor(); + com.google.spanner.v1.TransactionProto.getDescriptor(); + com.google.protobuf.ExtensionRegistry registry = + com.google.protobuf.ExtensionRegistry.newInstance(); + registry.add(com.google.api.FieldBehaviorProto.fieldBehavior); + com.google.protobuf.Descriptors.FileDescriptor.internalUpdateFileDescriptor( + descriptor, registry); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/WriteMutationsRequest.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/WriteMutationsRequest.java new file mode 100644 index 00000000..e8cd7b51 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/WriteMutationsRequest.java @@ -0,0 +1,855 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +/** Protobuf type {@code google.spannerlib.v1.WriteMutationsRequest} */ +@com.google.protobuf.Generated +public final class WriteMutationsRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spannerlib.v1.WriteMutationsRequest) + WriteMutationsRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 32, + /* patch= */ 1, + /* suffix= */ "", + WriteMutationsRequest.class.getName()); + } + + // Use WriteMutationsRequest.newBuilder() to construct. + private WriteMutationsRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private WriteMutationsRequest() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_WriteMutationsRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_WriteMutationsRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.WriteMutationsRequest.class, + com.google.cloud.spannerlib.v1.WriteMutationsRequest.Builder.class); + } + + private int bitField0_; + public static final int CONNECTION_FIELD_NUMBER = 1; + private com.google.cloud.spannerlib.v1.Connection connection_; + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the connection field is set. + */ + @java.lang.Override + public boolean hasConnection() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The connection. + */ + @java.lang.Override + public com.google.cloud.spannerlib.v1.Connection getConnection() { + return connection_ == null + ? com.google.cloud.spannerlib.v1.Connection.getDefaultInstance() + : connection_; + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public com.google.cloud.spannerlib.v1.ConnectionOrBuilder getConnectionOrBuilder() { + return connection_ == null + ? com.google.cloud.spannerlib.v1.Connection.getDefaultInstance() + : connection_; + } + + public static final int MUTATIONS_FIELD_NUMBER = 2; + private com.google.spanner.v1.BatchWriteRequest.MutationGroup mutations_; + + /** + * + * .google.spanner.v1.BatchWriteRequest.MutationGroup mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the mutations field is set. + */ + @java.lang.Override + public boolean hasMutations() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * .google.spanner.v1.BatchWriteRequest.MutationGroup mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The mutations. + */ + @java.lang.Override + public com.google.spanner.v1.BatchWriteRequest.MutationGroup getMutations() { + return mutations_ == null + ? com.google.spanner.v1.BatchWriteRequest.MutationGroup.getDefaultInstance() + : mutations_; + } + + /** + * + * .google.spanner.v1.BatchWriteRequest.MutationGroup mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public com.google.spanner.v1.BatchWriteRequest.MutationGroupOrBuilder getMutationsOrBuilder() { + return mutations_ == null + ? com.google.spanner.v1.BatchWriteRequest.MutationGroup.getDefaultInstance() + : mutations_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(1, getConnection()); + } + if (((bitField0_ & 0x00000002) != 0)) { + output.writeMessage(2, getMutations()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getConnection()); + } + if (((bitField0_ & 0x00000002) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getMutations()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.cloud.spannerlib.v1.WriteMutationsRequest)) { + return super.equals(obj); + } + com.google.cloud.spannerlib.v1.WriteMutationsRequest other = + (com.google.cloud.spannerlib.v1.WriteMutationsRequest) obj; + + if (hasConnection() != other.hasConnection()) return false; + if (hasConnection()) { + if (!getConnection().equals(other.getConnection())) return false; + } + if (hasMutations() != other.hasMutations()) return false; + if (hasMutations()) { + if (!getMutations().equals(other.getMutations())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasConnection()) { + hash = (37 * hash) + CONNECTION_FIELD_NUMBER; + hash = (53 * hash) + getConnection().hashCode(); + } + if (hasMutations()) { + hash = (37 * hash) + MUTATIONS_FIELD_NUMBER; + hash = (53 * hash) + getMutations().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.cloud.spannerlib.v1.WriteMutationsRequest parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.WriteMutationsRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.WriteMutationsRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.WriteMutationsRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.WriteMutationsRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.WriteMutationsRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.WriteMutationsRequest parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.WriteMutationsRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.WriteMutationsRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.WriteMutationsRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.WriteMutationsRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.WriteMutationsRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.cloud.spannerlib.v1.WriteMutationsRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** Protobuf type {@code google.spannerlib.v1.WriteMutationsRequest} */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spannerlib.v1.WriteMutationsRequest) + com.google.cloud.spannerlib.v1.WriteMutationsRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_WriteMutationsRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_WriteMutationsRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.WriteMutationsRequest.class, + com.google.cloud.spannerlib.v1.WriteMutationsRequest.Builder.class); + } + + // Construct using com.google.cloud.spannerlib.v1.WriteMutationsRequest.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + internalGetConnectionFieldBuilder(); + internalGetMutationsFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + connection_ = null; + if (connectionBuilder_ != null) { + connectionBuilder_.dispose(); + connectionBuilder_ = null; + } + mutations_ = null; + if (mutationsBuilder_ != null) { + mutationsBuilder_.dispose(); + mutationsBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_WriteMutationsRequest_descriptor; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.WriteMutationsRequest getDefaultInstanceForType() { + return com.google.cloud.spannerlib.v1.WriteMutationsRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.WriteMutationsRequest build() { + com.google.cloud.spannerlib.v1.WriteMutationsRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.WriteMutationsRequest buildPartial() { + com.google.cloud.spannerlib.v1.WriteMutationsRequest result = + new com.google.cloud.spannerlib.v1.WriteMutationsRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.cloud.spannerlib.v1.WriteMutationsRequest result) { + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.connection_ = connectionBuilder_ == null ? connection_ : connectionBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.mutations_ = mutationsBuilder_ == null ? mutations_ : mutationsBuilder_.build(); + to_bitField0_ |= 0x00000002; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.cloud.spannerlib.v1.WriteMutationsRequest) { + return mergeFrom((com.google.cloud.spannerlib.v1.WriteMutationsRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.cloud.spannerlib.v1.WriteMutationsRequest other) { + if (other == com.google.cloud.spannerlib.v1.WriteMutationsRequest.getDefaultInstance()) + return this; + if (other.hasConnection()) { + mergeConnection(other.getConnection()); + } + if (other.hasMutations()) { + mergeMutations(other.getMutations()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + input.readMessage( + internalGetConnectionFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + input.readMessage( + internalGetMutationsFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.cloud.spannerlib.v1.Connection connection_; + private com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.Connection, + com.google.cloud.spannerlib.v1.Connection.Builder, + com.google.cloud.spannerlib.v1.ConnectionOrBuilder> + connectionBuilder_; + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the connection field is set. + */ + public boolean hasConnection() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The connection. + */ + public com.google.cloud.spannerlib.v1.Connection getConnection() { + if (connectionBuilder_ == null) { + return connection_ == null + ? com.google.cloud.spannerlib.v1.Connection.getDefaultInstance() + : connection_; + } else { + return connectionBuilder_.getMessage(); + } + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setConnection(com.google.cloud.spannerlib.v1.Connection value) { + if (connectionBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + connection_ = value; + } else { + connectionBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setConnection( + com.google.cloud.spannerlib.v1.Connection.Builder builderForValue) { + if (connectionBuilder_ == null) { + connection_ = builderForValue.build(); + } else { + connectionBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder mergeConnection(com.google.cloud.spannerlib.v1.Connection value) { + if (connectionBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0) + && connection_ != null + && connection_ != com.google.cloud.spannerlib.v1.Connection.getDefaultInstance()) { + getConnectionBuilder().mergeFrom(value); + } else { + connection_ = value; + } + } else { + connectionBuilder_.mergeFrom(value); + } + if (connection_ != null) { + bitField0_ |= 0x00000001; + onChanged(); + } + return this; + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder clearConnection() { + bitField0_ = (bitField0_ & ~0x00000001); + connection_ = null; + if (connectionBuilder_ != null) { + connectionBuilder_.dispose(); + connectionBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.cloud.spannerlib.v1.Connection.Builder getConnectionBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return internalGetConnectionFieldBuilder().getBuilder(); + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.cloud.spannerlib.v1.ConnectionOrBuilder getConnectionOrBuilder() { + if (connectionBuilder_ != null) { + return connectionBuilder_.getMessageOrBuilder(); + } else { + return connection_ == null + ? com.google.cloud.spannerlib.v1.Connection.getDefaultInstance() + : connection_; + } + } + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.Connection, + com.google.cloud.spannerlib.v1.Connection.Builder, + com.google.cloud.spannerlib.v1.ConnectionOrBuilder> + internalGetConnectionFieldBuilder() { + if (connectionBuilder_ == null) { + connectionBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.cloud.spannerlib.v1.Connection, + com.google.cloud.spannerlib.v1.Connection.Builder, + com.google.cloud.spannerlib.v1.ConnectionOrBuilder>( + getConnection(), getParentForChildren(), isClean()); + connection_ = null; + } + return connectionBuilder_; + } + + private com.google.spanner.v1.BatchWriteRequest.MutationGroup mutations_; + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.BatchWriteRequest.MutationGroup, + com.google.spanner.v1.BatchWriteRequest.MutationGroup.Builder, + com.google.spanner.v1.BatchWriteRequest.MutationGroupOrBuilder> + mutationsBuilder_; + + /** + * + * .google.spanner.v1.BatchWriteRequest.MutationGroup mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the mutations field is set. + */ + public boolean hasMutations() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * .google.spanner.v1.BatchWriteRequest.MutationGroup mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The mutations. + */ + public com.google.spanner.v1.BatchWriteRequest.MutationGroup getMutations() { + if (mutationsBuilder_ == null) { + return mutations_ == null + ? com.google.spanner.v1.BatchWriteRequest.MutationGroup.getDefaultInstance() + : mutations_; + } else { + return mutationsBuilder_.getMessage(); + } + } + + /** + * + * .google.spanner.v1.BatchWriteRequest.MutationGroup mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setMutations(com.google.spanner.v1.BatchWriteRequest.MutationGroup value) { + if (mutationsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + mutations_ = value; + } else { + mutationsBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * .google.spanner.v1.BatchWriteRequest.MutationGroup mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setMutations( + com.google.spanner.v1.BatchWriteRequest.MutationGroup.Builder builderForValue) { + if (mutationsBuilder_ == null) { + mutations_ = builderForValue.build(); + } else { + mutationsBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * .google.spanner.v1.BatchWriteRequest.MutationGroup mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder mergeMutations(com.google.spanner.v1.BatchWriteRequest.MutationGroup value) { + if (mutationsBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0) + && mutations_ != null + && mutations_ + != com.google.spanner.v1.BatchWriteRequest.MutationGroup.getDefaultInstance()) { + getMutationsBuilder().mergeFrom(value); + } else { + mutations_ = value; + } + } else { + mutationsBuilder_.mergeFrom(value); + } + if (mutations_ != null) { + bitField0_ |= 0x00000002; + onChanged(); + } + return this; + } + + /** + * + * .google.spanner.v1.BatchWriteRequest.MutationGroup mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder clearMutations() { + bitField0_ = (bitField0_ & ~0x00000002); + mutations_ = null; + if (mutationsBuilder_ != null) { + mutationsBuilder_.dispose(); + mutationsBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * .google.spanner.v1.BatchWriteRequest.MutationGroup mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.spanner.v1.BatchWriteRequest.MutationGroup.Builder getMutationsBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return internalGetMutationsFieldBuilder().getBuilder(); + } + + /** + * + * .google.spanner.v1.BatchWriteRequest.MutationGroup mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.spanner.v1.BatchWriteRequest.MutationGroupOrBuilder getMutationsOrBuilder() { + if (mutationsBuilder_ != null) { + return mutationsBuilder_.getMessageOrBuilder(); + } else { + return mutations_ == null + ? com.google.spanner.v1.BatchWriteRequest.MutationGroup.getDefaultInstance() + : mutations_; + } + } + + /** + * + * .google.spanner.v1.BatchWriteRequest.MutationGroup mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + private com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.BatchWriteRequest.MutationGroup, + com.google.spanner.v1.BatchWriteRequest.MutationGroup.Builder, + com.google.spanner.v1.BatchWriteRequest.MutationGroupOrBuilder> + internalGetMutationsFieldBuilder() { + if (mutationsBuilder_ == null) { + mutationsBuilder_ = + new com.google.protobuf.SingleFieldBuilder< + com.google.spanner.v1.BatchWriteRequest.MutationGroup, + com.google.spanner.v1.BatchWriteRequest.MutationGroup.Builder, + com.google.spanner.v1.BatchWriteRequest.MutationGroupOrBuilder>( + getMutations(), getParentForChildren(), isClean()); + mutations_ = null; + } + return mutationsBuilder_; + } + + // @@protoc_insertion_point(builder_scope:google.spannerlib.v1.WriteMutationsRequest) + } + + // @@protoc_insertion_point(class_scope:google.spannerlib.v1.WriteMutationsRequest) + private static final com.google.cloud.spannerlib.v1.WriteMutationsRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.cloud.spannerlib.v1.WriteMutationsRequest(); + } + + public static com.google.cloud.spannerlib.v1.WriteMutationsRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public WriteMutationsRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.WriteMutationsRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/WriteMutationsRequestOrBuilder.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/WriteMutationsRequestOrBuilder.java new file mode 100644 index 00000000..5eafa174 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/WriteMutationsRequestOrBuilder.java @@ -0,0 +1,63 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +@com.google.protobuf.Generated +public interface WriteMutationsRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spannerlib.v1.WriteMutationsRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the connection field is set. + */ + boolean hasConnection(); + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The connection. + */ + com.google.cloud.spannerlib.v1.Connection getConnection(); + + /** + * + * .google.spannerlib.v1.Connection connection = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + com.google.cloud.spannerlib.v1.ConnectionOrBuilder getConnectionOrBuilder(); + + /** + * + * .google.spanner.v1.BatchWriteRequest.MutationGroup mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the mutations field is set. + */ + boolean hasMutations(); + + /** + * + * .google.spanner.v1.BatchWriteRequest.MutationGroup mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The mutations. + */ + com.google.spanner.v1.BatchWriteRequest.MutationGroup getMutations(); + + /** + * + * .google.spanner.v1.BatchWriteRequest.MutationGroup mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + com.google.spanner.v1.BatchWriteRequest.MutationGroupOrBuilder getMutationsOrBuilder(); +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/sun/jna/SpannerLibPlatformDetector.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/sun/jna/SpannerLibPlatformDetector.java new file mode 100644 index 00000000..8b34a0c1 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/sun/jna/SpannerLibPlatformDetector.java @@ -0,0 +1,28 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.sun.jna; + +/** + * This class is only here to get access to the package-private {@link + * Platform#getNativeLibraryResourcePrefix()} method. + */ +public class SpannerLibPlatformDetector { + /** Wrapper around {@link Platform#getNativeLibraryResourcePrefix()}. */ + public static String getNativeLibraryResourcePrefix() { + return Platform.getNativeLibraryResourcePrefix(); + } +} diff --git a/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/AbstractSpannerLibTest.java b/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/AbstractSpannerLibTest.java new file mode 100644 index 00000000..712bc36d --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/AbstractSpannerLibTest.java @@ -0,0 +1,98 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spannerlib; + +import com.google.cloud.spanner.connection.AbstractMockServerTest; +import com.google.common.collect.ImmutableList; +import io.grpc.ManagedChannel; +import io.grpc.ManagedChannelBuilder; +import java.util.Collection; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameter; +import org.junit.runners.Parameterized.Parameters; + +@RunWith(Parameterized.class) +public abstract class AbstractSpannerLibTest extends AbstractMockServerTest { + public enum LibraryType { + SHARED, + GRPC, + } + + private static GrpcServer grpcServer; + private static String grpcServerAddress; + protected static SpannerLibrary library; + + @BeforeClass + public static void startGrpcServer() throws Exception { + grpcServer = new GrpcServer(); + grpcServerAddress = grpcServer.start(); + } + + @AfterClass + public static void cleanupSpannerLibrary() throws Exception { + if (library != null) { + library.close(); + } + if (grpcServer != null) { + grpcServer.stop(); + } + } + + @Parameters(name = "library = {0}") + public static Collection parameters() { + return ImmutableList.copyOf(PoolTest.LibraryType.values()); + } + + @Parameter public LibraryType libraryType; + + @Before + public void maybeCreateLibrary() throws Exception { + if (libraryType == PoolTest.LibraryType.GRPC && library instanceof NativeSpannerLibraryImpl) { + library.close(); + library = null; + } else if (libraryType == PoolTest.LibraryType.SHARED + && library instanceof GrpcSpannerLibraryImpl) { + library.close(); + library = null; + } + if (library == null) { + library = createLibrary(); + } + } + + private SpannerLibrary createLibrary() { + if (libraryType == PoolTest.LibraryType.GRPC) { + ManagedChannel channel = + ManagedChannelBuilder.forTarget(grpcServerAddress).usePlaintext().build(); + return new GrpcSpannerLibraryImpl(channel, true); + } else if (libraryType == PoolTest.LibraryType.SHARED) { + return NativeSpannerLibraryImpl.getInstance(); + } else { + throw new UnsupportedOperationException("Unsupported library type: " + libraryType); + } + } + + @After + public void cleanup() { + mockSpanner.removeAllExecutionTimes(); + } +} diff --git a/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/BatchTest.java b/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/BatchTest.java index 9740d541..f322218f 100644 --- a/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/BatchTest.java +++ b/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/BatchTest.java @@ -20,7 +20,6 @@ import static org.junit.Assert.assertFalse; import com.google.cloud.spanner.MockSpannerServiceImpl.StatementResult; -import com.google.cloud.spanner.connection.AbstractMockServerTest; import com.google.common.collect.ImmutableMap; import com.google.longrunning.Operation; import com.google.protobuf.AbstractMessage; @@ -40,7 +39,7 @@ import java.util.List; import org.junit.Test; -public class BatchTest extends AbstractMockServerTest { +public class BatchTest extends AbstractSpannerLibTest { @Test public void testBatchDml() { @@ -67,7 +66,7 @@ public void testBatchDml() { String dsn = String.format( "localhost:%d/projects/p/instances/i/databases/d?usePlainText=true", getPort()); - try (Pool pool = Pool.createPool(dsn); + try (Pool pool = Pool.createPool(library, dsn); Connection connection = pool.createConnection()) { ExecuteBatchDmlResponse response = connection.executeBatch( @@ -125,7 +124,7 @@ public void testBatchDdl() { String dsn = String.format( "localhost:%d/projects/p/instances/i/databases/d?usePlainText=true", getPort()); - try (Pool pool = Pool.createPool(dsn); + try (Pool pool = Pool.createPool(library, dsn); Connection connection = pool.createConnection()) { ExecuteBatchDmlResponse response = connection.executeBatch( diff --git a/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/ConnectionTest.java b/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/ConnectionTest.java index 8efc22b5..255f6d8c 100644 --- a/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/ConnectionTest.java +++ b/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/ConnectionTest.java @@ -23,7 +23,6 @@ import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; -import com.google.cloud.spanner.connection.AbstractMockServerTest; import com.google.common.collect.ImmutableList; import com.google.protobuf.ListValue; import com.google.protobuf.Value; @@ -39,14 +38,14 @@ import com.google.spanner.v1.TransactionOptions.ReadOnly; import org.junit.Test; -public class ConnectionTest extends AbstractMockServerTest { +public class ConnectionTest extends AbstractSpannerLibTest { @Test public void testCreateConnection() { String dsn = String.format( "localhost:%d/projects/p/instances/i/databases/d?usePlainText=true", getPort()); - try (Pool pool = Pool.createPool(dsn); + try (Pool pool = Pool.createPool(library, dsn); Connection connection = pool.createConnection()) { assertTrue(connection.getId() > 0); assertEquals(1, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); @@ -58,7 +57,7 @@ public void testCreateTwoConnections() { String dsn = String.format( "localhost:%d/projects/p/instances/i/databases/d?usePlainText=true", getPort()); - try (Pool pool = Pool.createPool(dsn)) { + try (Pool pool = Pool.createPool(library, dsn)) { try (Connection connection1 = pool.createConnection(); Connection connection2 = pool.createConnection()) { assertTrue(connection1.getId() > 0); @@ -74,7 +73,7 @@ public void testWriteMutations() { String dsn = String.format( "localhost:%d/projects/p/instances/i/databases/d?usePlainText=true", getPort()); - try (Pool pool = Pool.createPool(dsn); + try (Pool pool = Pool.createPool(library, dsn); Connection connection = pool.createConnection()) { CommitResponse response = connection.WriteMutations( @@ -129,7 +128,7 @@ public void testWriteMutationsInTransaction() { String dsn = String.format( "localhost:%d/projects/p/instances/i/databases/d?usePlainText=true", getPort()); - try (Pool pool = Pool.createPool(dsn); + try (Pool pool = Pool.createPool(library, dsn); Connection connection = pool.createConnection()) { connection.beginTransaction(TransactionOptions.getDefaultInstance()); CommitResponse response = @@ -170,7 +169,7 @@ public void testWriteMutationsInReadOnlyTransaction() { String dsn = String.format( "localhost:%d/projects/p/instances/i/databases/d?usePlainText=true", getPort()); - try (Pool pool = Pool.createPool(dsn); + try (Pool pool = Pool.createPool(library, dsn); Connection connection = pool.createConnection()) { connection.beginTransaction( TransactionOptions.newBuilder().setReadOnly(ReadOnly.newBuilder().build()).build()); diff --git a/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/PoolTest.java b/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/PoolTest.java index e80cdc15..de89d24c 100644 --- a/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/PoolTest.java +++ b/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/PoolTest.java @@ -21,20 +21,19 @@ import static org.junit.Assert.assertTrue; import com.google.cloud.spanner.MockSpannerServiceImpl.SimulatedExecutionTime; -import com.google.cloud.spanner.connection.AbstractMockServerTest; import com.google.rpc.Code; import com.google.spanner.v1.CreateSessionRequest; import io.grpc.Status; import org.junit.Test; -public class PoolTest extends AbstractMockServerTest { +public class PoolTest extends AbstractSpannerLibTest { @Test public void testCreatePool() { String dsn = String.format( "localhost:%d/projects/p/instances/i/databases/d?usePlainText=true", getPort()); - try (Pool pool = Pool.createPool(dsn)) { + try (Pool pool = Pool.createPool(library, dsn)) { assertTrue(pool.getId() > 0); assertEquals(1, mockSpanner.countRequestsOfType(CreateSessionRequest.class)); } @@ -50,7 +49,7 @@ public void testCreatePoolFails() { String.format( "localhost:%d/projects/p/instances/i/databases/d?usePlainText=true", getPort()); SpannerLibException exception = - assertThrows(SpannerLibException.class, () -> Pool.createPool(dsn)); + assertThrows(SpannerLibException.class, () -> Pool.createPool(library, dsn)); assertEquals(Code.PERMISSION_DENIED.getNumber(), exception.getStatus().getCode()); } } diff --git a/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/RowsTest.java b/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/RowsTest.java index 827ba51d..7ddcec8d 100644 --- a/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/RowsTest.java +++ b/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/RowsTest.java @@ -24,7 +24,6 @@ import com.google.cloud.spanner.Dialect; import com.google.cloud.spanner.MockSpannerServiceImpl.StatementResult; import com.google.cloud.spanner.Statement; -import com.google.cloud.spanner.connection.AbstractMockServerTest; import com.google.cloud.spanner.connection.RandomResultSetGenerator; import com.google.common.collect.ImmutableMap; import com.google.longrunning.Operation; @@ -42,16 +41,17 @@ import com.google.spanner.v1.StructType.Field; import com.google.spanner.v1.Type; import com.google.spanner.v1.TypeCode; +import java.util.concurrent.ThreadLocalRandom; import org.junit.Test; -public class RowsTest extends AbstractMockServerTest { +public class RowsTest extends AbstractSpannerLibTest { @Test public void testExecuteSelect1() { String dsn = String.format( "localhost:%d/projects/p/instances/i/databases/d?usePlainText=true", getPort()); - try (Pool pool = Pool.createPool(dsn); + try (Pool pool = Pool.createPool(library, dsn); Connection connection = pool.createConnection()) { try (Rows rows = connection.execute(ExecuteSqlRequest.newBuilder().setSql("SELECT 1").build())) { @@ -68,6 +68,26 @@ public void testExecuteSelect1() { } } + @Test + public void testEmptyResult() { + String sql = "SELECT * FROM (SELECT 1) WHERE FALSE"; + mockSpanner.putStatementResult( + StatementResult.query( + Statement.of(sql), + ResultSet.newBuilder().setMetadata(SELECT1_RESULTSET.getMetadata()).build())); + + String dsn = + String.format( + "localhost:%d/projects/p/instances/i/databases/d?usePlainText=true", getPort()); + try (Pool pool = Pool.createPool(library, dsn); + Connection connection = pool.createConnection()) { + try (Rows rows = connection.execute(ExecuteSqlRequest.newBuilder().setSql(sql).build())) { + assertEquals(1, rows.getMetadata().getRowType().getFieldsCount()); + assertNull(rows.next()); + } + } + } + @Test public void testRandomResults() { String sql = "select * from random"; @@ -79,7 +99,7 @@ public void testRandomResults() { String dsn = String.format( "localhost:%d/projects/p/instances/i/databases/d?usePlainText=true", getPort()); - try (Pool pool = Pool.createPool(dsn); + try (Pool pool = Pool.createPool(library, dsn); Connection connection = pool.createConnection()) { try (Rows rows = connection.execute(ExecuteSqlRequest.newBuilder().setSql(sql).build())) { ListValue row; @@ -103,6 +123,44 @@ public void testRandomResults() { assertTrue(request.getTransaction().getSingleUse().getReadOnly().hasStrong()); } + @Test + public void testStopHalfway() { + String sql = "select * from random"; + int numRows = 10; + RandomResultSetGenerator generator = new RandomResultSetGenerator(numRows); + int numCols = RandomResultSetGenerator.generateAllTypes(Dialect.GOOGLE_STANDARD_SQL).length; + mockSpanner.putStatementResult(StatementResult.query(Statement.of(sql), generator.generate())); + + int stopAfterRows = ThreadLocalRandom.current().nextInt(1, numRows - 1); + String dsn = + String.format( + "localhost:%d/projects/p/instances/i/databases/d?usePlainText=true", getPort()); + try (Pool pool = Pool.createPool(library, dsn); + Connection connection = pool.createConnection()) { + try (Rows rows = connection.execute(ExecuteSqlRequest.newBuilder().setSql(sql).build())) { + ListValue row; + int rowCount = 0; + ResultSetMetadata metadata = rows.getMetadata(); + assertEquals(numCols, metadata.getRowType().getFieldsCount()); + while ((row = rows.next()) != null) { + rowCount++; + assertEquals(numCols, row.getValuesList().size()); + if (rowCount == stopAfterRows) { + break; + } + } + } + } + + assertEquals(1, mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)); + ExecuteSqlRequest request = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).get(0); + assertEquals(sql, request.getSql()); + assertTrue(request.hasTransaction()); + assertTrue(request.getTransaction().hasSingleUse()); + assertTrue(request.getTransaction().getSingleUse().hasReadOnly()); + assertTrue(request.getTransaction().getSingleUse().getReadOnly().hasStrong()); + } + @Test public void testExecuteDml() { String sql = "update my_table set my_val=1 where id=2"; @@ -122,7 +180,7 @@ public void testExecuteDml() { String dsn = String.format( "localhost:%d/projects/p/instances/i/databases/d?usePlainText=true", getPort()); - try (Pool pool = Pool.createPool(dsn); + try (Pool pool = Pool.createPool(library, dsn); Connection connection = pool.createConnection()) { // The Execute method is used for all types of statements. // The return type is always Rows. @@ -157,7 +215,7 @@ public void testExecuteDdl() { String dsn = String.format( "localhost:%d/projects/p/instances/i/databases/d?usePlainText=true", getPort()); - try (Pool pool = Pool.createPool(dsn); + try (Pool pool = Pool.createPool(library, dsn); Connection connection = pool.createConnection()) { // The Execute method is used for all types of statements. // The input type is always an ExecuteSqlRequest, even for DDL statements. @@ -224,7 +282,7 @@ public void testExecuteCustomSql() { String dsn = String.format( "localhost:%d/projects/p/instances/i/databases/d?usePlainText=true", getPort()); - try (Pool pool = Pool.createPool(dsn); + try (Pool pool = Pool.createPool(library, dsn); Connection connection = pool.createConnection()) { // The Execute method is used for all types of statements. // This starts a new transaction on the connection. diff --git a/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/TransactionTest.java b/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/TransactionTest.java index f2eef624..8291d250 100644 --- a/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/TransactionTest.java +++ b/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/TransactionTest.java @@ -22,7 +22,6 @@ import com.google.cloud.spanner.MockSpannerServiceImpl.StatementResult; import com.google.cloud.spanner.Statement; -import com.google.cloud.spanner.connection.AbstractMockServerTest; import com.google.cloud.spanner.connection.RandomResultSetGenerator; import com.google.common.collect.ImmutableMap; import com.google.protobuf.Struct; @@ -42,13 +41,13 @@ import io.grpc.Status.Code; import org.junit.Test; -public class TransactionTest extends AbstractMockServerTest { +public class TransactionTest extends AbstractSpannerLibTest { @Test public void testBeginAndCommit() { String dsn = String.format( "localhost:%d/projects/p/instances/i/databases/d?usePlainText=true", getPort()); - try (Pool pool = Pool.createPool(dsn); + try (Pool pool = Pool.createPool(library, dsn); Connection connection = pool.createConnection()) { connection.beginTransaction(TransactionOptions.getDefaultInstance()); connection.commit(); @@ -64,7 +63,7 @@ public void testBeginAndRollback() { String dsn = String.format( "localhost:%d/projects/p/instances/i/databases/d?usePlainText=true", getPort()); - try (Pool pool = Pool.createPool(dsn); + try (Pool pool = Pool.createPool(library, dsn); Connection connection = pool.createConnection()) { connection.beginTransaction(TransactionOptions.getDefaultInstance()); connection.rollback(); @@ -92,7 +91,7 @@ public void testReadWriteTransaction() { String dsn = String.format( "localhost:%d/projects/p/instances/i/databases/d?usePlainText=true", getPort()); - try (Pool pool = Pool.createPool(dsn); + try (Pool pool = Pool.createPool(library, dsn); Connection connection = pool.createConnection()) { connection.beginTransaction(TransactionOptions.getDefaultInstance()); connection.execute( @@ -132,7 +131,7 @@ public void testReadOnlyTransaction() { String dsn = String.format( "localhost:%d/projects/p/instances/i/databases/d?usePlainText=true", getPort()); - try (Pool pool = Pool.createPool(dsn); + try (Pool pool = Pool.createPool(library, dsn); Connection connection = pool.createConnection()) { connection.beginTransaction( TransactionOptions.newBuilder().setReadOnly(ReadOnly.newBuilder().build()).build()); @@ -164,7 +163,7 @@ public void testBeginTwice() { String dsn = String.format( "localhost:%d/projects/p/instances/i/databases/d?usePlainText=true", getPort()); - try (Pool pool = Pool.createPool(dsn); + try (Pool pool = Pool.createPool(library, dsn); Connection connection = pool.createConnection()) { // Try to start two transactions on a connection. connection.beginTransaction(TransactionOptions.getDefaultInstance()); From e8de7f756c542584c347a02b93b12382dd7c9bf4 Mon Sep 17 00:00:00 2001 From: aakashanandg Date: Wed, 8 Oct 2025 12:06:03 +0530 Subject: [PATCH 2/9] refactor(ruby): Introduce MessageHandler and Rows classes (#553) * refactor: add new message handler in ruby wrapper --- spannerlib/wrappers/spannerlib-ruby/Rakefile | 1 - .../lib/spannerlib/connection.rb | 27 +-- .../spannerlib-ruby/lib/spannerlib/ffi.rb | 50 ++---- .../lib/spannerlib/message_handler.rb | 56 ++++++ .../spannerlib-ruby/lib/spannerlib/rows.rb | 67 +++++++ .../spec/integration/batch_emulator_spec.rb | 165 ++++++++++++++++++ .../integration/connection_emulator_spec.rb | 24 +-- .../spec/spannerlib/connection_spec.rb | 4 +- 8 files changed, 318 insertions(+), 76 deletions(-) create mode 100644 spannerlib/wrappers/spannerlib-ruby/lib/spannerlib/message_handler.rb create mode 100644 spannerlib/wrappers/spannerlib-ruby/lib/spannerlib/rows.rb create mode 100644 spannerlib/wrappers/spannerlib-ruby/spec/integration/batch_emulator_spec.rb diff --git a/spannerlib/wrappers/spannerlib-ruby/Rakefile b/spannerlib/wrappers/spannerlib-ruby/Rakefile index c6babf0a..749fc119 100644 --- a/spannerlib/wrappers/spannerlib-ruby/Rakefile +++ b/spannerlib/wrappers/spannerlib-ruby/Rakefile @@ -42,4 +42,3 @@ task :compile do end task default: %i[compile spec rubocop] - diff --git a/spannerlib/wrappers/spannerlib-ruby/lib/spannerlib/connection.rb b/spannerlib/wrappers/spannerlib-ruby/lib/spannerlib/connection.rb index ea824a7c..bf515205 100644 --- a/spannerlib/wrappers/spannerlib-ruby/lib/spannerlib/connection.rb +++ b/spannerlib/wrappers/spannerlib-ruby/lib/spannerlib/connection.rb @@ -15,6 +15,7 @@ # frozen_string_literal: true require_relative "ffi" +require_relative "rows" class Connection attr_reader :pool_id, :conn_id @@ -35,8 +36,7 @@ def write_mutations(mutation_group) else mutation_group.to_s end - - SpannerLib.write_mutations(@pool_id, @conn_id, req_bytes) + SpannerLib.write_mutations(@pool_id, @conn_id, req_bytes, proto_klass: Google::Cloud::Spanner::V1::CommitResponse) end # Begin a read/write transaction on this connection. Accepts TransactionOptions proto or bytes. @@ -52,7 +52,7 @@ def begin_transaction(transaction_options = nil) # Commit the current transaction. Returns CommitResponse bytes or nil. def commit - SpannerLib.commit(@pool_id, @conn_id) + SpannerLib.commit(@pool_id, @conn_id, proto_klass: Google::Cloud::Spanner::V1::CommitResponse) end # Rollback the current transaction. @@ -68,7 +68,8 @@ def execute(request) else request.is_a?(String) ? request : request.to_s end - SpannerLib.execute(@pool_id, @conn_id, bytes) + rows_id = SpannerLib.execute(@pool_id, @conn_id, bytes) + SpannerLib::Rows.new(self, rows_id) end # Execute batch DML/DDL request. Returns ExecuteBatchDmlResponse bytes (or nil). @@ -78,24 +79,8 @@ def execute_batch(request) else request.is_a?(String) ? request : request.to_s end - SpannerLib.execute_batch(@pool_id, @conn_id, bytes) - end - - # Rows helpers — return raw message bytes (caller should parse them). - def metadata(rows_id) - SpannerLib.metadata(@pool_id, @conn_id, rows_id) - end - - def next_rows(rows_id, num_rows, encoding = 0) - SpannerLib.next(@pool_id, @conn_id, rows_id, num_rows, encoding) - end - - def result_set_stats(rows_id) - SpannerLib.result_set_stats(@pool_id, @conn_id, rows_id) - end - def close_rows(rows_id) - SpannerLib.close_rows(@pool_id, @conn_id, rows_id) + SpannerLib.execute_batch(@pool_id, @conn_id, bytes, proto_klass: Google::Cloud::Spanner::V1::ExecuteBatchDmlResponse) end # Closes this connection. Any active transaction on the connection is rolled back. diff --git a/spannerlib/wrappers/spannerlib-ruby/lib/spannerlib/ffi.rb b/spannerlib/wrappers/spannerlib-ruby/lib/spannerlib/ffi.rb index f01059c8..61e190a1 100644 --- a/spannerlib/wrappers/spannerlib-ruby/lib/spannerlib/ffi.rb +++ b/spannerlib/wrappers/spannerlib-ruby/lib/spannerlib/ffi.rb @@ -23,6 +23,7 @@ require "google/rpc/status_pb" require "ffi" +require_relative "message_handler" module SpannerLib extend FFI::Library @@ -128,45 +129,25 @@ def self.ensure_release(message) end end - def self.handle_object_id_response(message, func_name) + def self.handle_object_id_response(message, _func_name) ensure_release(message) do - if message[:code] != 0 - error_msg = read_error_message(message) - raise "#{func_name} failed with code #{message[:code]}: #{error_msg}" - end - message[:objectId] + MessageHandler.new(message).object_id end end - def self.handle_status_response(message, func_name) + def self.handle_status_response(message, _func_name) ensure_release(message) do - if message[:code] != 0 - error_msg = read_error_message(message) - raise "#{func_name} failed with code #{message[:code]}: #{error_msg}" - end + MessageHandler.new(message).throw_if_error! end nil end - # rubocop:disable Metrics/MethodLength - def self.handle_data_response(message, func_name) + def self.handle_data_response(message, _func_name, options = {}) + proto_klass = options[:proto_klass] ensure_release(message) do - if message[:code] != 0 - error_msg = read_error_message(message) - raise "#{func_name} failed with code #{message[:code]}: #{error_msg}" - end - - len = message[:length] - ptr = message[:pointer] - - if len.positive? && !ptr.null? - ptr.read_bytes(len) - else - "" - end + MessageHandler.new(message).data(proto_klass: proto_klass) end end - # rubocop:enable Metrics/MethodLength # rubocop:disable Metrics/MethodLength def self.read_error_message(message) @@ -187,10 +168,11 @@ def self.read_error_message(message) end # rubocop:enable Metrics/MethodLength - def self.write_mutations(pool_id, conn_id, proto_bytes) + def self.write_mutations(pool_id, conn_id, proto_bytes, options = {}) + proto_klass = options[:proto_klass] with_gobytes(proto_bytes) do |gobytes| message = WriteMutations(pool_id, conn_id, gobytes) - handle_data_response(message, "WriteMutations") + handle_data_response(message, "WriteMutations", proto_klass: proto_klass) end end @@ -201,9 +183,10 @@ def self.begin_transaction(pool_id, conn_id, proto_bytes) end end - def self.commit(pool_id, conn_id) + def self.commit(pool_id, conn_id, options = {}) + proto_klass = options[:proto_klass] message = Commit(pool_id, conn_id) - handle_data_response(message, "Commit") + handle_data_response(message, "Commit", proto_klass: proto_klass) end def self.rollback(pool_id, conn_id) @@ -218,10 +201,11 @@ def self.execute(pool_id, conn_id, proto_bytes) end end - def self.execute_batch(pool_id, conn_id, proto_bytes) + def self.execute_batch(pool_id, conn_id, proto_bytes, options = {}) + proto_klass = options[:proto_klass] with_gobytes(proto_bytes) do |gobytes| message = ExecuteBatch(pool_id, conn_id, gobytes) - handle_data_response(message, "ExecuteBatch") + handle_data_response(message, "ExecuteBatch", proto_klass: proto_klass) end end diff --git a/spannerlib/wrappers/spannerlib-ruby/lib/spannerlib/message_handler.rb b/spannerlib/wrappers/spannerlib-ruby/lib/spannerlib/message_handler.rb new file mode 100644 index 00000000..74f7308b --- /dev/null +++ b/spannerlib/wrappers/spannerlib-ruby/lib/spannerlib/message_handler.rb @@ -0,0 +1,56 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# frozen_string_literal: true + +# lib/spannerlib/message_handler.rb + +require "spannerlib/exceptions" + +module SpannerLib + class MessageHandler + def initialize(message) + @message = message + end + + def object_id + throw_if_error! + @message[:objectId] + end + + # Returns the data payload from the message. + # If a proto_klass is provided, it decodes the bytes into a Protobuf object. + # Otherwise, it returns the raw bytes as a string. + def data(proto_klass: nil) + throw_if_error! + + len = @message[:length] + ptr = @message[:pointer] + + return (proto_klass ? proto_klass.new : "") unless len.positive? && !ptr.null? + + bytes = ptr.read_string(len) + + proto_klass ? proto_klass.decode(bytes) : bytes + end + + def throw_if_error! + code = @message[:code] + return if code.zero? + + error_msg = SpannerLib.read_error_message(@message) + raise SpannerLibException, "Call failed with code #{code}: #{error_msg}" + end + end +end diff --git a/spannerlib/wrappers/spannerlib-ruby/lib/spannerlib/rows.rb b/spannerlib/wrappers/spannerlib-ruby/lib/spannerlib/rows.rb new file mode 100644 index 00000000..38a108b6 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-ruby/lib/spannerlib/rows.rb @@ -0,0 +1,67 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# frozen_string_literal: true + +module SpannerLib + class Rows + include Enumerable + + attr_reader :id, :connection + + def initialize(connection, rows_id) + @connection = connection + @id = rows_id + @closed = false + end + + def each + return enum_for(:each) unless block_given? + + while (row = self.next) + yield row + end + ensure + close + end + + def next + return nil if @closed + + row_data = SpannerLib.next(connection.pool_id, connection.conn_id, id, 1, 0) + + if row_data.nil? || row_data.empty? || (row_data.respond_to?(:values) && row_data.values.empty?) + close + return nil + end + + row_data + end + + def metadata + SpannerLib.metadata(connection.pool_id, connection.conn_id, id) + end + + def result_set_stats + SpannerLib.result_set_stats(connection.pool_id, connection.conn_id, id) + end + + def close + return if @closed + + SpannerLib.close_rows(connection.pool_id, connection.conn_id, id) + @closed = true + end + end +end diff --git a/spannerlib/wrappers/spannerlib-ruby/spec/integration/batch_emulator_spec.rb b/spannerlib/wrappers/spannerlib-ruby/spec/integration/batch_emulator_spec.rb new file mode 100644 index 00000000..cf4512e1 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-ruby/spec/integration/batch_emulator_spec.rb @@ -0,0 +1,165 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# frozen_string_literal: true + +require "spec_helper" +require "google/cloud/spanner/v1" + +RSpec.describe "Batch API test", :integration do + before(:all) do + @emulator_host = ENV.fetch("SPANNER_EMULATOR_HOST", nil) + skip "SPANNER_EMULATOR_HOST not set" unless @emulator_host && !@emulator_host.empty? + + require "spannerlib/pool" + @dsn = "projects/your-project-id/instances/test-instance/databases/test-database?autoConfigEmulator=true" + + @pool = Pool.create_pool(@dsn) + conn = @pool.create_connection + ddl_batch_req = Google::Cloud::Spanner::V1::ExecuteBatchDmlRequest.new( + statements: [ + Google::Cloud::Spanner::V1::ExecuteBatchDmlRequest::Statement.new(sql: "DROP TABLE IF EXISTS test_table"), + Google::Cloud::Spanner::V1::ExecuteBatchDmlRequest::Statement.new( + sql: "CREATE TABLE test_table (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY(id)" + ) + ] + ) + conn.execute_batch(ddl_batch_req) + conn.close + end + + after(:all) do + @pool&.close + end + + before do + @conn = @pool.create_connection + delete_req = Google::Cloud::Spanner::V1::BatchWriteRequest::MutationGroup.new( + mutations: [ + Google::Cloud::Spanner::V1::Mutation.new( + delete: Google::Cloud::Spanner::V1::Mutation::Delete.new( + table: "test_table", + key_set: Google::Cloud::Spanner::V1::KeySet.new(all: true) + ) + ) + ] + ) + @conn.write_mutations(delete_req) + end + + after do + @conn&.close + end + + it "tests a batch DML request" do + dml_batch_req = Google::Cloud::Spanner::V1::ExecuteBatchDmlRequest.new( + statements: [ + Google::Cloud::Spanner::V1::ExecuteBatchDmlRequest::Statement.new( + sql: "INSERT INTO test_table (id, name) VALUES (1, 'name1')" + ), + Google::Cloud::Spanner::V1::ExecuteBatchDmlRequest::Statement.new( + sql: "INSERT INTO test_table (id, name) VALUES (2, 'name2')" + ), + Google::Cloud::Spanner::V1::ExecuteBatchDmlRequest::Statement.new( + sql: "UPDATE test_table SET name='name3' WHERE id=1" + ) + ] + ) + resp = @conn.execute_batch(dml_batch_req) + expect(resp.result_sets.length).to eq 3 + + select_req = Google::Cloud::Spanner::V1::ExecuteSqlRequest.new( + sql: "SELECT id, name FROM test_table ORDER BY id" + ) + rows = @conn.execute(select_req) + all_rows = rows.map { |row_bytes| Google::Protobuf::ListValue.decode(row_bytes) } + + expect(all_rows.length).to eq 2 + expect(all_rows[0].values[0].string_value).to eq "1" + expect(all_rows[0].values[1].string_value).to eq "name3" + expect(all_rows[1].values[0].string_value).to eq "2" + expect(all_rows[1].values[1].string_value).to eq "name2" + end + + it "tests a batch DDL request" do + ddl_batch_req = Google::Cloud::Spanner::V1::ExecuteBatchDmlRequest.new( + statements: [ + Google::Cloud::Spanner::V1::ExecuteBatchDmlRequest::Statement.new( + sql: "DROP TABLE IF EXISTS test_table" + ), + Google::Cloud::Spanner::V1::ExecuteBatchDmlRequest::Statement.new( + sql: "CREATE TABLE test_table (key INT64 NOT NULL, data STRING(MAX)) PRIMARY KEY(key)" + ) + ] + ) + + expect { @conn.execute_batch(ddl_batch_req) }.not_to raise_error + + insert_req = Google::Cloud::Spanner::V1::BatchWriteRequest::MutationGroup.new( + mutations: [ + Google::Cloud::Spanner::V1::Mutation.new( + insert: Google::Cloud::Spanner::V1::Mutation::Write.new( + table: "test_table", + columns: %w[key data], + values: [ + Google::Protobuf::ListValue.new(values: [ + Google::Protobuf::Value.new(string_value: "101"), + Google::Protobuf::Value.new(string_value: "VerificationData") + ]) + ] + ) + ) + ] + ) + expect { @conn.write_mutations(insert_req) }.not_to raise_error + end + + it "queries data using parameters" do + insert_req = Google::Cloud::Spanner::V1::BatchWriteRequest::MutationGroup.new( + mutations: [ + Google::Cloud::Spanner::V1::Mutation.new( + insert: Google::Cloud::Spanner::V1::Mutation::Write.new( + table: "test_table", + columns: %w[key data], + values: [ + Google::Protobuf::ListValue.new(values: [Google::Protobuf::Value.new(string_value: "1"), + Google::Protobuf::Value.new(string_value: "Alice")]), + Google::Protobuf::ListValue.new(values: [Google::Protobuf::Value.new(string_value: "2"), + Google::Protobuf::Value.new(string_value: "Bob")]) + ] + ) + ) + ] + ) + @conn.write_mutations(insert_req) + + # Execute the parameterized query. + select_req = Google::Cloud::Spanner::V1::ExecuteSqlRequest.new( + sql: "SELECT key, data FROM test_table WHERE data = @dataParam", + params: Google::Protobuf::Struct.new( + fields: { + "dataParam" => Google::Protobuf::Value.new(string_value: "Alice") + } + ), + param_types: { + "dataParam" => Google::Cloud::Spanner::V1::Type.new(code: Google::Cloud::Spanner::V1::TypeCode::STRING) + } + ) + rows = @conn.execute(select_req) + all_rows = rows.map { |row_bytes| Google::Protobuf::ListValue.decode(row_bytes) } + + expect(all_rows.length).to eq(1) + expect(all_rows[0].values[1].string_value).to eq("Alice") + end +end diff --git a/spannerlib/wrappers/spannerlib-ruby/spec/integration/connection_emulator_spec.rb b/spannerlib/wrappers/spannerlib-ruby/spec/integration/connection_emulator_spec.rb index 1149b6a3..9015ba13 100644 --- a/spannerlib/wrappers/spannerlib-ruby/spec/integration/connection_emulator_spec.rb +++ b/spannerlib/wrappers/spannerlib-ruby/spec/integration/connection_emulator_spec.rb @@ -95,16 +95,9 @@ @conn.commit select_req = Google::Cloud::Spanner::V1::ExecuteSqlRequest.new(sql: "SELECT id, name FROM test_table ORDER BY id") - rows_id = @conn.execute(select_req) + rows = @conn.execute(select_req) - all_rows = [] - loop do - row_bytes = @conn.next_rows(rows_id, 1) - break if row_bytes.nil? || row_bytes.empty? - - all_rows << Google::Protobuf::ListValue.decode(row_bytes) - end - @conn.close_rows(rows_id) + all_rows = rows.map { |row_bytes| Google::Protobuf::ListValue.decode(row_bytes) } expect(all_rows.length).to eq(2) expect(all_rows[0].values[1].string_value).to eq("Alice") @@ -130,16 +123,9 @@ @conn.write_mutations(insert_data_req) select_req = Google::Cloud::Spanner::V1::ExecuteSqlRequest.new(sql: "SELECT id, name FROM test_table ORDER BY id") - rows_id = @conn.execute(select_req) - - all_rows = [] - loop do - row_bytes = @conn.next_rows(rows_id, 1) - break if row_bytes.nil? || row_bytes.empty? + rows = @conn.execute(select_req) - all_rows << Google::Protobuf::ListValue.decode(row_bytes) - end - @conn.close_rows(rows_id) + all_rows = rows.map { |row_bytes| Google::Protobuf::ListValue.decode(row_bytes) } expect(all_rows.length).to eq(2) expect(all_rows[0].values[1].string_value).to eq("Charlie") @@ -158,7 +144,7 @@ ) ] ) - expect { @conn.write_mutations(insert_data_req) }.to raise_error(RuntimeError, /read-only transactions cannot write/) + expect { @conn.write_mutations(insert_data_req) }.to raise_error(SpannerLibException, /read-only transactions cannot write/) @conn.rollback end diff --git a/spannerlib/wrappers/spannerlib-ruby/spec/spannerlib/connection_spec.rb b/spannerlib/wrappers/spannerlib-ruby/spec/spannerlib/connection_spec.rb index a9d92cbb..d100d01c 100644 --- a/spannerlib/wrappers/spannerlib-ruby/spec/spannerlib/connection_spec.rb +++ b/spannerlib/wrappers/spannerlib-ruby/spec/spannerlib/connection_spec.rb @@ -29,11 +29,11 @@ describe "creation" do it "is created by a Pool" do allow(SpannerLib).to receive(:create_connection).with(1).and_return(2) - + # The object under test is the one returned by `pool.create_connection` conn = pool.create_connection - expect(conn).to be_a(Connection) + expect(conn).to be_a(described_class) expect(conn.conn_id).to eq(2) expect(conn.pool_id).to eq(1) end From 3253ded90c11694c47ba2318dcc384107fff4168 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Knut=20Olav=20L=C3=B8ite?= Date: Wed, 8 Oct 2025 10:02:54 +0200 Subject: [PATCH 3/9] chore: delay transaction activation until actual use (#552) * chore: store temp TransactionOptions in connection state Store temporary TransactionOptions in the connection state as local options. Local options only apply to the current transaction. This simplifies the internal state handling of the driver, as all transaction state should only be read from the connection state, and not also from a temporary variable. This also enables the use of a combination of temporary transaction options and using SQL statements to set further options. The shared library always includes temporary transaction options, as the BeginTransaction function accepts TransactionOptions as an input argument. This meant that using SQL statements to set further transaction options was not supported through the shared library. * chore: delay transaction activation until actual use Delay the actual transaction activation until the first actual usage of the transaction. That is; the first time that a statement is being sent to Spanner. This allows the application to amend the transaction options after calling BeginTx or executing `BEGIN TRANSACTION`. The transaction options can be amended by executing a statement like `SET TRANSACTION READ ONLY`. --- aborted_transactions_test.go | 8 +- client_side_statement_test.go | 6 +- conn.go | 200 ++++++++---------- conn_with_mockserver_test.go | 74 +++++++ connection_properties.go | 9 + driver.go | 36 ++-- driver_test.go | 18 +- driver_with_mockserver_test.go | 17 +- partitioned_query.go | 10 +- spannerlib/api/connection.go | 37 +++- spannerlib/lib/connection_test.go | 8 +- .../cloud/spannerlib/TransactionTest.java | 5 +- transaction.go | 120 ++++++++++- 13 files changed, 381 insertions(+), 167 deletions(-) diff --git a/aborted_transactions_test.go b/aborted_transactions_test.go index 6962e96f..835f971d 100644 --- a/aborted_transactions_test.go +++ b/aborted_transactions_test.go @@ -41,6 +41,9 @@ func TestCommitAborted(t *testing.T) { if err != nil { t.Fatalf("begin failed: %v", err) } + if _, err := tx.ExecContext(ctx, testutil.UpdateBarSetFoo); err != nil { + t.Fatal(err) + } server.TestSpanner.PutExecutionTime(testutil.MethodCommitTransaction, testutil.SimulatedExecutionTime{ Errors: []error{status.Error(codes.Aborted, "Aborted")}, }) @@ -51,7 +54,7 @@ func TestCommitAborted(t *testing.T) { reqs := server.TestSpanner.DrainRequestsFromServer() commitReqs := testutil.RequestsOfType(reqs, reflect.TypeOf(&sppb.CommitRequest{})) if g, w := len(commitReqs), 2; g != w { - t.Fatalf("commit request count mismatch\nGot: %v\nWant: %v", g, w) + t.Fatalf("commit request count mismatch\n Got: %v\nWant: %v", g, w) } // Verify that the db is still usable. @@ -117,6 +120,9 @@ func TestCommitAbortedWithInternalRetriesDisabled(t *testing.T) { if err != nil { t.Fatalf("begin failed: %v", err) } + if _, err := tx.ExecContext(ctx, testutil.UpdateBarSetFoo); err != nil { + t.Fatal(err) + } server.TestSpanner.PutExecutionTime(testutil.MethodCommitTransaction, testutil.SimulatedExecutionTime{ Errors: []error{status.Error(codes.Aborted, "Aborted")}, }) diff --git a/client_side_statement_test.go b/client_side_statement_test.go index 8d7130d1..45bc1d7a 100644 --- a/client_side_statement_test.go +++ b/client_side_statement_test.go @@ -65,7 +65,7 @@ func TestStatementExecutor_StartBatchDdl(t *testing.T) { } // Starting a DDL batch while the connection is in a transaction is not allowed. - c.tx = &readWriteTransaction{} + c.tx = &delegatingTransaction{conn: c, ctx: ctx} if _, err := c.ExecContext(ctx, "start batch ddl", []driver.NamedValue{}); spanner.ErrCode(err) != codes.FailedPrecondition { t.Fatalf("error mismatch for starting a DDL batch while in a transaction\nGot: %v\nWant: %v", spanner.ErrCode(err), codes.FailedPrecondition) } @@ -102,13 +102,13 @@ func TestStatementExecutor_StartBatchDml(t *testing.T) { } // Starting a DML batch while the connection is in a read-only transaction is not allowed. - c.tx = &readOnlyTransaction{logger: noopLogger} + c.tx = &delegatingTransaction{conn: c, contextTransaction: &readOnlyTransaction{logger: noopLogger}} if _, err := c.ExecContext(ctx, "start batch dml", []driver.NamedValue{}); spanner.ErrCode(err) != codes.FailedPrecondition { t.Fatalf("error mismatch for starting a DML batch while in a read-only transaction\nGot: %v\nWant: %v", spanner.ErrCode(err), codes.FailedPrecondition) } // Starting a DML batch while the connection is in a read/write transaction is allowed. - c.tx = &readWriteTransaction{logger: noopLogger} + c.tx = &delegatingTransaction{conn: c, contextTransaction: &readWriteTransaction{logger: noopLogger}} if _, err := c.ExecContext(ctx, "start batch dml", []driver.NamedValue{}); err != nil { t.Fatalf("could not start a DML batch while in a read/write transaction: %v", err) } diff --git a/conn.go b/conn.go index d35b238d..278cff0c 100644 --- a/conn.go +++ b/conn.go @@ -231,20 +231,25 @@ type SpannerConn interface { // returned. resetTransactionForRetry(ctx context.Context, errDuringCommit bool) error - // withTempTransactionOptions sets the TransactionOptions that should be used - // for the next read/write transaction. This method should only be called - // directly before starting a new read/write transaction. - withTempTransactionOptions(options *ReadWriteTransactionOptions) + // withTransactionCloseFunc sets the close function that should be registered + // on the next transaction on this connection. This method should only be called + // directly before starting a new transaction. + withTransactionCloseFunc(close func()) - // withTempReadOnlyTransactionOptions sets the options that should be used - // for the next read-only transaction. This method should only be called - // directly before starting a new read-only transaction. - withTempReadOnlyTransactionOptions(options *ReadOnlyTransactionOptions) + // setReadWriteTransactionOptions sets the ReadWriteTransactionOptions that should be + // used for the current read/write transaction. This method should be called right + // after starting a new read/write transaction. + setReadWriteTransactionOptions(options *ReadWriteTransactionOptions) - // withTempBatchReadOnlyTransactionOptions sets the options that should be used - // for the next batch read-only transaction. This method should only be called - // directly before starting a new batch read-only transaction. - withTempBatchReadOnlyTransactionOptions(options *BatchReadOnlyTransactionOptions) + // setReadOnlyTransactionOptions sets the options that should be used + // for the current read-only transaction. This method should be called + // right after starting a new read-only transaction. + setReadOnlyTransactionOptions(options *ReadOnlyTransactionOptions) + + // setBatchReadOnlyTransactionOptions sets the options that should be used + // for the current batch read-only transaction. This method should be called + // right after starting a new batch read-only transaction. + setBatchReadOnlyTransactionOptions(options *BatchReadOnlyTransactionOptions) } var _ SpannerConn = &conn{} @@ -257,8 +262,8 @@ type conn struct { adminClient *adminapi.DatabaseAdminClient connId string logger *slog.Logger - tx contextTransaction - prevTx contextTransaction + tx *delegatingTransaction + prevTx *delegatingTransaction resetForRetry bool database string @@ -536,7 +541,7 @@ func (c *conn) InDDLBatch() bool { } func (c *conn) InDMLBatch() bool { - return (c.batch != nil && c.batch.tp == parser.BatchTypeDml) || (c.inReadWriteTransaction() && c.tx.(*readWriteTransaction).batch != nil) + return (c.batch != nil && c.batch.tp == parser.BatchTypeDml) || (c.inTransaction() && c.tx.IsInBatch()) } func (c *conn) GetBatchedStatements() []spanner.Statement { @@ -572,9 +577,6 @@ func (c *conn) startBatchDML(automatic bool) (driver.Result, error) { if c.batch != nil { return nil, spanner.ToSpannerError(status.Errorf(codes.FailedPrecondition, "This connection already has an active batch.")) } - if c.inReadOnlyTransaction() { - return nil, spanner.ToSpannerError(status.Errorf(codes.FailedPrecondition, "This connection has an active read-only transaction. Read-only transactions cannot execute DML batches.")) - } c.logger.Debug("starting dml batch outside transaction") c.batch = &batch{tp: parser.BatchTypeDml, options: execOptions} return driver.ResultNoRows, nil @@ -660,8 +662,8 @@ func (c *conn) execBatchDML(ctx context.Context, statements []spanner.Statement, var affected []int64 var err error - if c.inTransaction() { - tx, ok := c.tx.(*readWriteTransaction) + if c.inTransaction() && c.tx.contextTransaction != nil { + tx, ok := c.tx.contextTransaction.(*readWriteTransaction) if !ok { return nil, status.Errorf(codes.FailedPrecondition, "connection is in a transaction that is not a read/write transaction") } @@ -949,7 +951,7 @@ func (c *conn) execContext(ctx context.Context, query string, execOptions *ExecO } // Start an automatic DML batch. - if c.AutoBatchDml() && !c.inBatch() && c.inReadWriteTransaction() { + if c.AutoBatchDml() && !c.inBatch() && c.inTransaction() && statementInfo.StatementType == parser.StatementTypeDml { if _, err := c.startBatchDML( /* automatic = */ true); err != nil { return nil, err } @@ -1046,14 +1048,14 @@ func (c *conn) resetTransactionForRetry(ctx context.Context, errDuringCommit boo return c.tx.resetForRetry(ctx) } -func (c *conn) withTempTransactionOptions(options *ReadWriteTransactionOptions) { +func (c *conn) withTransactionCloseFunc(close func()) { + c.tempTransactionCloseFunc = close +} + +func (c *conn) setReadWriteTransactionOptions(options *ReadWriteTransactionOptions) { if options == nil { return } - c.tempTransactionCloseFunc = options.close - // Start a transaction for the connection state, so we can set the transaction options - // as local options in the current transaction. - _ = c.state.Begin() if options.DisableInternalRetries { _ = propertyRetryAbortsInternally.SetLocalValue(c.state, !options.DisableInternalRetries) } @@ -1103,14 +1105,10 @@ func (c *conn) getTransactionOptions(execOptions *ExecOptions) ReadWriteTransact return txOpts } -func (c *conn) withTempReadOnlyTransactionOptions(options *ReadOnlyTransactionOptions) { +func (c *conn) setReadOnlyTransactionOptions(options *ReadOnlyTransactionOptions) { if options == nil { return } - c.tempTransactionCloseFunc = options.close - // Start a transaction for the connection state, so we can set the transaction options - // as local options in the current transaction. - _ = c.state.Begin() if options.BeginTransactionOption != spanner.DefaultBeginTransaction { _ = propertyBeginTransactionOption.SetLocalValue(c.state, options.BeginTransactionOption) } @@ -1123,14 +1121,10 @@ func (c *conn) getReadOnlyTransactionOptions() ReadOnlyTransactionOptions { return ReadOnlyTransactionOptions{TimestampBound: c.ReadOnlyStaleness(), BeginTransactionOption: c.convertDefaultBeginTransactionOption(propertyBeginTransactionOption.GetValueOrDefault(c.state))} } -func (c *conn) withTempBatchReadOnlyTransactionOptions(options *BatchReadOnlyTransactionOptions) { +func (c *conn) setBatchReadOnlyTransactionOptions(options *BatchReadOnlyTransactionOptions) { if options == nil { return } - c.tempTransactionCloseFunc = options.close - // Start a transaction for the connection state, so we can set the transaction options - // as local options in the current transaction. - _ = c.state.Begin() if options.TimestampBound.String() != "(strong)" { _ = propertyReadOnlyStaleness.SetLocalValue(c.state, options.TimestampBound) } @@ -1144,9 +1138,9 @@ func (c *conn) getBatchReadOnlyTransactionOptions() BatchReadOnlyTransactionOpti // It is exported for internal reasons, and may receive breaking changes without prior notice. // // BeginReadOnlyTransaction starts a new read-only transaction on this connection. -func (c *conn) BeginReadOnlyTransaction(ctx context.Context, options *ReadOnlyTransactionOptions) (driver.Tx, error) { - c.withTempReadOnlyTransactionOptions(options) - tx, err := c.BeginTx(ctx, driver.TxOptions{ReadOnly: true}) +func (c *conn) BeginReadOnlyTransaction(ctx context.Context, options *ReadOnlyTransactionOptions, close func()) (driver.Tx, error) { + tx, err := c.beginTx(ctx, driver.TxOptions{ReadOnly: true}, close) + c.setReadOnlyTransactionOptions(options) if err != nil { return nil, err } @@ -1157,9 +1151,9 @@ func (c *conn) BeginReadOnlyTransaction(ctx context.Context, options *ReadOnlyTr // It is exported for internal reasons, and may receive breaking changes without prior notice. // // BeginReadWriteTransaction starts a new read/write transaction on this connection. -func (c *conn) BeginReadWriteTransaction(ctx context.Context, options *ReadWriteTransactionOptions) (driver.Tx, error) { - c.withTempTransactionOptions(options) - tx, err := c.BeginTx(ctx, driver.TxOptions{}) +func (c *conn) BeginReadWriteTransaction(ctx context.Context, options *ReadWriteTransactionOptions, close func()) (driver.Tx, error) { + tx, err := c.beginTx(ctx, driver.TxOptions{}, close) + c.setReadWriteTransactionOptions(options) if err != nil { return nil, err } @@ -1182,21 +1176,6 @@ func (c *conn) beginTx(ctx context.Context, driverOpts driver.TxOptions, closeFu c.resetForRetry = false return c.tx, nil } - // Also start a transaction on the ConnectionState if the BeginTx call was successful. - defer func() { - if c.tx != nil { - _ = c.state.Begin() - } else { - // Rollback in case the connection state transaction was started before this function - // was called, for example if the caller set temporary transaction options. - _ = c.state.Rollback() - } - }() - - // TODO: Delay the actual determination of the transaction type until the first query. - // This is required in order to support SET TRANSACTION READ {ONLY | WRITE} - readOnlyTxOpts := c.getReadOnlyTransactionOptions() - batchReadOnlyTxOpts := c.getBatchReadOnlyTransactionOptions() if c.inTransaction() { return nil, spanner.ToSpannerError(status.Errorf(codes.FailedPrecondition, "already in a transaction")) } @@ -1234,94 +1213,105 @@ func (c *conn) beginTx(ctx context.Context, driverOpts driver.TxOptions, closeFu if closeFunc == nil { closeFunc = func() {} } + if err := c.state.Begin(); err != nil { + return nil, err + } + c.clearCommitResponse() + if isolationLevelFromTxOpts != spannerpb.TransactionOptions_ISOLATION_LEVEL_UNSPECIFIED { + _ = propertyIsolationLevel.SetLocalValue(c.state, sql.IsolationLevel(driverOpts.Isolation)) + } + // TODO: Figure out how to distinguish between 'use the default' and 'use read/write'. if driverOpts.ReadOnly { + _ = propertyTransactionReadOnly.SetLocalValue(c.state, true) + } + if batchReadOnly { + _ = propertyTransactionBatchReadOnly.SetLocalValue(c.state, true) + } + if disableRetryAborts { + _ = propertyRetryAbortsInternally.SetLocalValue(c.state, false) + } + + c.tx = &delegatingTransaction{ + conn: c, + ctx: ctx, + close: func(result txResult) { + closeFunc() + if result == txResultCommit { + _ = c.state.Commit() + } else { + _ = c.state.Rollback() + } + c.tx = nil + }, + } + return c.tx, nil +} + +func (c *conn) activateTransaction() (contextTransaction, error) { + closeFunc := c.tx.close + if propertyTransactionReadOnly.GetValueOrDefault(c.state) { var logger *slog.Logger var ro *spanner.ReadOnlyTransaction var bo *spanner.BatchReadOnlyTransaction - if batchReadOnly { + if propertyTransactionBatchReadOnly.GetValueOrDefault(c.state) { logger = c.logger.With("tx", "batchro") var err error // BatchReadOnly transactions (currently) do not support inline-begin. // This means that the transaction options must be supplied here, and not through a callback. - bo, err = c.client.BatchReadOnlyTransaction(ctx, batchReadOnlyTxOpts.TimestampBound) + bo, err = c.client.BatchReadOnlyTransaction(c.tx.ctx, propertyReadOnlyStaleness.GetValueOrDefault(c.state)) if err != nil { return nil, err } ro = &bo.ReadOnlyTransaction } else { logger = c.logger.With("tx", "ro") - ro = c.client.ReadOnlyTransaction().WithBeginTransactionOption(readOnlyTxOpts.BeginTransactionOption) + beginTxOpt := c.convertDefaultBeginTransactionOption(propertyBeginTransactionOption.GetValueOrDefault(c.state)) + ro = c.client.ReadOnlyTransaction().WithBeginTransactionOption(beginTxOpt) } - c.tx = &readOnlyTransaction{ + return &readOnlyTransaction{ roTx: ro, boTx: bo, logger: logger, - close: func(result txResult) { - closeFunc() - if result == txResultCommit { - _ = c.state.Commit() - } else { - _ = c.state.Rollback() - } - c.tx = nil - }, + close: closeFunc, timestampBoundCallback: func() spanner.TimestampBound { return propertyReadOnlyStaleness.GetValueOrDefault(c.state) }, - } - return c.tx, nil + }, nil } - // These options are only used to determine how to start the transaction. - // All other options are fetched in a callback that is called when the transaction is actually started. - // That callback reads all transaction options from the connection state at that moment. This allows - // applications to execute a series of statement like this: - // BEGIN TRANSACTION; - // SET LOCAL transaction_tag='my_tag'; - // SET LOCAL commit_priority=LOW; - // INSERT INTO my_table ... -- This starts the transaction with the options above included. opts := spanner.TransactionOptions{} opts.BeginTransactionOption = c.convertDefaultBeginTransactionOption(propertyBeginTransactionOption.GetValueOrDefault(c.state)) - tx, err := spanner.NewReadWriteStmtBasedTransactionWithCallbackForOptions(ctx, c.client, opts, func() spanner.TransactionOptions { + tx, err := spanner.NewReadWriteStmtBasedTransactionWithCallbackForOptions(c.tx.ctx, c.client, opts, func() spanner.TransactionOptions { defer func() { // Reset the transaction_tag after starting the transaction. _ = propertyTransactionTag.ResetValue(c.state, connectionstate.ContextUser) }() - return c.effectiveTransactionOptions(isolationLevelFromTxOpts, c.options( /*reset=*/ true)) + return c.effectiveTransactionOptions(spannerpb.TransactionOptions_ISOLATION_LEVEL_UNSPECIFIED, c.options( /*reset=*/ true)) }) if err != nil { return nil, err } logger := c.logger.With("tx", "rw") - c.tx = &readWriteTransaction{ - ctx: ctx, + return &readWriteTransaction{ + ctx: c.tx.ctx, conn: c, logger: logger, rwTx: tx, close: func(result txResult, commitResponse *spanner.CommitResponse, commitErr error) { - closeFunc() c.prevTx = c.tx - c.tx = nil if commitErr == nil { c.setCommitResponse(commitResponse) - if result == txResultCommit { - _ = c.state.Commit() - } else { - _ = c.state.Rollback() - } + closeFunc(result) } else { - _ = c.state.Rollback() + closeFunc(txResultRollback) } }, - // Disable internal retries if any of these options have been set. retryAborts: sync.OnceValue(func() bool { - return c.RetryAbortsInternally() && !disableRetryAborts + return c.RetryAbortsInternally() }), - } - c.clearCommitResponse() - return c.tx, nil + }, nil } func (c *conn) effectiveTransactionOptions(isolationLevelFromTxOpts spannerpb.TransactionOptions_IsolationLevel, execOptions *ExecOptions) spanner.TransactionOptions { @@ -1347,22 +1337,6 @@ func (c *conn) inTransaction() bool { return c.tx != nil } -func (c *conn) inReadOnlyTransaction() bool { - if c.tx != nil { - _, ok := c.tx.(*readOnlyTransaction) - return ok - } - return false -} - -func (c *conn) inReadWriteTransaction() bool { - if c.tx != nil { - _, ok := c.tx.(*readWriteTransaction) - return ok - } - return false -} - // Commit is not part of the public API of the database/sql driver. // It is exported for internal reasons, and may receive breaking changes without prior notice. // diff --git a/conn_with_mockserver_test.go b/conn_with_mockserver_test.go index 5ceba7ed..ffe0df58 100644 --- a/conn_with_mockserver_test.go +++ b/conn_with_mockserver_test.go @@ -20,6 +20,7 @@ import ( "fmt" "reflect" "testing" + "time" "cloud.google.com/go/longrunning/autogen/longrunningpb" "cloud.google.com/go/spanner" @@ -82,6 +83,79 @@ func TestTwoTransactionsOnOneConn(t *testing.T) { } } +func TestEmptyTransaction(t *testing.T) { + t.Parallel() + + db, server, teardown := setupTestDBConnection(t) + defer teardown() + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + db.SetMaxOpenConns(1) + + c, err := db.Conn(ctx) + if err != nil { + t.Fatal(err) + } + defer silentClose(c) + // Run twice to ensure that there is no connection leak. + for range 2 { + tx, err := c.BeginTx(ctx, &sql.TxOptions{}) + if err != nil { + t.Fatal(err) + } + if err := tx.Commit(); err != nil { + t.Fatal(err) + } + + // An empty transaction should be a no-op and not lead to any requests being sent to Spanner. + requests := server.TestSpanner.DrainRequestsFromServer() + beginRequests := testutil.RequestsOfType(requests, reflect.TypeOf(&spannerpb.BeginTransactionRequest{})) + if g, w := len(beginRequests), 0; g != w { + t.Fatalf("begin requests count mismatch\n Got: %v\nWant: %v", g, w) + } + commitRequests := testutil.RequestsOfType(requests, reflect.TypeOf(&spannerpb.CommitRequest{})) + if g, w := len(commitRequests), 0; g != w { + t.Fatalf("commit requests count mismatch\n Got: %v\nWant: %v", g, w) + } + } +} + +func TestEmptyTransactionUsingSql(t *testing.T) { + t.Parallel() + + db, server, teardown := setupTestDBConnection(t) + defer teardown() + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + db.SetMaxOpenConns(1) + + c, err := db.Conn(ctx) + if err != nil { + t.Fatal(err) + } + defer silentClose(c) + // Run twice to ensure that there is no connection leak. + for range 2 { + if _, err := c.ExecContext(ctx, "begin"); err != nil { + t.Fatal(err) + } + if _, err := c.ExecContext(ctx, "commit"); err != nil { + t.Fatal(err) + } + + // An empty transaction should be a no-op and not lead to any requests being sent to Spanner. + requests := server.TestSpanner.DrainRequestsFromServer() + beginRequests := testutil.RequestsOfType(requests, reflect.TypeOf(&spannerpb.BeginTransactionRequest{})) + if g, w := len(beginRequests), 0; g != w { + t.Fatalf("begin requests count mismatch\n Got: %v\nWant: %v", g, w) + } + commitRequests := testutil.RequestsOfType(requests, reflect.TypeOf(&spannerpb.CommitRequest{})) + if g, w := len(commitRequests), 0; g != w { + t.Fatalf("commit requests count mismatch\n Got: %v\nWant: %v", g, w) + } + } +} + func TestTwoQueriesOnOneConn(t *testing.T) { t.Parallel() diff --git a/connection_properties.go b/connection_properties.go index 6d65e02e..31218cd7 100644 --- a/connection_properties.go +++ b/connection_properties.go @@ -296,6 +296,15 @@ var propertyReturnCommitStats = createConnectionProperty( connectionstate.ContextUser, connectionstate.ConvertBool, ) +var propertyTransactionBatchReadOnly = createConnectionProperty( + "transaction_batch_read_only", + "transaction_batch_read_only indicates whether read-only transactions on this connection should use a batch read-only transaction.", + false, + false, + nil, + connectionstate.ContextUser, + connectionstate.ConvertBool, +) // ------------------------------------------------------------------------------------------------ // Statement connection properties. diff --git a/driver.go b/driver.go index 7ac7400f..5359f5ab 100644 --- a/driver.go +++ b/driver.go @@ -996,6 +996,7 @@ func runTransactionWithOptions(ctx context.Context, db *sql.DB, opts *sql.TxOpti _ = conn.Close() }() + tx, err := conn.BeginTx(ctx, opts) // We don't need to keep track of a running checksum for retries when using // this method, so we disable internal retries. // Retries will instead be handled by the loop below. @@ -1011,13 +1012,12 @@ func runTransactionWithOptions(ctx context.Context, db *sql.DB, opts *sql.TxOpti // It is not a Spanner connection, so just ignore and continue without any special handling. return nil } - spannerConn.withTempTransactionOptions(transactionOptions) + spannerConn.setReadWriteTransactionOptions(transactionOptions) return nil }); err != nil { return nil, err } - tx, err := conn.BeginTx(ctx, opts) if err != nil { return nil, err } @@ -1130,8 +1130,6 @@ type ReadWriteTransactionOptions struct { // disabled, and any Aborted error from Spanner is propagated to the // application. DisableInternalRetries bool - - close func() } // BeginReadWriteTransaction begins a read/write transaction on a Spanner database. @@ -1146,15 +1144,17 @@ func BeginReadWriteTransaction(ctx context.Context, db *sql.DB, options ReadWrit if err != nil { return nil, err } - options.close = func() { + if err := withTransactionCloseFunc(conn, func() { // Close the connection asynchronously, as the transaction will still // be active when we hit this point. go conn.Close() + }); err != nil { + return nil, err } + tx, err := conn.BeginTx(ctx, &sql.TxOptions{}) if err := withTempReadWriteTransactionOptions(conn, &options); err != nil { return nil, err } - tx, err := conn.BeginTx(ctx, &sql.TxOptions{}) if err != nil { return nil, err } @@ -1168,7 +1168,7 @@ func withTempReadWriteTransactionOptions(conn *sql.Conn, options *ReadWriteTrans // It is not a Spanner connection. return spanner.ToSpannerError(status.Error(codes.FailedPrecondition, "This function can only be used with a Spanner connection")) } - spannerConn.withTempTransactionOptions(options) + spannerConn.setReadWriteTransactionOptions(options) return nil }) } @@ -1178,8 +1178,6 @@ func withTempReadWriteTransactionOptions(conn *sql.Conn, options *ReadWriteTrans type ReadOnlyTransactionOptions struct { TimestampBound spanner.TimestampBound BeginTransactionOption spanner.BeginTransactionOption - - close func() } // BeginReadOnlyTransaction begins a read-only transaction on a Spanner database. @@ -1192,15 +1190,17 @@ func BeginReadOnlyTransaction(ctx context.Context, db *sql.DB, options ReadOnlyT if err != nil { return nil, err } - options.close = func() { + if err := withTransactionCloseFunc(conn, func() { // Close the connection asynchronously, as the transaction will still // be active when we hit this point. go conn.Close() + }); err != nil { + return nil, err } + tx, err := conn.BeginTx(ctx, &sql.TxOptions{ReadOnly: true}) if err := withTempReadOnlyTransactionOptions(conn, &options); err != nil { return nil, err } - tx, err := conn.BeginTx(ctx, &sql.TxOptions{ReadOnly: true}) if err != nil { clearTempReadOnlyTransactionOptions(conn) return nil, err @@ -1208,6 +1208,18 @@ func BeginReadOnlyTransaction(ctx context.Context, db *sql.DB, options ReadOnlyT return tx, nil } +func withTransactionCloseFunc(conn *sql.Conn, close func()) error { + return conn.Raw(func(driverConn any) error { + spannerConn, ok := driverConn.(SpannerConn) + if !ok { + // It is not a Spanner connection. + return spanner.ToSpannerError(status.Error(codes.FailedPrecondition, "This function can only be used with a Spanner connection")) + } + spannerConn.withTransactionCloseFunc(close) + return nil + }) +} + func withTempReadOnlyTransactionOptions(conn *sql.Conn, options *ReadOnlyTransactionOptions) error { return conn.Raw(func(driverConn any) error { spannerConn, ok := driverConn.(SpannerConn) @@ -1215,7 +1227,7 @@ func withTempReadOnlyTransactionOptions(conn *sql.Conn, options *ReadOnlyTransac // It is not a Spanner connection. return spanner.ToSpannerError(status.Error(codes.FailedPrecondition, "This function can only be used with a Spanner connection")) } - spannerConn.withTempReadOnlyTransactionOptions(options) + spannerConn.setReadOnlyTransactionOptions(options) return nil }) } diff --git a/driver_test.go b/driver_test.go index dc09940f..746df7b0 100644 --- a/driver_test.go +++ b/driver_test.go @@ -492,12 +492,12 @@ func TestConnection_Reset(t *testing.T) { propertyCommitResponse.Key(): propertyCommitResponse.CreateTypedInitialValue(nil), }), batch: &batch{tp: parser.BatchTypeDml}, - tx: &readOnlyTransaction{ + tx: &delegatingTransaction{contextTransaction: &readOnlyTransaction{ logger: noopLogger, close: func(_ txResult) { txClosed = true }, - }, + }}, } c.setCommitResponse(&spanner.CommitResponse{}) @@ -525,7 +525,7 @@ func TestConnection_NoNestedTransactions(t *testing.T) { c := conn{ logger: noopLogger, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{}), - tx: &readOnlyTransaction{}, + tx: &delegatingTransaction{}, } _, err := c.BeginTx(context.Background(), driver.TxOptions{}) if err == nil { @@ -571,9 +571,9 @@ func TestConn_StartBatchDdl(t *testing.T) { {"Default", &conn{logger: noopLogger, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{})}, false}, {"In DDL batch", &conn{logger: noopLogger, batch: &batch{tp: parser.BatchTypeDdl}, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{})}, true}, {"In DML batch", &conn{logger: noopLogger, batch: &batch{tp: parser.BatchTypeDml}, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{})}, true}, - {"In read/write transaction", &conn{logger: noopLogger, tx: &readWriteTransaction{}, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{})}, true}, - {"In read-only transaction", &conn{logger: noopLogger, tx: &readOnlyTransaction{}, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{})}, true}, - {"In read/write transaction with a DML batch", &conn{logger: noopLogger, tx: &readWriteTransaction{batch: &batch{tp: parser.BatchTypeDml}}, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{})}, true}, + {"In read/write transaction", &conn{logger: noopLogger, tx: &delegatingTransaction{contextTransaction: &readWriteTransaction{}}, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{})}, true}, + {"In read-only transaction", &conn{logger: noopLogger, tx: &delegatingTransaction{contextTransaction: &readOnlyTransaction{}}, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{})}, true}, + {"In read/write transaction with a DML batch", &conn{logger: noopLogger, tx: &delegatingTransaction{contextTransaction: &readWriteTransaction{batch: &batch{tp: parser.BatchTypeDml}}}, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{})}, true}, } { err := test.c.StartBatchDDL() if test.wantErr { @@ -600,9 +600,9 @@ func TestConn_StartBatchDml(t *testing.T) { {"Default", &conn{logger: noopLogger, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{})}, false}, {"In DDL batch", &conn{logger: noopLogger, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{}), batch: &batch{tp: parser.BatchTypeDdl}}, true}, {"In DML batch", &conn{logger: noopLogger, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{}), batch: &batch{tp: parser.BatchTypeDml}}, true}, - {"In read/write transaction", &conn{logger: noopLogger, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{}), tx: &readWriteTransaction{logger: noopLogger}}, false}, - {"In read-only transaction", &conn{logger: noopLogger, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{}), tx: &readOnlyTransaction{logger: noopLogger}}, true}, - {"In read/write transaction with a DML batch", &conn{logger: noopLogger, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{}), tx: &readWriteTransaction{logger: noopLogger, batch: &batch{tp: parser.BatchTypeDml}}}, true}, + {"In read/write transaction", &conn{logger: noopLogger, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{}), tx: &delegatingTransaction{contextTransaction: &readWriteTransaction{logger: noopLogger}}}, false}, + {"In read-only transaction", &conn{logger: noopLogger, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{}), tx: &delegatingTransaction{contextTransaction: &readOnlyTransaction{logger: noopLogger}}}, true}, + {"In read/write transaction with a DML batch", &conn{logger: noopLogger, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{}), tx: &delegatingTransaction{contextTransaction: &readWriteTransaction{logger: noopLogger, batch: &batch{tp: parser.BatchTypeDml}}}}, true}, } { err := test.c.StartBatchDML() if test.wantErr { diff --git a/driver_with_mockserver_test.go b/driver_with_mockserver_test.go index 209c1fa1..b059aa63 100644 --- a/driver_with_mockserver_test.go +++ b/driver_with_mockserver_test.go @@ -570,7 +570,7 @@ func TestReadOnlyTransactionWithOptions(t *testing.T) { requests = server.TestSpanner.DrainRequestsFromServer() beginReadOnlyRequests = filterBeginReadOnlyRequests(testutil.RequestsOfType(requests, reflect.TypeOf(&sppb.BeginTransactionRequest{}))) if g, w := len(beginReadOnlyRequests), 0; g != w { - t.Fatalf("begin requests count mismatch\nGot: %v\nWant: %v", g, w) + t.Fatalf("begin requests count mismatch\n Got: %v\nWant: %v", g, w) } executeRequests = testutil.RequestsOfType(requests, reflect.TypeOf(&sppb.ExecuteSqlRequest{})) if g, w := len(executeRequests), 1; g != w { @@ -2723,6 +2723,9 @@ func TestShowAndSetVariableRetryAbortsInternally(t *testing.T) { // Check that the behavior matches the setting. tx, _ := c.BeginTx(ctx, nil) + if _, err := tx.ExecContext(ctx, testutil.UpdateBarSetFoo); err != nil { + t.Fatal(err) + } server.TestSpanner.PutExecutionTime(testutil.MethodCommitTransaction, testutil.SimulatedExecutionTime{ Errors: []error{gstatus.Error(codes.Aborted, "Aborted")}, }) @@ -3242,6 +3245,9 @@ func TestCommitResponse(t *testing.T) { if err != nil { t.Fatalf("failed to start transaction: %v", err) } + if _, err := tx.ExecContext(ctx, testutil.UpdateBarSetFoo); err != nil { + t.Fatal(err) + } if err := tx.Commit(); err != nil { t.Fatalf("commit failed: %v", err) } @@ -3410,6 +3416,9 @@ func TestShowVariableCommitTimestamp(t *testing.T) { t.Fatalf("failed to get a connection: %v", err) } tx, err := conn.BeginTx(ctx, nil) + if _, err := conn.ExecContext(ctx, testutil.UpdateBarSetFoo); err != nil { + t.Fatal(err) + } if err != nil { t.Fatalf("failed to start transaction: %v", err) } @@ -4562,7 +4571,8 @@ func TestRunTransaction(t *testing.T) { defer silentClose(rows) // Verify that internal retries are disabled during RunTransaction txi := reflect.ValueOf(tx).Elem().FieldByName("txi") - rwTx := (*readWriteTransaction)(txi.Elem().UnsafePointer()) + delegatingTx := (*delegatingTransaction)(txi.Elem().UnsafePointer()) + rwTx := delegatingTx.contextTransaction.(*readWriteTransaction) // Verify that getting the transaction through reflection worked. if g, w := rwTx.ctx, ctx; g != w { return fmt.Errorf("getting the transaction through reflection failed") @@ -5023,7 +5033,8 @@ func TestBeginReadWriteTransaction(t *testing.T) { } // Verify that internal retries are disabled during this transaction. txi := reflect.ValueOf(tx).Elem().FieldByName("txi") - rwTx := (*readWriteTransaction)(txi.Elem().UnsafePointer()) + delegatingTx := (*delegatingTransaction)(txi.Elem().UnsafePointer()) + rwTx := delegatingTx.contextTransaction.(*readWriteTransaction) // Verify that getting the transaction through reflection worked. if g, w := rwTx.ctx, ctx; g != w { t.Fatal("getting the transaction through reflection failed") diff --git a/partitioned_query.go b/partitioned_query.go index 018f7b7d..30c2f6fb 100644 --- a/partitioned_query.go +++ b/partitioned_query.go @@ -29,8 +29,6 @@ import ( type BatchReadOnlyTransactionOptions struct { TimestampBound spanner.TimestampBound - - close func() } // PartitionedQueryOptions are used for queries that use the AutoPartitionQuery @@ -183,15 +181,17 @@ func BeginBatchReadOnlyTransaction(ctx context.Context, db *sql.DB, options Batc if err != nil { return nil, err } - options.close = func() { + if err := withTransactionCloseFunc(conn, func() { // Close the connection asynchronously, as the transaction will still // be active when we hit this point. go conn.Close() + }); err != nil { + return nil, err } + tx, err := conn.BeginTx(ctx, &sql.TxOptions{ReadOnly: true, Isolation: WithBatchReadOnly(sql.LevelDefault)}) if err := withTempBatchReadOnlyTransactionOptions(conn, &options); err != nil { return nil, err } - tx, err := conn.BeginTx(ctx, &sql.TxOptions{ReadOnly: true, Isolation: WithBatchReadOnly(sql.LevelDefault)}) if err != nil { clearTempBatchReadOnlyTransactionOptions(conn) return nil, err @@ -206,7 +206,7 @@ func withTempBatchReadOnlyTransactionOptions(conn *sql.Conn, options *BatchReadO // It is not a Spanner connection. return spanner.ToSpannerError(status.Error(codes.FailedPrecondition, "This function can only be used with a Spanner connection")) } - spannerConn.withTempBatchReadOnlyTransactionOptions(options) + spannerConn.setBatchReadOnlyTransactionOptions(options) return nil }) } diff --git a/spannerlib/api/connection.go b/spannerlib/api/connection.go index 907212ec..ab256879 100644 --- a/spannerlib/api/connection.go +++ b/spannerlib/api/connection.go @@ -121,8 +121,8 @@ type Connection struct { // It is implemented by the spannerdriver.conn struct. type spannerConn interface { WriteMutations(ctx context.Context, ms []*spanner.Mutation) (*spanner.CommitResponse, error) - BeginReadOnlyTransaction(ctx context.Context, options *spannerdriver.ReadOnlyTransactionOptions) (driver.Tx, error) - BeginReadWriteTransaction(ctx context.Context, options *spannerdriver.ReadWriteTransactionOptions) (driver.Tx, error) + BeginReadOnlyTransaction(ctx context.Context, options *spannerdriver.ReadOnlyTransactionOptions, close func()) (driver.Tx, error) + BeginReadWriteTransaction(ctx context.Context, options *spannerdriver.ReadWriteTransactionOptions, close func()) (driver.Tx, error) Commit(ctx context.Context) (*spanner.CommitResponse, error) Rollback(ctx context.Context) error } @@ -155,7 +155,10 @@ func (conn *Connection) writeMutations(ctx context.Context, mutation *spannerpb. } var commitResponse *spanner.CommitResponse if err := conn.backend.Raw(func(driverConn any) (err error) { - sc, _ := driverConn.(spannerConn) + sc, ok := driverConn.(spannerConn) + if !ok { + return status.Error(codes.Internal, "spanner driver connection does not implement spannerConn") + } commitResponse, err = sc.WriteMutations(ctx, mutations) return err }); err != nil { @@ -189,16 +192,22 @@ func (conn *Connection) BeginTransaction(ctx context.Context, txOpts *spannerpb. func (conn *Connection) beginReadOnlyTransaction(ctx context.Context, opts *spannerdriver.ReadOnlyTransactionOptions) error { return conn.backend.Raw(func(driverConn any) (err error) { - sc, _ := driverConn.(spannerConn) - _, err = sc.BeginReadOnlyTransaction(ctx, opts) + sc, ok := driverConn.(spannerConn) + if !ok { + return status.Error(codes.Internal, "driver connection does not implement spannerConn") + } + _, err = sc.BeginReadOnlyTransaction(ctx, opts, func() {}) return err }) } func (conn *Connection) beginReadWriteTransaction(ctx context.Context, opts *spannerdriver.ReadWriteTransactionOptions) error { return conn.backend.Raw(func(driverConn any) (err error) { - sc, _ := driverConn.(spannerConn) - _, err = sc.BeginReadWriteTransaction(ctx, opts) + sc, ok := driverConn.(spannerConn) + if !ok { + return status.Error(codes.Internal, "driver connection does not implement spannerConn") + } + _, err = sc.BeginReadWriteTransaction(ctx, opts, func() {}) return err }) } @@ -206,8 +215,11 @@ func (conn *Connection) beginReadWriteTransaction(ctx context.Context, opts *spa func (conn *Connection) commit(ctx context.Context) (*spannerpb.CommitResponse, error) { var response *spanner.CommitResponse if err := conn.backend.Raw(func(driverConn any) (err error) { - spannerConn, _ := driverConn.(spannerConn) - response, err = spannerConn.Commit(ctx) + sc, ok := driverConn.(spannerConn) + if !ok { + return status.Error(codes.Internal, "driver connection does not implement spannerConn") + } + response, err = sc.Commit(ctx) if err != nil { return err } @@ -226,8 +238,11 @@ func (conn *Connection) commit(ctx context.Context) (*spannerpb.CommitResponse, func (conn *Connection) rollback(ctx context.Context) error { return conn.backend.Raw(func(driverConn any) (err error) { - spannerConn, _ := driverConn.(spannerConn) - return spannerConn.Rollback(ctx) + sc, ok := driverConn.(spannerConn) + if !ok { + return status.Error(codes.Internal, "driver connection does not implement spannerConn") + } + return sc.Rollback(ctx) }) } diff --git a/spannerlib/lib/connection_test.go b/spannerlib/lib/connection_test.go index 193e3fd9..c9ccac88 100644 --- a/spannerlib/lib/connection_test.go +++ b/spannerlib/lib/connection_test.go @@ -196,12 +196,8 @@ func TestBeginAndCommit(t *testing.T) { if g, w := commitMsg.Code, int32(0); g != w { t.Fatalf("Commit result mismatch\n Got: %v\nWant: %v", g, w) } - if commitMsg.Length() == 0 { - t.Fatal("Commit return zero length") - } - resp := &spannerpb.CommitResponse{} - if err := proto.Unmarshal(commitMsg.Res, resp); err != nil { - t.Fatalf("Failed to unmarshal commit response: %v", err) + if commitMsg.Length() != 0 { + t.Fatal("Commit returned non-zero length") } closeMsg := CloseConnection(ctx, poolMsg.ObjectId, connMsg.ObjectId) diff --git a/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/TransactionTest.java b/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/TransactionTest.java index f2eef624..2619fd70 100644 --- a/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/TransactionTest.java +++ b/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/TransactionTest.java @@ -53,9 +53,8 @@ public void testBeginAndCommit() { connection.beginTransaction(TransactionOptions.getDefaultInstance()); connection.commit(); - // TODO: The library should take a shortcut and just skip committing empty transactions. - assertEquals(1, mockSpanner.countRequestsOfType(BeginTransactionRequest.class)); - assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); + assertEquals(0, mockSpanner.countRequestsOfType(BeginTransactionRequest.class)); + assertEquals(0, mockSpanner.countRequestsOfType(CommitRequest.class)); } } diff --git a/transaction.go b/transaction.go index 297c6b60..8b92cb24 100644 --- a/transaction.go +++ b/transaction.go @@ -53,6 +53,7 @@ type contextTransaction interface { RunBatch(ctx context.Context) (driver.Result, error) RunDmlBatch(ctx context.Context) (SpannerResult, error) AbortBatch() (driver.Result, error) + IsInBatch() bool BufferWrite(ms []*spanner.Mutation) error } @@ -106,6 +107,116 @@ const ( txResultRollback ) +var _ contextTransaction = &delegatingTransaction{} + +// delegatingTransaction wraps a read/write or read-only transaction and delegates +// all calls to the underlying transaction. The underlying transaction is automatically +// created when the first query or DML statement is executed. The type of transaction is +// determined at the moment that the underlying transaction is created. This allows an +// application to execute statements like `set transaction read only` at the start of a +// transaction to set the type of transaction. +type delegatingTransaction struct { + conn *conn + ctx context.Context + close func(result txResult) + contextTransaction contextTransaction +} + +func (d *delegatingTransaction) ensureActivated() error { + if d.contextTransaction != nil { + return nil + } + tx, err := d.conn.activateTransaction() + if err != nil { + return err + } + d.contextTransaction = tx + return nil +} + +func (d *delegatingTransaction) Commit() error { + if d.contextTransaction == nil { + d.close(txResultCommit) + return nil + } + return d.contextTransaction.Commit() +} + +func (d *delegatingTransaction) Rollback() error { + if d.contextTransaction == nil { + d.close(txResultRollback) + return nil + } + return d.contextTransaction.Rollback() +} + +func (d *delegatingTransaction) resetForRetry(ctx context.Context) error { + if d.contextTransaction == nil { + return status.Error(codes.FailedPrecondition, "a transaction can only be reset after it has been activated") + } + return d.contextTransaction.resetForRetry(ctx) +} + +func (d *delegatingTransaction) Query(ctx context.Context, stmt spanner.Statement, stmtType parser.StatementType, execOptions *ExecOptions) (rowIterator, error) { + if err := d.ensureActivated(); err != nil { + return nil, err + } + return d.contextTransaction.Query(ctx, stmt, stmtType, execOptions) +} + +func (d *delegatingTransaction) partitionQuery(ctx context.Context, stmt spanner.Statement, execOptions *ExecOptions) (driver.Rows, error) { + if err := d.ensureActivated(); err != nil { + return nil, err + } + return d.contextTransaction.partitionQuery(ctx, stmt, execOptions) +} + +func (d *delegatingTransaction) ExecContext(ctx context.Context, stmt spanner.Statement, statementInfo *parser.StatementInfo, options spanner.QueryOptions) (*result, error) { + if err := d.ensureActivated(); err != nil { + return nil, err + } + return d.contextTransaction.ExecContext(ctx, stmt, statementInfo, options) +} + +func (d *delegatingTransaction) StartBatchDML(options spanner.QueryOptions, automatic bool) (driver.Result, error) { + if err := d.ensureActivated(); err != nil { + return nil, err + } + return d.contextTransaction.StartBatchDML(options, automatic) +} + +func (d *delegatingTransaction) RunBatch(ctx context.Context) (driver.Result, error) { + if err := d.ensureActivated(); err != nil { + return nil, err + } + return d.contextTransaction.RunBatch(ctx) +} + +func (d *delegatingTransaction) RunDmlBatch(ctx context.Context) (SpannerResult, error) { + if err := d.ensureActivated(); err != nil { + return nil, err + } + return d.contextTransaction.RunDmlBatch(ctx) +} + +func (d *delegatingTransaction) AbortBatch() (driver.Result, error) { + if err := d.ensureActivated(); err != nil { + return nil, err + } + return d.contextTransaction.AbortBatch() +} + +func (d *delegatingTransaction) IsInBatch() bool { + return d.contextTransaction != nil && d.contextTransaction.IsInBatch() +} + +func (d *delegatingTransaction) BufferWrite(ms []*spanner.Mutation) error { + if err := d.ensureActivated(); err != nil { + return err + } + return d.contextTransaction.BufferWrite(ms) +} + var _ contextTransaction = &readOnlyTransaction{} type readOnlyTransaction struct { @@ -220,6 +331,10 @@ func (tx *readOnlyTransaction) AbortBatch() (driver.Result, error) { return driver.ResultNoRows, nil } +func (tx *readOnlyTransaction) IsInBatch() bool { + return false +} + func (tx *readOnlyTransaction) BufferWrite([]*spanner.Mutation) error { return spanner.ToSpannerError(status.Errorf(codes.FailedPrecondition, "read-only transactions cannot write")) } @@ -428,7 +543,6 @@ func (tx *readWriteTransaction) Commit() (err error) { return err } var commitResponse spanner.CommitResponse - // TODO: Optimize this to skip the Commit also if the transaction has not yet been used. if tx.rwTx != nil { if !tx.retryAborts() { ts, err := tx.rwTx.CommitWithReturnResp(tx.ctx) @@ -586,6 +700,10 @@ func (tx *readWriteTransaction) AbortBatch() (driver.Result, error) { return driver.ResultNoRows, nil } +func (tx *readWriteTransaction) IsInBatch() bool { + return tx.batch != nil +} + func (tx *readWriteTransaction) maybeRunAutoDmlBatch(ctx context.Context) error { if tx.batch == nil || !tx.batch.automatic { return nil From dd33ab909b8e2cd711ff62b4a954685cc74e2b1f Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 8 Oct 2025 09:11:17 +0100 Subject: [PATCH 4/9] chore: update actions/checkout action to v5 (#555) --- .github/workflows/integration-tests-on-emulator.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/integration-tests-on-emulator.yml b/.github/workflows/integration-tests-on-emulator.yml index acecd5fa..1e75c3cf 100644 --- a/.github/workflows/integration-tests-on-emulator.yml +++ b/.github/workflows/integration-tests-on-emulator.yml @@ -22,7 +22,7 @@ jobs: with: go-version: 1.25.x - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Run Go integration tests on emulator run: go test -race env: From 7457422807a9b2ed83cacc13f251c5826d64165f Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 8 Oct 2025 11:22:28 +0100 Subject: [PATCH 5/9] fix: update all dependencies (#551) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: update all dependencies * chore: go mod tidy --------- Co-authored-by: Knut Olav Løite --- benchmarks/go.mod | 12 ++++++------ benchmarks/go.sum | 16 ++++++++-------- examples/go.mod | 8 ++++---- examples/go.sum | 16 ++++++++-------- go.mod | 10 +++++----- go.sum | 16 ++++++++-------- snippets/go.mod | 12 ++++++------ snippets/go.sum | 16 ++++++++-------- spannerlib/go.mod | 12 ++++++------ spannerlib/go.sum | 16 ++++++++-------- 10 files changed, 67 insertions(+), 67 deletions(-) diff --git a/benchmarks/go.mod b/benchmarks/go.mod index 78dcf556..8d462f66 100644 --- a/benchmarks/go.mod +++ b/benchmarks/go.mod @@ -2,7 +2,7 @@ module github.com/googleapis/go-sql-spanner/benchmarks go 1.24.0 -toolchain go1.25.1 +toolchain go1.25.2 replace github.com/googleapis/go-sql-spanner => ../ @@ -10,15 +10,15 @@ require ( cloud.google.com/go v0.123.0 cloud.google.com/go/spanner v1.86.0 github.com/google/uuid v1.6.0 - github.com/googleapis/go-sql-spanner v1.18.1 - google.golang.org/api v0.251.0 - google.golang.org/grpc v1.75.1 + github.com/googleapis/go-sql-spanner v1.19.0 + google.golang.org/api v0.252.0 + google.golang.org/grpc v1.76.0 google.golang.org/protobuf v1.36.10 ) require ( cel.dev/expr v0.24.0 // indirect - cloud.google.com/go/auth v0.16.5 // indirect + cloud.google.com/go/auth v0.17.0 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect cloud.google.com/go/compute/metadata v0.9.0 // indirect cloud.google.com/go/iam v1.5.2 // indirect @@ -61,5 +61,5 @@ require ( golang.org/x/time v0.13.0 // indirect google.golang.org/genproto v0.0.0-20250804133106-a7a43d27e69b // indirect google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff // indirect ) diff --git a/benchmarks/go.sum b/benchmarks/go.sum index 37cdcdc0..4c175de9 100644 --- a/benchmarks/go.sum +++ b/benchmarks/go.sum @@ -101,8 +101,8 @@ cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVo cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= -cloud.google.com/go/auth v0.16.5 h1:mFWNQ2FEVWAliEQWpAdH80omXFokmrnbDhUS9cBywsI= -cloud.google.com/go/auth v0.16.5/go.mod h1:utzRfHMP+Vv0mpOkTRQoWD2q3BatTOoWbA7gCc2dUhQ= +cloud.google.com/go/auth v0.17.0 h1:74yCm7hCj2rUyyAocqnFzsAYXgJhrG26XCFimrc/Kz4= +cloud.google.com/go/auth v0.17.0/go.mod h1:6wv/t5/6rOPAX4fJiRjKkJCvswLwdet7G8+UGXt7nCQ= cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= @@ -1371,8 +1371,8 @@ google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/ google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= -google.golang.org/api v0.251.0 h1:6lea5nHRT8RUmpy9kkC2PJYnhnDAB13LqrLSVQlMIE8= -google.golang.org/api v0.251.0/go.mod h1:Rwy0lPf/TD7+T2VhYcffCHhyyInyuxGjICxdfLqT7KI= +google.golang.org/api v0.252.0 h1:xfKJeAJaMwb8OC9fesr369rjciQ704AjU/psjkKURSI= +google.golang.org/api v0.252.0/go.mod h1:dnHOv81x5RAmumZ7BWLShB/u7JZNeyalImxHmtTHxqw= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1516,8 +1516,8 @@ google.golang.org/genproto v0.0.0-20250804133106-a7a43d27e69b h1:eZTgydvqZO44zyT google.golang.org/genproto v0.0.0-20250804133106-a7a43d27e69b/go.mod h1:suyz2QBHQKlGIF92HEEsCfO1SwxXdk7PFLz+Zd9Uah4= google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c h1:AtEkQdl5b6zsybXcbz00j1LwNodDuH6hVifIaNqk7NQ= google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c/go.mod h1:ea2MjsO70ssTfCjiwHgI0ZFqcw45Ksuk2ckf9G468GA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797 h1:CirRxTOwnRWVLKzDNrs0CXAaVozJoR4G9xvdRecrdpk= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797/go.mod h1:HSkG/KdJWusxU1F6CNrwNDjBMgisKxGnc5dAZfT0mjQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff h1:A90eA31Wq6HOMIQlLfzFwzqGKBTuaVztYu/g8sn+8Zc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1559,8 +1559,8 @@ google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5v google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= -google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI= -google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= +google.golang.org/grpc v1.76.0 h1:UnVkv1+uMLYXoIz6o7chp59WfQUYA2ex/BXQ9rHZu7A= +google.golang.org/grpc v1.76.0/go.mod h1:Ju12QI8M6iQJtbcsV+awF5a4hfJMLi4X0JLo94ULZ6c= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= diff --git a/examples/go.mod b/examples/go.mod index c5ed264a..3ea288b6 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -13,12 +13,12 @@ require ( github.com/docker/go-connections v0.5.0 github.com/googleapis/go-sql-spanner v1.16.2 github.com/testcontainers/testcontainers-go v0.38.0 - google.golang.org/api v0.251.0 + google.golang.org/api v0.252.0 ) require ( cel.dev/expr v0.24.0 // indirect - cloud.google.com/go/auth v0.16.5 // indirect + cloud.google.com/go/auth v0.17.0 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect cloud.google.com/go/compute/metadata v0.9.0 // indirect cloud.google.com/go/iam v1.5.2 // indirect @@ -100,8 +100,8 @@ require ( golang.org/x/time v0.13.0 // indirect google.golang.org/genproto v0.0.0-20250804133106-a7a43d27e69b // indirect google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797 // indirect - google.golang.org/grpc v1.75.1 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff // indirect + google.golang.org/grpc v1.76.0 // indirect google.golang.org/protobuf v1.36.10 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/examples/go.sum b/examples/go.sum index f6ba2e7b..5e19c450 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -101,8 +101,8 @@ cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVo cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= -cloud.google.com/go/auth v0.16.5 h1:mFWNQ2FEVWAliEQWpAdH80omXFokmrnbDhUS9cBywsI= -cloud.google.com/go/auth v0.16.5/go.mod h1:utzRfHMP+Vv0mpOkTRQoWD2q3BatTOoWbA7gCc2dUhQ= +cloud.google.com/go/auth v0.17.0 h1:74yCm7hCj2rUyyAocqnFzsAYXgJhrG26XCFimrc/Kz4= +cloud.google.com/go/auth v0.17.0/go.mod h1:6wv/t5/6rOPAX4fJiRjKkJCvswLwdet7G8+UGXt7nCQ= cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= @@ -1476,8 +1476,8 @@ google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/ google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= -google.golang.org/api v0.251.0 h1:6lea5nHRT8RUmpy9kkC2PJYnhnDAB13LqrLSVQlMIE8= -google.golang.org/api v0.251.0/go.mod h1:Rwy0lPf/TD7+T2VhYcffCHhyyInyuxGjICxdfLqT7KI= +google.golang.org/api v0.252.0 h1:xfKJeAJaMwb8OC9fesr369rjciQ704AjU/psjkKURSI= +google.golang.org/api v0.252.0/go.mod h1:dnHOv81x5RAmumZ7BWLShB/u7JZNeyalImxHmtTHxqw= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1621,8 +1621,8 @@ google.golang.org/genproto v0.0.0-20250804133106-a7a43d27e69b h1:eZTgydvqZO44zyT google.golang.org/genproto v0.0.0-20250804133106-a7a43d27e69b/go.mod h1:suyz2QBHQKlGIF92HEEsCfO1SwxXdk7PFLz+Zd9Uah4= google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c h1:AtEkQdl5b6zsybXcbz00j1LwNodDuH6hVifIaNqk7NQ= google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c/go.mod h1:ea2MjsO70ssTfCjiwHgI0ZFqcw45Ksuk2ckf9G468GA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797 h1:CirRxTOwnRWVLKzDNrs0CXAaVozJoR4G9xvdRecrdpk= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797/go.mod h1:HSkG/KdJWusxU1F6CNrwNDjBMgisKxGnc5dAZfT0mjQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff h1:A90eA31Wq6HOMIQlLfzFwzqGKBTuaVztYu/g8sn+8Zc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1664,8 +1664,8 @@ google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5v google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= -google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI= -google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= +google.golang.org/grpc v1.76.0 h1:UnVkv1+uMLYXoIz6o7chp59WfQUYA2ex/BXQ9rHZu7A= +google.golang.org/grpc v1.76.0/go.mod h1:Ju12QI8M6iQJtbcsV+awF5a4hfJMLi4X0JLo94ULZ6c= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= diff --git a/go.mod b/go.mod index 3311c949..55e0714d 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,7 @@ module github.com/googleapis/go-sql-spanner go 1.24.0 -toolchain go1.25.1 +toolchain go1.25.2 require ( cloud.google.com/go v0.123.0 @@ -13,15 +13,15 @@ require ( github.com/google/uuid v1.6.0 github.com/googleapis/gax-go/v2 v2.15.0 github.com/hashicorp/golang-lru/v2 v2.0.7 - google.golang.org/api v0.251.0 - google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797 - google.golang.org/grpc v1.75.1 + google.golang.org/api v0.252.0 + google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff + google.golang.org/grpc v1.76.0 google.golang.org/protobuf v1.36.10 ) require ( cel.dev/expr v0.24.0 // indirect - cloud.google.com/go/auth v0.16.5 // indirect + cloud.google.com/go/auth v0.17.0 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect cloud.google.com/go/compute/metadata v0.9.0 // indirect cloud.google.com/go/iam v1.5.2 // indirect diff --git a/go.sum b/go.sum index 37cdcdc0..4c175de9 100644 --- a/go.sum +++ b/go.sum @@ -101,8 +101,8 @@ cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVo cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= -cloud.google.com/go/auth v0.16.5 h1:mFWNQ2FEVWAliEQWpAdH80omXFokmrnbDhUS9cBywsI= -cloud.google.com/go/auth v0.16.5/go.mod h1:utzRfHMP+Vv0mpOkTRQoWD2q3BatTOoWbA7gCc2dUhQ= +cloud.google.com/go/auth v0.17.0 h1:74yCm7hCj2rUyyAocqnFzsAYXgJhrG26XCFimrc/Kz4= +cloud.google.com/go/auth v0.17.0/go.mod h1:6wv/t5/6rOPAX4fJiRjKkJCvswLwdet7G8+UGXt7nCQ= cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= @@ -1371,8 +1371,8 @@ google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/ google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= -google.golang.org/api v0.251.0 h1:6lea5nHRT8RUmpy9kkC2PJYnhnDAB13LqrLSVQlMIE8= -google.golang.org/api v0.251.0/go.mod h1:Rwy0lPf/TD7+T2VhYcffCHhyyInyuxGjICxdfLqT7KI= +google.golang.org/api v0.252.0 h1:xfKJeAJaMwb8OC9fesr369rjciQ704AjU/psjkKURSI= +google.golang.org/api v0.252.0/go.mod h1:dnHOv81x5RAmumZ7BWLShB/u7JZNeyalImxHmtTHxqw= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1516,8 +1516,8 @@ google.golang.org/genproto v0.0.0-20250804133106-a7a43d27e69b h1:eZTgydvqZO44zyT google.golang.org/genproto v0.0.0-20250804133106-a7a43d27e69b/go.mod h1:suyz2QBHQKlGIF92HEEsCfO1SwxXdk7PFLz+Zd9Uah4= google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c h1:AtEkQdl5b6zsybXcbz00j1LwNodDuH6hVifIaNqk7NQ= google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c/go.mod h1:ea2MjsO70ssTfCjiwHgI0ZFqcw45Ksuk2ckf9G468GA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797 h1:CirRxTOwnRWVLKzDNrs0CXAaVozJoR4G9xvdRecrdpk= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797/go.mod h1:HSkG/KdJWusxU1F6CNrwNDjBMgisKxGnc5dAZfT0mjQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff h1:A90eA31Wq6HOMIQlLfzFwzqGKBTuaVztYu/g8sn+8Zc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1559,8 +1559,8 @@ google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5v google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= -google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI= -google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= +google.golang.org/grpc v1.76.0 h1:UnVkv1+uMLYXoIz6o7chp59WfQUYA2ex/BXQ9rHZu7A= +google.golang.org/grpc v1.76.0/go.mod h1:Ju12QI8M6iQJtbcsV+awF5a4hfJMLi4X0JLo94ULZ6c= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= diff --git a/snippets/go.mod b/snippets/go.mod index 2dd835ea..7213108e 100644 --- a/snippets/go.mod +++ b/snippets/go.mod @@ -2,21 +2,21 @@ module github.com/googleapis/go-sql-spanner/examples go 1.24.0 -toolchain go1.25.1 +toolchain go1.25.2 replace github.com/googleapis/go-sql-spanner => ../ require ( cloud.google.com/go/spanner v1.86.0 github.com/docker/docker v28.5.0+incompatible - github.com/googleapis/go-sql-spanner v1.18.1 + github.com/googleapis/go-sql-spanner v1.19.0 github.com/testcontainers/testcontainers-go v0.39.0 ) require ( cel.dev/expr v0.24.0 // indirect cloud.google.com/go v0.123.0 // indirect - cloud.google.com/go/auth v0.16.5 // indirect + cloud.google.com/go/auth v0.17.0 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect cloud.google.com/go/compute/metadata v0.9.0 // indirect cloud.google.com/go/iam v1.5.2 // indirect @@ -97,11 +97,11 @@ require ( golang.org/x/sys v0.36.0 // indirect golang.org/x/text v0.29.0 // indirect golang.org/x/time v0.13.0 // indirect - google.golang.org/api v0.251.0 // indirect + google.golang.org/api v0.252.0 // indirect google.golang.org/genproto v0.0.0-20250804133106-a7a43d27e69b // indirect google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797 // indirect - google.golang.org/grpc v1.75.1 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff // indirect + google.golang.org/grpc v1.76.0 // indirect google.golang.org/protobuf v1.36.10 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/snippets/go.sum b/snippets/go.sum index 064c23d0..d344f008 100644 --- a/snippets/go.sum +++ b/snippets/go.sum @@ -101,8 +101,8 @@ cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVo cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= -cloud.google.com/go/auth v0.16.5 h1:mFWNQ2FEVWAliEQWpAdH80omXFokmrnbDhUS9cBywsI= -cloud.google.com/go/auth v0.16.5/go.mod h1:utzRfHMP+Vv0mpOkTRQoWD2q3BatTOoWbA7gCc2dUhQ= +cloud.google.com/go/auth v0.17.0 h1:74yCm7hCj2rUyyAocqnFzsAYXgJhrG26XCFimrc/Kz4= +cloud.google.com/go/auth v0.17.0/go.mod h1:6wv/t5/6rOPAX4fJiRjKkJCvswLwdet7G8+UGXt7nCQ= cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= @@ -1470,8 +1470,8 @@ google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/ google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= -google.golang.org/api v0.251.0 h1:6lea5nHRT8RUmpy9kkC2PJYnhnDAB13LqrLSVQlMIE8= -google.golang.org/api v0.251.0/go.mod h1:Rwy0lPf/TD7+T2VhYcffCHhyyInyuxGjICxdfLqT7KI= +google.golang.org/api v0.252.0 h1:xfKJeAJaMwb8OC9fesr369rjciQ704AjU/psjkKURSI= +google.golang.org/api v0.252.0/go.mod h1:dnHOv81x5RAmumZ7BWLShB/u7JZNeyalImxHmtTHxqw= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1615,8 +1615,8 @@ google.golang.org/genproto v0.0.0-20250804133106-a7a43d27e69b h1:eZTgydvqZO44zyT google.golang.org/genproto v0.0.0-20250804133106-a7a43d27e69b/go.mod h1:suyz2QBHQKlGIF92HEEsCfO1SwxXdk7PFLz+Zd9Uah4= google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c h1:AtEkQdl5b6zsybXcbz00j1LwNodDuH6hVifIaNqk7NQ= google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c/go.mod h1:ea2MjsO70ssTfCjiwHgI0ZFqcw45Ksuk2ckf9G468GA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797 h1:CirRxTOwnRWVLKzDNrs0CXAaVozJoR4G9xvdRecrdpk= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797/go.mod h1:HSkG/KdJWusxU1F6CNrwNDjBMgisKxGnc5dAZfT0mjQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff h1:A90eA31Wq6HOMIQlLfzFwzqGKBTuaVztYu/g8sn+8Zc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1658,8 +1658,8 @@ google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5v google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= -google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI= -google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= +google.golang.org/grpc v1.76.0 h1:UnVkv1+uMLYXoIz6o7chp59WfQUYA2ex/BXQ9rHZu7A= +google.golang.org/grpc v1.76.0/go.mod h1:Ju12QI8M6iQJtbcsV+awF5a4hfJMLi4X0JLo94ULZ6c= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= diff --git a/spannerlib/go.mod b/spannerlib/go.mod index 668edc15..d0ee238b 100644 --- a/spannerlib/go.mod +++ b/spannerlib/go.mod @@ -2,7 +2,7 @@ module spannerlib go 1.24.0 -toolchain go1.25.1 +toolchain go1.25.2 replace github.com/googleapis/go-sql-spanner => .. @@ -10,15 +10,15 @@ require ( cloud.google.com/go/longrunning v0.6.7 cloud.google.com/go/spanner v1.86.0 github.com/google/go-cmp v0.7.0 - github.com/googleapis/go-sql-spanner v1.18.1 - google.golang.org/grpc v1.75.1 + github.com/googleapis/go-sql-spanner v1.19.0 + google.golang.org/grpc v1.76.0 google.golang.org/protobuf v1.36.10 ) require ( cel.dev/expr v0.24.0 // indirect cloud.google.com/go v0.123.0 // indirect - cloud.google.com/go/auth v0.16.5 // indirect + cloud.google.com/go/auth v0.17.0 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect cloud.google.com/go/compute/metadata v0.9.0 // indirect cloud.google.com/go/iam v1.5.2 // indirect @@ -60,8 +60,8 @@ require ( golang.org/x/sys v0.36.0 // indirect golang.org/x/text v0.29.0 // indirect golang.org/x/time v0.13.0 // indirect - google.golang.org/api v0.251.0 // indirect + google.golang.org/api v0.252.0 // indirect google.golang.org/genproto v0.0.0-20250804133106-a7a43d27e69b // indirect google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff // indirect ) diff --git a/spannerlib/go.sum b/spannerlib/go.sum index 37cdcdc0..4c175de9 100644 --- a/spannerlib/go.sum +++ b/spannerlib/go.sum @@ -101,8 +101,8 @@ cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVo cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= -cloud.google.com/go/auth v0.16.5 h1:mFWNQ2FEVWAliEQWpAdH80omXFokmrnbDhUS9cBywsI= -cloud.google.com/go/auth v0.16.5/go.mod h1:utzRfHMP+Vv0mpOkTRQoWD2q3BatTOoWbA7gCc2dUhQ= +cloud.google.com/go/auth v0.17.0 h1:74yCm7hCj2rUyyAocqnFzsAYXgJhrG26XCFimrc/Kz4= +cloud.google.com/go/auth v0.17.0/go.mod h1:6wv/t5/6rOPAX4fJiRjKkJCvswLwdet7G8+UGXt7nCQ= cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= @@ -1371,8 +1371,8 @@ google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/ google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= -google.golang.org/api v0.251.0 h1:6lea5nHRT8RUmpy9kkC2PJYnhnDAB13LqrLSVQlMIE8= -google.golang.org/api v0.251.0/go.mod h1:Rwy0lPf/TD7+T2VhYcffCHhyyInyuxGjICxdfLqT7KI= +google.golang.org/api v0.252.0 h1:xfKJeAJaMwb8OC9fesr369rjciQ704AjU/psjkKURSI= +google.golang.org/api v0.252.0/go.mod h1:dnHOv81x5RAmumZ7BWLShB/u7JZNeyalImxHmtTHxqw= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1516,8 +1516,8 @@ google.golang.org/genproto v0.0.0-20250804133106-a7a43d27e69b h1:eZTgydvqZO44zyT google.golang.org/genproto v0.0.0-20250804133106-a7a43d27e69b/go.mod h1:suyz2QBHQKlGIF92HEEsCfO1SwxXdk7PFLz+Zd9Uah4= google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c h1:AtEkQdl5b6zsybXcbz00j1LwNodDuH6hVifIaNqk7NQ= google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c/go.mod h1:ea2MjsO70ssTfCjiwHgI0ZFqcw45Ksuk2ckf9G468GA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797 h1:CirRxTOwnRWVLKzDNrs0CXAaVozJoR4G9xvdRecrdpk= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797/go.mod h1:HSkG/KdJWusxU1F6CNrwNDjBMgisKxGnc5dAZfT0mjQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff h1:A90eA31Wq6HOMIQlLfzFwzqGKBTuaVztYu/g8sn+8Zc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1559,8 +1559,8 @@ google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5v google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= -google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI= -google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= +google.golang.org/grpc v1.76.0 h1:UnVkv1+uMLYXoIz6o7chp59WfQUYA2ex/BXQ9rHZu7A= +google.golang.org/grpc v1.76.0/go.mod h1:Ju12QI8M6iQJtbcsV+awF5a4hfJMLi4X0JLo94ULZ6c= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= From 7716c72e094ca331e145d97d33008e0c03d5e0d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Knut=20Olav=20L=C3=B8ite?= Date: Thu, 16 Oct 2025 12:52:26 +0200 Subject: [PATCH 6/9] chore: add signal handler to remove temp file --- spannerlib/grpc-server/server.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/spannerlib/grpc-server/server.go b/spannerlib/grpc-server/server.go index a16fc758..d8883f00 100644 --- a/spannerlib/grpc-server/server.go +++ b/spannerlib/grpc-server/server.go @@ -5,6 +5,8 @@ import ( "log" "net" "os" + "os/signal" + "syscall" "cloud.google.com/go/spanner/apiv1/spannerpb" "google.golang.org/grpc" @@ -23,9 +25,22 @@ func main() { if len(os.Args) > 2 { tp = os.Args[2] } + // if tp == "unix" { defer func() { _ = os.Remove(name) }() + // Set up a channel to listen for OS signals that terminate the process, + // so we can clean up the temp file in those cases as well. + sigs := make(chan os.Signal, 1) + signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM) + go func() { + // Wait for a signal. + <-sigs + // Delete the temp file. + _ = os.Remove(name) + os.Exit(0) + }() } + lis, err := net.Listen(tp, name) if err != nil { log.Fatalf("failed to listen: %v\n", err) From d122aa38eb1fa55de8bc0f45dbe4c7bfbb5b8445 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Knut=20Olav=20L=C3=B8ite?= Date: Thu, 16 Oct 2025 13:03:23 +0200 Subject: [PATCH 7/9] chore: add .NET gRPC wrapper (#539) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: update dependency net.java.dev.jna:jna to v5.18.0 (#538) * chore: update all dependencies (#537) * fix: update all dependencies (#536) * fix: update all dependencies * chore: go mod tidy --------- Co-authored-by: Knut Olav Løite * chore(main): release 1.18.1 (#525) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> * fix: update module github.com/googleapis/go-sql-spanner to v1.18.1 (#540) * chore: add .NET gRPC wrapper Adds a gRPC wrapper for .NET. This wrapper uses the gRPC API to connect to SpannerLib. The gRPC channel uses a Unix domain socket. * fix: update dependency net.java.dev.jna:jna to v5.18.1 (#544) This PR contains the following updates: | Package | Change | Age | Confidence | |---|---|---|---| | [net.java.dev.jna:jna](https://redirect.github.com/java-native-access/jna) | `5.18.0` -> `5.18.1` | [![age](https://developer.mend.io/api/mc/badges/age/maven/net.java.dev.jna:jna/5.18.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/net.java.dev.jna:jna/5.18.0/5.18.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
java-native-access/jna (net.java.dev.jna:jna) ### [`v5.18.1`](https://redirect.github.com/java-native-access/jna/blob/HEAD/CHANGES.md#Release-5181) [Compare Source](https://redirect.github.com/java-native-access/jna/compare/5.18.0...5.18.1) \============== ## Bug Fixes - [#​1686](https://redirect.github.com/java-native-access/jna/issues/1686): Fix `sortFields` race condition while getting fields - [@​bendk](https://redirect.github.com/bendk).
--- ### Configuration 📅 **Schedule**: Branch creation - Between 12:00 AM and 03:59 AM ( * 0-3 * * * ) (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/googleapis/go-sql-spanner). * feat: add authority param support to DSN (#546) Signed-off-by: Marco Pracucci * fix: update all dependencies (#542) * fix: update all dependencies * chore: go mod tidy * build: add ByteBuddy for Java wrapper --------- Co-authored-by: Knut Olav Løite * feat(ruby): Add Ruby FFI wrapper for spannerlib (#545) * feat(ruby): add Ruby FFI wrapper for spannerlib * chore(main): release 1.19.0 (#541) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> * chore: store temp TransactionOptions in connection state (#548) Store temporary TransactionOptions in the connection state as local options. Local options only apply to the current transaction. This simplifies the internal state handling of the driver, as all transaction state should only be read from the connection state, and not also from a temporary variable. This also enables the use of a combination of temporary transaction options and using SQL statements to set further options. The shared library always includes temporary transaction options, as the BeginTransaction function accepts TransactionOptions as an input argument. This meant that using SQL statements to set further transaction options was not supported through the shared library. * feat: parse SET TRANSACTION statements (#549) * feat: parse SET TRANSACTION statements Parse SET TRANSACTION statements and translate these to SET LOCAL statements. SET TRANSACTION may only be executed in a transaction block, and can only be used for a specific, limited set of connection properties. The syntax is specified by the SQL standard and PostgreSQL. See also https://www.postgresql.org/docs/current/sql-set-transaction.html This change only adds partial support. The following features will be added in future changes: 1. SET TRANSACTION READ {WRITE | ONLY} is not picked up by the driver, as the type of transaction is set directly when BeginTx is called. A refactor of this transaction handling is needed to be able to pick up SET TRANSACTION READ ONLY / SET TRANSACTION READ WRITE statements that are executed after BeginTx has been called. 2. PostgreSQL allows multiple transaction modes to be set in a single SET TRANSACTION statement. E.g. the following is allowed: SET TRANSACTION READ WRITE, ISOLATION LEVEL SERIALIZABLE The current implementation only supports one transaction mode per SET statement. * feat: support multiple transaction options in one statement * feat: support transaction options in BEGIN statements (#550) * feat: parse SET TRANSACTION statements Parse SET TRANSACTION statements and translate these to SET LOCAL statements. SET TRANSACTION may only be executed in a transaction block, and can only be used for a specific, limited set of connection properties. The syntax is specified by the SQL standard and PostgreSQL. See also https://www.postgresql.org/docs/current/sql-set-transaction.html This change only adds partial support. The following features will be added in future changes: 1. SET TRANSACTION READ {WRITE | ONLY} is not picked up by the driver, as the type of transaction is set directly when BeginTx is called. A refactor of this transaction handling is needed to be able to pick up SET TRANSACTION READ ONLY / SET TRANSACTION READ WRITE statements that are executed after BeginTx has been called. 2. PostgreSQL allows multiple transaction modes to be set in a single SET TRANSACTION statement. E.g. the following is allowed: SET TRANSACTION READ WRITE, ISOLATION LEVEL SERIALIZABLE The current implementation only supports one transaction mode per SET statement. * feat: support multiple transaction options in one statement * feat: support transaction options in BEGIN statements Adds support for including transaction options in BEGIN statements, like: ```sql BEGIN READ ONLY; BEGIN READ WRITE; BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ; BEGIN READ WRITE, ISOLATION LEVEL SERIALIZABLE; ``` * chore: re-trigger checks * chore: add timeout for server startup --------- Signed-off-by: Marco Pracucci Co-authored-by: Mend Renovate Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> Co-authored-by: Marco Pracucci Co-authored-by: aakashanandg --- .github/workflows/spanner-lib-tests.yml | 30 + .../build-dotnet-darwin-aarch64.sh | 4 + .../grpc-server/build-java-darwin-aarch64.sh | 1 + spannerlib/grpc-server/build-protos.sh | 13 +- .../grpc-server/google/spannerlib/spannerlib | 1 + .../google/spannerlib/v1/spannerlib.pb.go | 353 +- .../google/spannerlib/v1/spannerlib.proto | 9 + .../spannerlib/v1/spannerlib_grpc.pb.go | 38 + spannerlib/grpc-server/server.go | 4 + .../GrpcLibSpanner.cs | 403 ++ .../StreamingRows.cs | 131 + .../spannerlib-dotnet-grpc-impl.csproj | 19 + .../spannerlib-dotnet-grpc-server/Server.cs | 196 + .../spannerlib-dotnet-grpc-server/build.sh | 16 + .../spannerlib-dotnet-grpc-server.csproj | 19 + .../ServerTests.cs | 50 + .../spannerlib-dotnet-grpc-tests.csproj | 28 + .../spannerlib-dotnet-grpc-v1/Spannerlib.g.cs | 4102 +++++++++++++++++ .../SpannerlibGrpc.cs | 590 +++ .../spannerlib-dotnet-grpc-v1.csproj | 15 + .../MockSpannerServer.cs | 6 + .../SpannerConverter.cs | 12 +- .../SharedLibSpanner.cs | 32 +- .../AbstractMockServerTests.cs | 66 + .../spannerlib-dotnet-tests/BasicTests.cs | 70 +- .../spannerlib-dotnet-tests/BatchTests.cs | 35 +- .../spannerlib-dotnet-tests/BenchmarkTests.cs | 197 + .../ConnectionTests.cs | 58 +- .../spannerlib-dotnet-tests/PoolTests.cs | 33 +- .../spannerlib-dotnet-tests/RowsTests.cs | 146 +- .../TransactionTests.cs | 71 +- .../spannerlib-dotnet-tests.csproj | 2 + .../spannerlib-dotnet/spannerlib-dotnet.sln | 24 + .../spannerlib-dotnet/AbstractLibObject.cs | 36 +- .../spannerlib-dotnet/Connection.cs | 16 + .../spannerlib-dotnet/ISpannerLib.cs | 51 +- .../spannerlib-dotnet/Rows.cs | 17 +- .../spannerlib-dotnet/SpannerException.cs | 7 + .../spannerlib/GrpcSpannerLibraryImpl.java | 30 + .../cloud/spannerlib/v1/InfoRequest.java | 364 ++ .../spannerlib/v1/InfoRequestOrBuilder.java | 12 + .../cloud/spannerlib/v1/InfoResponse.java | 522 +++ .../spannerlib/v1/InfoResponseOrBuilder.java | 27 + .../cloud/spannerlib/v1/SpannerLibGrpc.java | 124 +- .../cloud/spannerlib/v1/SpannerLibProto.java | 218 +- .../spannerlib/AbstractSpannerLibTest.java | 17 +- .../cloud/spannerlib/BenchmarkTest.java | 155 + 47 files changed, 7876 insertions(+), 494 deletions(-) create mode 100755 spannerlib/grpc-server/build-dotnet-darwin-aarch64.sh create mode 120000 spannerlib/grpc-server/google/spannerlib/spannerlib create mode 100644 spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/GrpcLibSpanner.cs create mode 100644 spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/StreamingRows.cs create mode 100644 spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/spannerlib-dotnet-grpc-impl.csproj create mode 100644 spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/Server.cs create mode 100755 spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/build.sh create mode 100644 spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/spannerlib-dotnet-grpc-server.csproj create mode 100644 spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-tests/ServerTests.cs create mode 100644 spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-tests/spannerlib-dotnet-grpc-tests.csproj create mode 100644 spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-v1/Spannerlib.g.cs create mode 100644 spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-v1/SpannerlibGrpc.cs create mode 100644 spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-v1/spannerlib-dotnet-grpc-v1.csproj create mode 100644 spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/AbstractMockServerTests.cs create mode 100644 spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/BenchmarkTests.cs create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/InfoRequest.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/InfoRequestOrBuilder.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/InfoResponse.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/InfoResponseOrBuilder.java create mode 100644 spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/BenchmarkTest.java diff --git a/.github/workflows/spanner-lib-tests.yml b/.github/workflows/spanner-lib-tests.yml index 5244cd8c..915d9030 100644 --- a/.github/workflows/spanner-lib-tests.yml +++ b/.github/workflows/spanner-lib-tests.yml @@ -97,6 +97,8 @@ jobs: go-version: ${{ matrix.go-version }} - name: Checkout code uses: actions/checkout@v4 + with: + submodules: 'true' - name: Build shared library working-directory: spannerlib/shared run: go build -o spannerlib.so -buildmode=c-shared shared_lib.go @@ -124,6 +126,34 @@ jobs: fi working-directory: spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native shell: bash + - name: Build gRPC server + working-directory: spannerlib/grpc-server + run: | + go build -o grpc_server server.go + chmod +x grpc_server + - name: Copy gRPC server to .NET wrapper + working-directory: spannerlib + run: | + mkdir -p wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/binaries/any + if [ "$RUNNER_OS" == "Windows" ]; then + cp grpc-server/grpc_server wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/binaries/any/grpc_server.exe + else + cp grpc-server/grpc_server wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/binaries/any/grpc_server + fi + shell: bash + - name: Build .NET gRPC server package + run: dotnet pack + working-directory: spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server + shell: bash + - name: Add .NET package source + run: | + if [ "$RUNNER_OS" == "Windows" ]; then + dotnet nuget add source ${GITHUB_WORKSPACE}"\spannerlib\wrappers\spannerlib-dotnet\spannerlib-dotnet-grpc-server\bin\Release" --name local-grpc-server + else + dotnet nuget add source "$PWD"/bin/Release --name local-grpc-server + fi + working-directory: spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server + shell: bash - name: Restore dependencies run: dotnet restore working-directory: spannerlib/wrappers/spannerlib-dotnet diff --git a/spannerlib/grpc-server/build-dotnet-darwin-aarch64.sh b/spannerlib/grpc-server/build-dotnet-darwin-aarch64.sh new file mode 100755 index 00000000..3578601b --- /dev/null +++ b/spannerlib/grpc-server/build-dotnet-darwin-aarch64.sh @@ -0,0 +1,4 @@ +go build -o grpc_server server.go +chmod +x grpc_server +cp grpc_server ../wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc/binaries/any/grpc_server +cp grpc_server ../wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc/binaries/osx-arm64/grpc_server diff --git a/spannerlib/grpc-server/build-java-darwin-aarch64.sh b/spannerlib/grpc-server/build-java-darwin-aarch64.sh index 9b5e9d77..a14a7154 100755 --- a/spannerlib/grpc-server/build-java-darwin-aarch64.sh +++ b/spannerlib/grpc-server/build-java-darwin-aarch64.sh @@ -1,3 +1,4 @@ go build -o grpc_server server.go chmod +x grpc_server +mkdir -p ../wrappers/spannerlib-java/src/main/resources/darwin-aarch64 cp grpc_server ../wrappers/spannerlib-java/src/main/resources/darwin-aarch64/grpc_server diff --git a/spannerlib/grpc-server/build-protos.sh b/spannerlib/grpc-server/build-protos.sh index b9214ef3..d3721808 100755 --- a/spannerlib/grpc-server/build-protos.sh +++ b/spannerlib/grpc-server/build-protos.sh @@ -1,6 +1,5 @@ PATH="${PATH}:${HOME}/go/bin" -rm -rf googleapis/google/spannerlib || true -cp -r google/spannerlib googleapis/google/spannerlib +ln -sf "${PWD}"/google/spannerlib googleapis/google/spannerlib cd googleapis || exit 1 protoc \ --go_out=../ \ @@ -14,5 +13,13 @@ protoc \ --java-grpc_out=../../wrappers/spannerlib-java/src/main/java/ \ --java-grpc_opt=paths=source_relative \ google/spannerlib/v1/spannerlib.proto +protoc \ + --csharp_out=../../wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-v1/ \ + --plugin=protoc-gen-csharp_grpc=/Users/loite/.nuget/packages/grpc.tools/2.72.0/tools/macosx_x64/grpc_csharp_plugin \ + --csharp_grpc_out=../../wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-v1/ \ + --csharp_opt=file_extension=.g.cs \ + --csharp_grpc_opt=no_server \ + --proto_path=. \ + google/spannerlib/v1/spannerlib.proto cd .. || exit 1 -rm -rf googleapis/google/spannerlib +rm googleapis/google/spannerlib diff --git a/spannerlib/grpc-server/google/spannerlib/spannerlib b/spannerlib/grpc-server/google/spannerlib/spannerlib new file mode 120000 index 00000000..73970885 --- /dev/null +++ b/spannerlib/grpc-server/google/spannerlib/spannerlib @@ -0,0 +1 @@ +/Users/loite/GolandProjects/go-sql-spanner/spannerlib/grpc-server/google/spannerlib \ No newline at end of file diff --git a/spannerlib/grpc-server/google/spannerlib/v1/spannerlib.pb.go b/spannerlib/grpc-server/google/spannerlib/v1/spannerlib.pb.go index 7c738df4..3707b228 100644 --- a/spannerlib/grpc-server/google/spannerlib/v1/spannerlib.pb.go +++ b/spannerlib/grpc-server/google/spannerlib/v1/spannerlib.pb.go @@ -25,6 +25,86 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +type InfoRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *InfoRequest) Reset() { + *x = InfoRequest{} + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *InfoRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InfoRequest) ProtoMessage() {} + +func (x *InfoRequest) ProtoReflect() protoreflect.Message { + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InfoRequest.ProtoReflect.Descriptor instead. +func (*InfoRequest) Descriptor() ([]byte, []int) { + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{0} +} + +type InfoResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *InfoResponse) Reset() { + *x = InfoResponse{} + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *InfoResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InfoResponse) ProtoMessage() {} + +func (x *InfoResponse) ProtoReflect() protoreflect.Message { + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InfoResponse.ProtoReflect.Descriptor instead. +func (*InfoResponse) Descriptor() ([]byte, []int) { + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{1} +} + +func (x *InfoResponse) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + type CreatePoolRequest struct { state protoimpl.MessageState `protogen:"open.v1"` ConnectionString string `protobuf:"bytes,1,opt,name=connection_string,json=connectionString,proto3" json:"connection_string,omitempty"` @@ -34,7 +114,7 @@ type CreatePoolRequest struct { func (x *CreatePoolRequest) Reset() { *x = CreatePoolRequest{} - mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[0] + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -46,7 +126,7 @@ func (x *CreatePoolRequest) String() string { func (*CreatePoolRequest) ProtoMessage() {} func (x *CreatePoolRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[0] + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[2] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -59,7 +139,7 @@ func (x *CreatePoolRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreatePoolRequest.ProtoReflect.Descriptor instead. func (*CreatePoolRequest) Descriptor() ([]byte, []int) { - return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{0} + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{2} } func (x *CreatePoolRequest) GetConnectionString() string { @@ -78,7 +158,7 @@ type CreateConnectionRequest struct { func (x *CreateConnectionRequest) Reset() { *x = CreateConnectionRequest{} - mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[1] + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -90,7 +170,7 @@ func (x *CreateConnectionRequest) String() string { func (*CreateConnectionRequest) ProtoMessage() {} func (x *CreateConnectionRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[1] + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[3] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -103,7 +183,7 @@ func (x *CreateConnectionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateConnectionRequest.ProtoReflect.Descriptor instead. func (*CreateConnectionRequest) Descriptor() ([]byte, []int) { - return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{1} + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{3} } func (x *CreateConnectionRequest) GetPool() *Pool { @@ -123,7 +203,7 @@ type ExecuteRequest struct { func (x *ExecuteRequest) Reset() { *x = ExecuteRequest{} - mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[2] + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -135,7 +215,7 @@ func (x *ExecuteRequest) String() string { func (*ExecuteRequest) ProtoMessage() {} func (x *ExecuteRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[2] + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[4] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -148,7 +228,7 @@ func (x *ExecuteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ExecuteRequest.ProtoReflect.Descriptor instead. func (*ExecuteRequest) Descriptor() ([]byte, []int) { - return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{2} + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{4} } func (x *ExecuteRequest) GetConnection() *Connection { @@ -175,7 +255,7 @@ type ExecuteBatchRequest struct { func (x *ExecuteBatchRequest) Reset() { *x = ExecuteBatchRequest{} - mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[3] + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -187,7 +267,7 @@ func (x *ExecuteBatchRequest) String() string { func (*ExecuteBatchRequest) ProtoMessage() {} func (x *ExecuteBatchRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[3] + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[5] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -200,7 +280,7 @@ func (x *ExecuteBatchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ExecuteBatchRequest.ProtoReflect.Descriptor instead. func (*ExecuteBatchRequest) Descriptor() ([]byte, []int) { - return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{3} + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{5} } func (x *ExecuteBatchRequest) GetConnection() *Connection { @@ -227,7 +307,7 @@ type BeginTransactionRequest struct { func (x *BeginTransactionRequest) Reset() { *x = BeginTransactionRequest{} - mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[4] + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -239,7 +319,7 @@ func (x *BeginTransactionRequest) String() string { func (*BeginTransactionRequest) ProtoMessage() {} func (x *BeginTransactionRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[4] + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[6] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -252,7 +332,7 @@ func (x *BeginTransactionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use BeginTransactionRequest.ProtoReflect.Descriptor instead. func (*BeginTransactionRequest) Descriptor() ([]byte, []int) { - return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{4} + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{6} } func (x *BeginTransactionRequest) GetConnection() *Connection { @@ -279,7 +359,7 @@ type WriteMutationsRequest struct { func (x *WriteMutationsRequest) Reset() { *x = WriteMutationsRequest{} - mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[5] + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -291,7 +371,7 @@ func (x *WriteMutationsRequest) String() string { func (*WriteMutationsRequest) ProtoMessage() {} func (x *WriteMutationsRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[5] + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[7] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -304,7 +384,7 @@ func (x *WriteMutationsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use WriteMutationsRequest.ProtoReflect.Descriptor instead. func (*WriteMutationsRequest) Descriptor() ([]byte, []int) { - return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{5} + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{7} } func (x *WriteMutationsRequest) GetConnection() *Connection { @@ -330,7 +410,7 @@ type Pool struct { func (x *Pool) Reset() { *x = Pool{} - mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[6] + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -342,7 +422,7 @@ func (x *Pool) String() string { func (*Pool) ProtoMessage() {} func (x *Pool) ProtoReflect() protoreflect.Message { - mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[6] + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[8] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -355,7 +435,7 @@ func (x *Pool) ProtoReflect() protoreflect.Message { // Deprecated: Use Pool.ProtoReflect.Descriptor instead. func (*Pool) Descriptor() ([]byte, []int) { - return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{6} + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{8} } func (x *Pool) GetId() int64 { @@ -375,7 +455,7 @@ type Connection struct { func (x *Connection) Reset() { *x = Connection{} - mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[7] + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -387,7 +467,7 @@ func (x *Connection) String() string { func (*Connection) ProtoMessage() {} func (x *Connection) ProtoReflect() protoreflect.Message { - mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[7] + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[9] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -400,7 +480,7 @@ func (x *Connection) ProtoReflect() protoreflect.Message { // Deprecated: Use Connection.ProtoReflect.Descriptor instead. func (*Connection) Descriptor() ([]byte, []int) { - return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{7} + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{9} } func (x *Connection) GetPool() *Pool { @@ -427,7 +507,7 @@ type Rows struct { func (x *Rows) Reset() { *x = Rows{} - mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[8] + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -439,7 +519,7 @@ func (x *Rows) String() string { func (*Rows) ProtoMessage() {} func (x *Rows) ProtoReflect() protoreflect.Message { - mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[8] + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[10] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -452,7 +532,7 @@ func (x *Rows) ProtoReflect() protoreflect.Message { // Deprecated: Use Rows.ProtoReflect.Descriptor instead. func (*Rows) Descriptor() ([]byte, []int) { - return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{8} + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{10} } func (x *Rows) GetConnection() *Connection { @@ -480,7 +560,7 @@ type NextRequest struct { func (x *NextRequest) Reset() { *x = NextRequest{} - mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[9] + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -492,7 +572,7 @@ func (x *NextRequest) String() string { func (*NextRequest) ProtoMessage() {} func (x *NextRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[9] + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[11] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -505,7 +585,7 @@ func (x *NextRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use NextRequest.ProtoReflect.Descriptor instead. func (*NextRequest) Descriptor() ([]byte, []int) { - return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{9} + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{11} } func (x *NextRequest) GetRows() *Rows { @@ -541,7 +621,7 @@ type RowData struct { func (x *RowData) Reset() { *x = RowData{} - mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[10] + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -553,7 +633,7 @@ func (x *RowData) String() string { func (*RowData) ProtoMessage() {} func (x *RowData) ProtoReflect() protoreflect.Message { - mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[10] + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[12] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -566,7 +646,7 @@ func (x *RowData) ProtoReflect() protoreflect.Message { // Deprecated: Use RowData.ProtoReflect.Descriptor instead. func (*RowData) Descriptor() ([]byte, []int) { - return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{10} + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{12} } func (x *RowData) GetRows() *Rows { @@ -606,7 +686,7 @@ type MetadataRequest struct { func (x *MetadataRequest) Reset() { *x = MetadataRequest{} - mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[11] + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -618,7 +698,7 @@ func (x *MetadataRequest) String() string { func (*MetadataRequest) ProtoMessage() {} func (x *MetadataRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[11] + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -631,7 +711,7 @@ func (x *MetadataRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MetadataRequest.ProtoReflect.Descriptor instead. func (*MetadataRequest) Descriptor() ([]byte, []int) { - return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{11} + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{13} } func (x *MetadataRequest) GetRows() *Rows { @@ -650,7 +730,7 @@ type ResultSetStatsRequest struct { func (x *ResultSetStatsRequest) Reset() { *x = ResultSetStatsRequest{} - mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[12] + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -662,7 +742,7 @@ func (x *ResultSetStatsRequest) String() string { func (*ResultSetStatsRequest) ProtoMessage() {} func (x *ResultSetStatsRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[12] + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -675,7 +755,7 @@ func (x *ResultSetStatsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ResultSetStatsRequest.ProtoReflect.Descriptor instead. func (*ResultSetStatsRequest) Descriptor() ([]byte, []int) { - return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{12} + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{14} } func (x *ResultSetStatsRequest) GetRows() *Rows { @@ -697,7 +777,7 @@ type ConnectionStreamRequest struct { func (x *ConnectionStreamRequest) Reset() { *x = ConnectionStreamRequest{} - mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[13] + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -709,7 +789,7 @@ func (x *ConnectionStreamRequest) String() string { func (*ConnectionStreamRequest) ProtoMessage() {} func (x *ConnectionStreamRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[13] + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[15] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -722,7 +802,7 @@ func (x *ConnectionStreamRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ConnectionStreamRequest.ProtoReflect.Descriptor instead. func (*ConnectionStreamRequest) Descriptor() ([]byte, []int) { - return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{13} + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{15} } func (x *ConnectionStreamRequest) GetRequest() isConnectionStreamRequest_Request { @@ -763,7 +843,7 @@ type ConnectionStreamResponse struct { func (x *ConnectionStreamResponse) Reset() { *x = ConnectionStreamResponse{} - mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[14] + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -775,7 +855,7 @@ func (x *ConnectionStreamResponse) String() string { func (*ConnectionStreamResponse) ProtoMessage() {} func (x *ConnectionStreamResponse) ProtoReflect() protoreflect.Message { - mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[14] + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -788,7 +868,7 @@ func (x *ConnectionStreamResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ConnectionStreamResponse.ProtoReflect.Descriptor instead. func (*ConnectionStreamResponse) Descriptor() ([]byte, []int) { - return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{14} + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{16} } func (x *ConnectionStreamResponse) GetResponse() isConnectionStreamResponse_Response { @@ -821,7 +901,10 @@ var File_google_spannerlib_v1_spannerlib_proto protoreflect.FileDescriptor const file_google_spannerlib_v1_spannerlib_proto_rawDesc = "" + "\n" + - "%google/spannerlib/v1/spannerlib.proto\x12\x14google.spannerlib.v1\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\"google/spanner/v1/result_set.proto\x1a\x1fgoogle/spanner/v1/spanner.proto\x1a#google/spanner/v1/transaction.proto\"E\n" + + "%google/spannerlib/v1/spannerlib.proto\x12\x14google.spannerlib.v1\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\"google/spanner/v1/result_set.proto\x1a\x1fgoogle/spanner/v1/spanner.proto\x1a#google/spanner/v1/transaction.proto\"\r\n" + + "\vInfoRequest\"(\n" + + "\fInfoResponse\x12\x18\n" + + "\aversion\x18\x01 \x01(\tR\aversion\"E\n" + "\x11CreatePoolRequest\x120\n" + "\x11connection_string\x18\x01 \x01(\tB\x03\xe0A\x02R\x10connectionString\"N\n" + "\x17CreateConnectionRequest\x123\n" + @@ -876,10 +959,10 @@ const file_google_spannerlib_v1_spannerlib_proto_rawDesc = "" + "\x18ConnectionStreamResponse\x127\n" + "\x03row\x18\x01 \x01(\v2#.google.spanner.v1.PartialResultSetH\x00R\x03rowB\n" + "\n" + - "\bresponse2\xf1\n" + - "\n" + + "\bresponse2\xc2\v\n" + "\n" + - "SpannerLib\x12S\n" + + "SpannerLib\x12O\n" + + "\x04Info\x12!.google.spannerlib.v1.InfoRequest\x1a\".google.spannerlib.v1.InfoResponse\"\x00\x12S\n" + "\n" + "CreatePool\x12'.google.spannerlib.v1.CreatePoolRequest\x1a\x1a.google.spannerlib.v1.Pool\"\x00\x12A\n" + "\tClosePool\x12\x1a.google.spannerlib.v1.Pool\x1a\x16.google.protobuf.Empty\"\x00\x12e\n" + @@ -911,90 +994,94 @@ func file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP() []byte { return file_google_spannerlib_v1_spannerlib_proto_rawDescData } -var file_google_spannerlib_v1_spannerlib_proto_msgTypes = make([]protoimpl.MessageInfo, 15) +var file_google_spannerlib_v1_spannerlib_proto_msgTypes = make([]protoimpl.MessageInfo, 17) var file_google_spannerlib_v1_spannerlib_proto_goTypes = []any{ - (*CreatePoolRequest)(nil), // 0: google.spannerlib.v1.CreatePoolRequest - (*CreateConnectionRequest)(nil), // 1: google.spannerlib.v1.CreateConnectionRequest - (*ExecuteRequest)(nil), // 2: google.spannerlib.v1.ExecuteRequest - (*ExecuteBatchRequest)(nil), // 3: google.spannerlib.v1.ExecuteBatchRequest - (*BeginTransactionRequest)(nil), // 4: google.spannerlib.v1.BeginTransactionRequest - (*WriteMutationsRequest)(nil), // 5: google.spannerlib.v1.WriteMutationsRequest - (*Pool)(nil), // 6: google.spannerlib.v1.Pool - (*Connection)(nil), // 7: google.spannerlib.v1.Connection - (*Rows)(nil), // 8: google.spannerlib.v1.Rows - (*NextRequest)(nil), // 9: google.spannerlib.v1.NextRequest - (*RowData)(nil), // 10: google.spannerlib.v1.RowData - (*MetadataRequest)(nil), // 11: google.spannerlib.v1.MetadataRequest - (*ResultSetStatsRequest)(nil), // 12: google.spannerlib.v1.ResultSetStatsRequest - (*ConnectionStreamRequest)(nil), // 13: google.spannerlib.v1.ConnectionStreamRequest - (*ConnectionStreamResponse)(nil), // 14: google.spannerlib.v1.ConnectionStreamResponse - (*spannerpb.ExecuteSqlRequest)(nil), // 15: google.spanner.v1.ExecuteSqlRequest - (*spannerpb.ExecuteBatchDmlRequest)(nil), // 16: google.spanner.v1.ExecuteBatchDmlRequest - (*spannerpb.TransactionOptions)(nil), // 17: google.spanner.v1.TransactionOptions - (*spannerpb.BatchWriteRequest_MutationGroup)(nil), // 18: google.spanner.v1.BatchWriteRequest.MutationGroup - (*spannerpb.ResultSetMetadata)(nil), // 19: google.spanner.v1.ResultSetMetadata - (*structpb.ListValue)(nil), // 20: google.protobuf.ListValue - (*spannerpb.ResultSetStats)(nil), // 21: google.spanner.v1.ResultSetStats - (*spannerpb.PartialResultSet)(nil), // 22: google.spanner.v1.PartialResultSet - (*emptypb.Empty)(nil), // 23: google.protobuf.Empty - (*spannerpb.ExecuteBatchDmlResponse)(nil), // 24: google.spanner.v1.ExecuteBatchDmlResponse - (*spannerpb.CommitResponse)(nil), // 25: google.spanner.v1.CommitResponse + (*InfoRequest)(nil), // 0: google.spannerlib.v1.InfoRequest + (*InfoResponse)(nil), // 1: google.spannerlib.v1.InfoResponse + (*CreatePoolRequest)(nil), // 2: google.spannerlib.v1.CreatePoolRequest + (*CreateConnectionRequest)(nil), // 3: google.spannerlib.v1.CreateConnectionRequest + (*ExecuteRequest)(nil), // 4: google.spannerlib.v1.ExecuteRequest + (*ExecuteBatchRequest)(nil), // 5: google.spannerlib.v1.ExecuteBatchRequest + (*BeginTransactionRequest)(nil), // 6: google.spannerlib.v1.BeginTransactionRequest + (*WriteMutationsRequest)(nil), // 7: google.spannerlib.v1.WriteMutationsRequest + (*Pool)(nil), // 8: google.spannerlib.v1.Pool + (*Connection)(nil), // 9: google.spannerlib.v1.Connection + (*Rows)(nil), // 10: google.spannerlib.v1.Rows + (*NextRequest)(nil), // 11: google.spannerlib.v1.NextRequest + (*RowData)(nil), // 12: google.spannerlib.v1.RowData + (*MetadataRequest)(nil), // 13: google.spannerlib.v1.MetadataRequest + (*ResultSetStatsRequest)(nil), // 14: google.spannerlib.v1.ResultSetStatsRequest + (*ConnectionStreamRequest)(nil), // 15: google.spannerlib.v1.ConnectionStreamRequest + (*ConnectionStreamResponse)(nil), // 16: google.spannerlib.v1.ConnectionStreamResponse + (*spannerpb.ExecuteSqlRequest)(nil), // 17: google.spanner.v1.ExecuteSqlRequest + (*spannerpb.ExecuteBatchDmlRequest)(nil), // 18: google.spanner.v1.ExecuteBatchDmlRequest + (*spannerpb.TransactionOptions)(nil), // 19: google.spanner.v1.TransactionOptions + (*spannerpb.BatchWriteRequest_MutationGroup)(nil), // 20: google.spanner.v1.BatchWriteRequest.MutationGroup + (*spannerpb.ResultSetMetadata)(nil), // 21: google.spanner.v1.ResultSetMetadata + (*structpb.ListValue)(nil), // 22: google.protobuf.ListValue + (*spannerpb.ResultSetStats)(nil), // 23: google.spanner.v1.ResultSetStats + (*spannerpb.PartialResultSet)(nil), // 24: google.spanner.v1.PartialResultSet + (*emptypb.Empty)(nil), // 25: google.protobuf.Empty + (*spannerpb.ExecuteBatchDmlResponse)(nil), // 26: google.spanner.v1.ExecuteBatchDmlResponse + (*spannerpb.CommitResponse)(nil), // 27: google.spanner.v1.CommitResponse } var file_google_spannerlib_v1_spannerlib_proto_depIdxs = []int32{ - 6, // 0: google.spannerlib.v1.CreateConnectionRequest.pool:type_name -> google.spannerlib.v1.Pool - 7, // 1: google.spannerlib.v1.ExecuteRequest.connection:type_name -> google.spannerlib.v1.Connection - 15, // 2: google.spannerlib.v1.ExecuteRequest.execute_sql_request:type_name -> google.spanner.v1.ExecuteSqlRequest - 7, // 3: google.spannerlib.v1.ExecuteBatchRequest.connection:type_name -> google.spannerlib.v1.Connection - 16, // 4: google.spannerlib.v1.ExecuteBatchRequest.execute_batch_dml_request:type_name -> google.spanner.v1.ExecuteBatchDmlRequest - 7, // 5: google.spannerlib.v1.BeginTransactionRequest.connection:type_name -> google.spannerlib.v1.Connection - 17, // 6: google.spannerlib.v1.BeginTransactionRequest.transaction_options:type_name -> google.spanner.v1.TransactionOptions - 7, // 7: google.spannerlib.v1.WriteMutationsRequest.connection:type_name -> google.spannerlib.v1.Connection - 18, // 8: google.spannerlib.v1.WriteMutationsRequest.mutations:type_name -> google.spanner.v1.BatchWriteRequest.MutationGroup - 6, // 9: google.spannerlib.v1.Connection.pool:type_name -> google.spannerlib.v1.Pool - 7, // 10: google.spannerlib.v1.Rows.connection:type_name -> google.spannerlib.v1.Connection - 8, // 11: google.spannerlib.v1.NextRequest.rows:type_name -> google.spannerlib.v1.Rows - 8, // 12: google.spannerlib.v1.RowData.rows:type_name -> google.spannerlib.v1.Rows - 19, // 13: google.spannerlib.v1.RowData.metadata:type_name -> google.spanner.v1.ResultSetMetadata - 20, // 14: google.spannerlib.v1.RowData.data:type_name -> google.protobuf.ListValue - 21, // 15: google.spannerlib.v1.RowData.stats:type_name -> google.spanner.v1.ResultSetStats - 8, // 16: google.spannerlib.v1.MetadataRequest.rows:type_name -> google.spannerlib.v1.Rows - 8, // 17: google.spannerlib.v1.ResultSetStatsRequest.rows:type_name -> google.spannerlib.v1.Rows - 2, // 18: google.spannerlib.v1.ConnectionStreamRequest.execute_request:type_name -> google.spannerlib.v1.ExecuteRequest - 22, // 19: google.spannerlib.v1.ConnectionStreamResponse.row:type_name -> google.spanner.v1.PartialResultSet - 0, // 20: google.spannerlib.v1.SpannerLib.CreatePool:input_type -> google.spannerlib.v1.CreatePoolRequest - 6, // 21: google.spannerlib.v1.SpannerLib.ClosePool:input_type -> google.spannerlib.v1.Pool - 1, // 22: google.spannerlib.v1.SpannerLib.CreateConnection:input_type -> google.spannerlib.v1.CreateConnectionRequest - 7, // 23: google.spannerlib.v1.SpannerLib.CloseConnection:input_type -> google.spannerlib.v1.Connection - 2, // 24: google.spannerlib.v1.SpannerLib.Execute:input_type -> google.spannerlib.v1.ExecuteRequest - 2, // 25: google.spannerlib.v1.SpannerLib.ExecuteStreaming:input_type -> google.spannerlib.v1.ExecuteRequest - 3, // 26: google.spannerlib.v1.SpannerLib.ExecuteBatch:input_type -> google.spannerlib.v1.ExecuteBatchRequest - 8, // 27: google.spannerlib.v1.SpannerLib.Metadata:input_type -> google.spannerlib.v1.Rows - 9, // 28: google.spannerlib.v1.SpannerLib.Next:input_type -> google.spannerlib.v1.NextRequest - 8, // 29: google.spannerlib.v1.SpannerLib.ResultSetStats:input_type -> google.spannerlib.v1.Rows - 8, // 30: google.spannerlib.v1.SpannerLib.CloseRows:input_type -> google.spannerlib.v1.Rows - 4, // 31: google.spannerlib.v1.SpannerLib.BeginTransaction:input_type -> google.spannerlib.v1.BeginTransactionRequest - 7, // 32: google.spannerlib.v1.SpannerLib.Commit:input_type -> google.spannerlib.v1.Connection - 7, // 33: google.spannerlib.v1.SpannerLib.Rollback:input_type -> google.spannerlib.v1.Connection - 5, // 34: google.spannerlib.v1.SpannerLib.WriteMutations:input_type -> google.spannerlib.v1.WriteMutationsRequest - 13, // 35: google.spannerlib.v1.SpannerLib.ConnectionStream:input_type -> google.spannerlib.v1.ConnectionStreamRequest - 6, // 36: google.spannerlib.v1.SpannerLib.CreatePool:output_type -> google.spannerlib.v1.Pool - 23, // 37: google.spannerlib.v1.SpannerLib.ClosePool:output_type -> google.protobuf.Empty - 7, // 38: google.spannerlib.v1.SpannerLib.CreateConnection:output_type -> google.spannerlib.v1.Connection - 23, // 39: google.spannerlib.v1.SpannerLib.CloseConnection:output_type -> google.protobuf.Empty - 8, // 40: google.spannerlib.v1.SpannerLib.Execute:output_type -> google.spannerlib.v1.Rows - 10, // 41: google.spannerlib.v1.SpannerLib.ExecuteStreaming:output_type -> google.spannerlib.v1.RowData - 24, // 42: google.spannerlib.v1.SpannerLib.ExecuteBatch:output_type -> google.spanner.v1.ExecuteBatchDmlResponse - 19, // 43: google.spannerlib.v1.SpannerLib.Metadata:output_type -> google.spanner.v1.ResultSetMetadata - 20, // 44: google.spannerlib.v1.SpannerLib.Next:output_type -> google.protobuf.ListValue - 21, // 45: google.spannerlib.v1.SpannerLib.ResultSetStats:output_type -> google.spanner.v1.ResultSetStats - 23, // 46: google.spannerlib.v1.SpannerLib.CloseRows:output_type -> google.protobuf.Empty - 23, // 47: google.spannerlib.v1.SpannerLib.BeginTransaction:output_type -> google.protobuf.Empty - 25, // 48: google.spannerlib.v1.SpannerLib.Commit:output_type -> google.spanner.v1.CommitResponse - 23, // 49: google.spannerlib.v1.SpannerLib.Rollback:output_type -> google.protobuf.Empty - 25, // 50: google.spannerlib.v1.SpannerLib.WriteMutations:output_type -> google.spanner.v1.CommitResponse - 14, // 51: google.spannerlib.v1.SpannerLib.ConnectionStream:output_type -> google.spannerlib.v1.ConnectionStreamResponse - 36, // [36:52] is the sub-list for method output_type - 20, // [20:36] is the sub-list for method input_type + 8, // 0: google.spannerlib.v1.CreateConnectionRequest.pool:type_name -> google.spannerlib.v1.Pool + 9, // 1: google.spannerlib.v1.ExecuteRequest.connection:type_name -> google.spannerlib.v1.Connection + 17, // 2: google.spannerlib.v1.ExecuteRequest.execute_sql_request:type_name -> google.spanner.v1.ExecuteSqlRequest + 9, // 3: google.spannerlib.v1.ExecuteBatchRequest.connection:type_name -> google.spannerlib.v1.Connection + 18, // 4: google.spannerlib.v1.ExecuteBatchRequest.execute_batch_dml_request:type_name -> google.spanner.v1.ExecuteBatchDmlRequest + 9, // 5: google.spannerlib.v1.BeginTransactionRequest.connection:type_name -> google.spannerlib.v1.Connection + 19, // 6: google.spannerlib.v1.BeginTransactionRequest.transaction_options:type_name -> google.spanner.v1.TransactionOptions + 9, // 7: google.spannerlib.v1.WriteMutationsRequest.connection:type_name -> google.spannerlib.v1.Connection + 20, // 8: google.spannerlib.v1.WriteMutationsRequest.mutations:type_name -> google.spanner.v1.BatchWriteRequest.MutationGroup + 8, // 9: google.spannerlib.v1.Connection.pool:type_name -> google.spannerlib.v1.Pool + 9, // 10: google.spannerlib.v1.Rows.connection:type_name -> google.spannerlib.v1.Connection + 10, // 11: google.spannerlib.v1.NextRequest.rows:type_name -> google.spannerlib.v1.Rows + 10, // 12: google.spannerlib.v1.RowData.rows:type_name -> google.spannerlib.v1.Rows + 21, // 13: google.spannerlib.v1.RowData.metadata:type_name -> google.spanner.v1.ResultSetMetadata + 22, // 14: google.spannerlib.v1.RowData.data:type_name -> google.protobuf.ListValue + 23, // 15: google.spannerlib.v1.RowData.stats:type_name -> google.spanner.v1.ResultSetStats + 10, // 16: google.spannerlib.v1.MetadataRequest.rows:type_name -> google.spannerlib.v1.Rows + 10, // 17: google.spannerlib.v1.ResultSetStatsRequest.rows:type_name -> google.spannerlib.v1.Rows + 4, // 18: google.spannerlib.v1.ConnectionStreamRequest.execute_request:type_name -> google.spannerlib.v1.ExecuteRequest + 24, // 19: google.spannerlib.v1.ConnectionStreamResponse.row:type_name -> google.spanner.v1.PartialResultSet + 0, // 20: google.spannerlib.v1.SpannerLib.Info:input_type -> google.spannerlib.v1.InfoRequest + 2, // 21: google.spannerlib.v1.SpannerLib.CreatePool:input_type -> google.spannerlib.v1.CreatePoolRequest + 8, // 22: google.spannerlib.v1.SpannerLib.ClosePool:input_type -> google.spannerlib.v1.Pool + 3, // 23: google.spannerlib.v1.SpannerLib.CreateConnection:input_type -> google.spannerlib.v1.CreateConnectionRequest + 9, // 24: google.spannerlib.v1.SpannerLib.CloseConnection:input_type -> google.spannerlib.v1.Connection + 4, // 25: google.spannerlib.v1.SpannerLib.Execute:input_type -> google.spannerlib.v1.ExecuteRequest + 4, // 26: google.spannerlib.v1.SpannerLib.ExecuteStreaming:input_type -> google.spannerlib.v1.ExecuteRequest + 5, // 27: google.spannerlib.v1.SpannerLib.ExecuteBatch:input_type -> google.spannerlib.v1.ExecuteBatchRequest + 10, // 28: google.spannerlib.v1.SpannerLib.Metadata:input_type -> google.spannerlib.v1.Rows + 11, // 29: google.spannerlib.v1.SpannerLib.Next:input_type -> google.spannerlib.v1.NextRequest + 10, // 30: google.spannerlib.v1.SpannerLib.ResultSetStats:input_type -> google.spannerlib.v1.Rows + 10, // 31: google.spannerlib.v1.SpannerLib.CloseRows:input_type -> google.spannerlib.v1.Rows + 6, // 32: google.spannerlib.v1.SpannerLib.BeginTransaction:input_type -> google.spannerlib.v1.BeginTransactionRequest + 9, // 33: google.spannerlib.v1.SpannerLib.Commit:input_type -> google.spannerlib.v1.Connection + 9, // 34: google.spannerlib.v1.SpannerLib.Rollback:input_type -> google.spannerlib.v1.Connection + 7, // 35: google.spannerlib.v1.SpannerLib.WriteMutations:input_type -> google.spannerlib.v1.WriteMutationsRequest + 15, // 36: google.spannerlib.v1.SpannerLib.ConnectionStream:input_type -> google.spannerlib.v1.ConnectionStreamRequest + 1, // 37: google.spannerlib.v1.SpannerLib.Info:output_type -> google.spannerlib.v1.InfoResponse + 8, // 38: google.spannerlib.v1.SpannerLib.CreatePool:output_type -> google.spannerlib.v1.Pool + 25, // 39: google.spannerlib.v1.SpannerLib.ClosePool:output_type -> google.protobuf.Empty + 9, // 40: google.spannerlib.v1.SpannerLib.CreateConnection:output_type -> google.spannerlib.v1.Connection + 25, // 41: google.spannerlib.v1.SpannerLib.CloseConnection:output_type -> google.protobuf.Empty + 10, // 42: google.spannerlib.v1.SpannerLib.Execute:output_type -> google.spannerlib.v1.Rows + 12, // 43: google.spannerlib.v1.SpannerLib.ExecuteStreaming:output_type -> google.spannerlib.v1.RowData + 26, // 44: google.spannerlib.v1.SpannerLib.ExecuteBatch:output_type -> google.spanner.v1.ExecuteBatchDmlResponse + 21, // 45: google.spannerlib.v1.SpannerLib.Metadata:output_type -> google.spanner.v1.ResultSetMetadata + 22, // 46: google.spannerlib.v1.SpannerLib.Next:output_type -> google.protobuf.ListValue + 23, // 47: google.spannerlib.v1.SpannerLib.ResultSetStats:output_type -> google.spanner.v1.ResultSetStats + 25, // 48: google.spannerlib.v1.SpannerLib.CloseRows:output_type -> google.protobuf.Empty + 25, // 49: google.spannerlib.v1.SpannerLib.BeginTransaction:output_type -> google.protobuf.Empty + 27, // 50: google.spannerlib.v1.SpannerLib.Commit:output_type -> google.spanner.v1.CommitResponse + 25, // 51: google.spannerlib.v1.SpannerLib.Rollback:output_type -> google.protobuf.Empty + 27, // 52: google.spannerlib.v1.SpannerLib.WriteMutations:output_type -> google.spanner.v1.CommitResponse + 16, // 53: google.spannerlib.v1.SpannerLib.ConnectionStream:output_type -> google.spannerlib.v1.ConnectionStreamResponse + 37, // [37:54] is the sub-list for method output_type + 20, // [20:37] is the sub-list for method input_type 20, // [20:20] is the sub-list for extension type_name 20, // [20:20] is the sub-list for extension extendee 0, // [0:20] is the sub-list for field type_name @@ -1005,10 +1092,10 @@ func file_google_spannerlib_v1_spannerlib_proto_init() { if File_google_spannerlib_v1_spannerlib_proto != nil { return } - file_google_spannerlib_v1_spannerlib_proto_msgTypes[13].OneofWrappers = []any{ + file_google_spannerlib_v1_spannerlib_proto_msgTypes[15].OneofWrappers = []any{ (*ConnectionStreamRequest_ExecuteRequest)(nil), } - file_google_spannerlib_v1_spannerlib_proto_msgTypes[14].OneofWrappers = []any{ + file_google_spannerlib_v1_spannerlib_proto_msgTypes[16].OneofWrappers = []any{ (*ConnectionStreamResponse_Row)(nil), } type x struct{} @@ -1017,7 +1104,7 @@ func file_google_spannerlib_v1_spannerlib_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_google_spannerlib_v1_spannerlib_proto_rawDesc), len(file_google_spannerlib_v1_spannerlib_proto_rawDesc)), NumEnums: 0, - NumMessages: 15, + NumMessages: 17, NumExtensions: 0, NumServices: 1, }, diff --git a/spannerlib/grpc-server/google/spannerlib/v1/spannerlib.proto b/spannerlib/grpc-server/google/spannerlib/v1/spannerlib.proto index 22d6e680..57d58b41 100644 --- a/spannerlib/grpc-server/google/spannerlib/v1/spannerlib.proto +++ b/spannerlib/grpc-server/google/spannerlib/v1/spannerlib.proto @@ -18,6 +18,8 @@ option php_namespace = "Google\\Cloud\\SpannerLib\\V1"; option ruby_package = "Google::Cloud::SpannerLib::V1"; service SpannerLib { + rpc Info(InfoRequest) returns (InfoResponse) {} + rpc CreatePool(CreatePoolRequest) returns (Pool) {} rpc ClosePool(Pool) returns (google.protobuf.Empty) {} @@ -41,6 +43,13 @@ service SpannerLib { rpc ConnectionStream(stream ConnectionStreamRequest) returns (stream ConnectionStreamResponse) {} } +message InfoRequest { +} + +message InfoResponse { + string version = 1; +} + message CreatePoolRequest { string connection_string = 1 [ (google.api.field_behavior) = REQUIRED diff --git a/spannerlib/grpc-server/google/spannerlib/v1/spannerlib_grpc.pb.go b/spannerlib/grpc-server/google/spannerlib/v1/spannerlib_grpc.pb.go index a0f8c2bd..b52dd75c 100644 --- a/spannerlib/grpc-server/google/spannerlib/v1/spannerlib_grpc.pb.go +++ b/spannerlib/grpc-server/google/spannerlib/v1/spannerlib_grpc.pb.go @@ -22,6 +22,7 @@ import ( const _ = grpc.SupportPackageIsVersion9 const ( + SpannerLib_Info_FullMethodName = "/google.spannerlib.v1.SpannerLib/Info" SpannerLib_CreatePool_FullMethodName = "/google.spannerlib.v1.SpannerLib/CreatePool" SpannerLib_ClosePool_FullMethodName = "/google.spannerlib.v1.SpannerLib/ClosePool" SpannerLib_CreateConnection_FullMethodName = "/google.spannerlib.v1.SpannerLib/CreateConnection" @@ -44,6 +45,7 @@ const ( // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type SpannerLibClient interface { + Info(ctx context.Context, in *InfoRequest, opts ...grpc.CallOption) (*InfoResponse, error) CreatePool(ctx context.Context, in *CreatePoolRequest, opts ...grpc.CallOption) (*Pool, error) ClosePool(ctx context.Context, in *Pool, opts ...grpc.CallOption) (*emptypb.Empty, error) CreateConnection(ctx context.Context, in *CreateConnectionRequest, opts ...grpc.CallOption) (*Connection, error) @@ -70,6 +72,16 @@ func NewSpannerLibClient(cc grpc.ClientConnInterface) SpannerLibClient { return &spannerLibClient{cc} } +func (c *spannerLibClient) Info(ctx context.Context, in *InfoRequest, opts ...grpc.CallOption) (*InfoResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(InfoResponse) + err := c.cc.Invoke(ctx, SpannerLib_Info_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *spannerLibClient) CreatePool(ctx context.Context, in *CreatePoolRequest, opts ...grpc.CallOption) (*Pool, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(Pool) @@ -246,6 +258,7 @@ type SpannerLib_ConnectionStreamClient = grpc.BidiStreamingClient[ConnectionStre // All implementations must embed UnimplementedSpannerLibServer // for forward compatibility. type SpannerLibServer interface { + Info(context.Context, *InfoRequest) (*InfoResponse, error) CreatePool(context.Context, *CreatePoolRequest) (*Pool, error) ClosePool(context.Context, *Pool) (*emptypb.Empty, error) CreateConnection(context.Context, *CreateConnectionRequest) (*Connection, error) @@ -272,6 +285,9 @@ type SpannerLibServer interface { // pointer dereference when methods are called. type UnimplementedSpannerLibServer struct{} +func (UnimplementedSpannerLibServer) Info(context.Context, *InfoRequest) (*InfoResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Info not implemented") +} func (UnimplementedSpannerLibServer) CreatePool(context.Context, *CreatePoolRequest) (*Pool, error) { return nil, status.Errorf(codes.Unimplemented, "method CreatePool not implemented") } @@ -341,6 +357,24 @@ func RegisterSpannerLibServer(s grpc.ServiceRegistrar, srv SpannerLibServer) { s.RegisterService(&SpannerLib_ServiceDesc, srv) } +func _SpannerLib_Info_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(InfoRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SpannerLibServer).Info(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SpannerLib_Info_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SpannerLibServer).Info(ctx, req.(*InfoRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _SpannerLib_CreatePool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(CreatePoolRequest) if err := dec(in); err != nil { @@ -618,6 +652,10 @@ var SpannerLib_ServiceDesc = grpc.ServiceDesc{ ServiceName: "google.spannerlib.v1.SpannerLib", HandlerType: (*SpannerLibServer)(nil), Methods: []grpc.MethodDesc{ + { + MethodName: "Info", + Handler: _SpannerLib_Info_Handler, + }, { MethodName: "CreatePool", Handler: _SpannerLib_CreatePool_Handler, diff --git a/spannerlib/grpc-server/server.go b/spannerlib/grpc-server/server.go index d8883f00..8e80a68c 100644 --- a/spannerlib/grpc-server/server.go +++ b/spannerlib/grpc-server/server.go @@ -63,6 +63,10 @@ type spannerLibServer struct { pb.UnimplementedSpannerLibServer } +func (s *spannerLibServer) Info(_ context.Context, _ *pb.InfoRequest) (*pb.InfoResponse, error) { + return &pb.InfoResponse{}, nil +} + func (s *spannerLibServer) CreatePool(ctx context.Context, request *pb.CreatePoolRequest) (*pb.Pool, error) { id, err := api.CreatePool(ctx, request.ConnectionString) if err != nil { diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/GrpcLibSpanner.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/GrpcLibSpanner.cs new file mode 100644 index 00000000..3b65f917 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/GrpcLibSpanner.cs @@ -0,0 +1,403 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using System; +using System.Net.Http; +using System.Net.Sockets; +using System.Threading; +using System.Threading.Tasks; +using Google.Cloud.Spanner.V1; +using Google.Cloud.SpannerLib.V1; +using Google.Protobuf.WellKnownTypes; +using Grpc.Core; +using Grpc.Net.Client; +using BeginTransactionRequest = Google.Cloud.SpannerLib.V1.BeginTransactionRequest; +using Status = Google.Rpc.Status; + +namespace Google.Cloud.SpannerLib.Grpc; + +public class GrpcLibSpanner : ISpannerLib +{ + public static GrpcChannel ForUnixSocket(string fileName) + { + var endpoint = new UnixDomainSocketEndPoint(fileName); + return GrpcChannel.ForAddress("http://localhost", new GrpcChannelOptions { + HttpHandler = new SocketsHttpHandler { + EnableMultipleHttp2Connections = true, + ConnectCallback = async (_, cancellationToken) => { + var socket = new Socket(AddressFamily.Unix, SocketType.Stream, ProtocolType.Unspecified); + try { + await socket.ConnectAsync(endpoint, cancellationToken).ConfigureAwait(false); + return new NetworkStream(socket, true); + } catch { + socket.Dispose(); + throw; + } + } + } + }); + } + + public static GrpcChannel ForTcpSocket(string address) + { + return GrpcChannel.ForAddress($"http://{address}", new GrpcChannelOptions + { + HttpHandler = new SocketsHttpHandler + { + EnableMultipleHttp2Connections = true, + } + }); + } + + private readonly Server _server; + private readonly V1.SpannerLib.SpannerLibClient _client; + private readonly GrpcChannel _channel; + private readonly V1.SpannerLib.SpannerLibClient[] _clients; + private readonly GrpcChannel[] _channels; + private readonly bool _useStreamingRows; + private bool _disposed; + + public GrpcLibSpanner(bool useStreamingRows = true, Server.AddressType addressType = Server.AddressType.UnixDomainSocket) + { + _server = new Server(); + var file = _server.Start(addressType: addressType); + _channel = addressType == Server.AddressType.Tcp ? ForTcpSocket(file) : ForUnixSocket(file); + _client = new V1.SpannerLib.SpannerLibClient(_channel); + _useStreamingRows = useStreamingRows; + + var numChannels = 1; + _channels = new GrpcChannel[numChannels]; + _clients = new V1.SpannerLib.SpannerLibClient[numChannels]; + for (var i = 0; i < numChannels; i++) + { + _channels[i] = addressType == Server.AddressType.Tcp ? ForTcpSocket(file) : ForUnixSocket(file); + _clients[i] = new V1.SpannerLib.SpannerLibClient(_channels[i]); + } + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (_disposed) + { + return; + } + try + { + _channel.Dispose(); + foreach (var channel in _channels) + { + channel.Dispose(); + } + _server.Dispose(); + } + finally + { + _disposed = true; + } + } + + T TranslateException(Func f) + { + try + { + return f.Invoke(); + } + catch (RpcException exception) + { + throw SpannerException.ToSpannerException(exception); + } + } + + public Pool CreatePool(string connectionString) + { + return FromProto(TranslateException(() => _client.CreatePool(new CreatePoolRequest + { + ConnectionString = connectionString, + }))); + } + + public void ClosePool(Pool pool) + { + TranslateException(() => _client.ClosePool(ToProto(pool))); + } + + public Connection CreateConnection(Pool pool) + { + return FromProto(pool, TranslateException(() => _client.CreateConnection(new CreateConnectionRequest + { + Pool = ToProto(pool), + }))); + } + + public void CloseConnection(Connection connection) + { + TranslateException(() => _client.CloseConnection(ToProto(connection))); + } + + public async Task CloseConnectionAsync(Connection connection, CancellationToken cancellationToken = default) + { + try + { + await _client.CloseConnectionAsync(ToProto(connection), cancellationToken: cancellationToken); + } + catch (RpcException exception) + { + throw SpannerException.ToSpannerException(exception); + } + } + + public CommitResponse? WriteMutations(Connection connection, BatchWriteRequest.Types.MutationGroup mutations) + { + var response = TranslateException(() => _client.WriteMutations(new WriteMutationsRequest + { + Connection = ToProto(connection), + Mutations = mutations, + })); + return response.CommitTimestamp == null ? null : response; + } + + public Rows Execute(Connection connection, ExecuteSqlRequest statement) + { + if (_useStreamingRows) + { + return ExecuteStreaming(connection, statement); + } + return FromProto(connection, TranslateException(() => _client.Execute(new ExecuteRequest + { + Connection = ToProto(connection), + ExecuteSqlRequest = statement, + }))); + } + + private StreamingRows ExecuteStreaming(Connection connection, ExecuteSqlRequest statement) + { + var client = _clients[Random.Shared.Next(_clients.Length)]; + var stream = TranslateException(() => client.ExecuteStreaming(new ExecuteRequest + { + Connection = ToProto(connection), + ExecuteSqlRequest = statement, + })); + return StreamingRows.Create(connection, stream); + } + + public async Task ExecuteAsync(Connection connection, ExecuteSqlRequest statement, CancellationToken cancellationToken = default) + { + try + { + if (_useStreamingRows) + { + return await ExecuteStreamingAsync(connection, statement, cancellationToken); + } + var rows = await _client.ExecuteAsync(new ExecuteRequest + { + Connection = ToProto(connection), + ExecuteSqlRequest = statement, + }, cancellationToken: cancellationToken); + return FromProto(connection, rows); + } + catch (RpcException exception) + { + throw SpannerException.ToSpannerException(exception); + } + } + + private async Task ExecuteStreamingAsync(Connection connection, ExecuteSqlRequest statement, CancellationToken cancellationToken = default) + { + var client = _clients[Random.Shared.Next(_clients.Length)]; + var stream = TranslateException(() => client.ExecuteStreaming(new ExecuteRequest + { + Connection = ToProto(connection), + ExecuteSqlRequest = statement, + })); + return await StreamingRows.CreateAsync(connection, stream, cancellationToken); + } + + public long[] ExecuteBatch(Connection connection, ExecuteBatchDmlRequest statements) + { + var response = TranslateException(() => _client.ExecuteBatch(new ExecuteBatchRequest + { + Connection = ToProto(connection), + ExecuteBatchDmlRequest = statements, + })); + var result = new long[response.ResultSets.Count]; + for (var i = 0; i < result.Length; i++) + { + if (response.ResultSets[i].Stats.HasRowCountExact) + { + result[i] = response.ResultSets[i].Stats.RowCountExact; + } + else if (response.ResultSets[i].Stats.HasRowCountLowerBound) + { + result[i] = response.ResultSets[i].Stats.RowCountLowerBound; + } + else + { + result[i] = -1; + } + } + return result; + } + + public async Task ExecuteBatchAsync(Connection connection, ExecuteBatchDmlRequest statements, CancellationToken cancellationToken = default) + { + try + { + var stats = await _client.ExecuteBatchAsync(new ExecuteBatchRequest + { + Connection = ToProto(connection), + ExecuteBatchDmlRequest = statements, + }, cancellationToken: cancellationToken); + var result = new long[stats.ResultSets.Count]; + for (var i = 0; i < result.Length; i++) + { + result[i] = stats.ResultSets[i].Stats.RowCountExact; + } + return result; + } + catch (RpcException exception) + { + throw SpannerException.ToSpannerException(exception); + } + } + + public ResultSetMetadata? Metadata(Rows rows) + { + return TranslateException(() => _client.Metadata(ToProto(rows))); + } + + public async Task MetadataAsync(Rows rows, CancellationToken cancellationToken = default) + { + try + { + return await _client.MetadataAsync(ToProto(rows), cancellationToken: cancellationToken); + } + catch (RpcException exception) + { + throw SpannerException.ToSpannerException(exception); + } + } + + public ResultSetStats? Stats(Rows rows) + { + return TranslateException(() => _client.ResultSetStats(ToProto(rows))); + } + + public ListValue? Next(Rows rows, int numRows, ISpannerLib.RowEncoding encoding) + { + var row = TranslateException(() =>_client.Next(new NextRequest + { + Rows = ToProto(rows), + NumRows = numRows, + Encoding = (long) encoding, + })); + return row.Values.Count == 0 ? null : row; + } + + public async Task NextAsync(Rows rows, int numRows, ISpannerLib.RowEncoding encoding, CancellationToken cancellationToken = default) + { + try + { + return await _client.NextAsync(new NextRequest + { + Rows = ToProto(rows), + NumRows = numRows, + Encoding = (long)encoding, + }, cancellationToken: cancellationToken); + } + catch (RpcException exception) + { + throw SpannerException.ToSpannerException(exception); + } + } + + public void CloseRows(Rows rows) + { + TranslateException(() => _client.CloseRows(ToProto(rows))); + } + + public async Task CloseRowsAsync(Rows rows, CancellationToken cancellationToken = default) + { + try + { + await _client.CloseRowsAsync(ToProto(rows), cancellationToken: cancellationToken); + } + catch (RpcException exception) + { + throw SpannerException.ToSpannerException(exception); + } + } + + public void BeginTransaction(Connection connection, TransactionOptions transactionOptions) + { + TranslateException(() => _client.BeginTransaction(new BeginTransactionRequest + { + Connection = ToProto(connection), + TransactionOptions = transactionOptions, + })); + } + + public CommitResponse? Commit(Connection connection) + { + var response = TranslateException(() => _client.Commit(ToProto(connection))); + return response.CommitTimestamp == null ? null : response; + } + + public async Task CommitAsync(Connection connection, CancellationToken cancellationToken = default) + { + try + { + var response = await _client.CommitAsync(ToProto(connection), cancellationToken: cancellationToken); + return response.CommitTimestamp == null ? null : response; + } + catch (RpcException exception) + { + throw new SpannerException(new Status { Code = (int) exception.Status.StatusCode, Message = exception.Status.Detail }); + } + } + + public void Rollback(Connection connection) + { + TranslateException(() => _client.Rollback(ToProto(connection))); + } + + public async Task RollbackAsync(Connection connection, CancellationToken cancellationToken = default) + { + try + { + await _client.RollbackAsync(ToProto(connection), cancellationToken: cancellationToken); + } + catch (RpcException exception) + { + throw SpannerException.ToSpannerException(exception); + } + } + + Pool FromProto(V1.Pool pool) => new(this, pool.Id); + + V1.Pool ToProto(Pool pool) => new() { Id = pool.Id }; + + Connection FromProto(Pool pool, V1.Connection proto) => new(pool, proto.Id); + + V1.Connection ToProto(Connection connection) => new() { Id = connection.Id, Pool = ToProto(connection.Pool), }; + + Rows FromProto(Connection connection, V1.Rows proto) => new(connection, proto.Id); + + V1.Rows ToProto(Rows rows) => new() { Id = rows.Id, Connection = ToProto(rows.SpannerConnection), }; +} \ No newline at end of file diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/StreamingRows.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/StreamingRows.cs new file mode 100644 index 00000000..1d0c21bf --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/StreamingRows.cs @@ -0,0 +1,131 @@ +using System.Threading; +using System.Threading.Tasks; +using Google.Api.Gax; +using Google.Cloud.Spanner.V1; +using Google.Cloud.SpannerLib.V1; +using Google.Protobuf.WellKnownTypes; +using Grpc.Core; +using Status = Google.Rpc.Status; + +namespace Google.Cloud.SpannerLib.Grpc; + +public class StreamingRows : Rows +{ + private readonly AsyncServerStreamingCall _stream; + private ListValue? _pendingRow; + private ResultSetMetadata? _metadata; + private ResultSetStats? _stats; + private bool _done; + + protected override ResultSetStats? Stats => _stats; + + public override ResultSetMetadata? Metadata => _metadata; + + public static StreamingRows Create(Connection connection, AsyncServerStreamingCall stream) + { + var rows = new StreamingRows(connection, stream); + rows._pendingRow = rows.Next(); + return rows; + } + + public static async Task CreateAsync(Connection connection, AsyncServerStreamingCall stream, CancellationToken cancellationToken = default) + { + var rows = new StreamingRows(connection, stream); + rows._pendingRow = await rows.NextAsync(cancellationToken); + return rows; + } + + private StreamingRows(Connection connection, AsyncServerStreamingCall stream) : base(connection, 0, initMetadata: false) + { + _stream = stream; + } + + protected override void Dispose(bool disposing) + { + if (!_done) + { + MarkDone(); + } + _stream.Dispose(); + base.Dispose(disposing); + } + + private void MarkDone() + { + _done = true; + } + + public override ListValue? Next() + { + if (_pendingRow != null) { + var row = _pendingRow; + _pendingRow = null; + return row; + } + try + { + var hasNext = Task.Run(() => _stream.ResponseStream.MoveNext()).ResultWithUnwrappedExceptions(); + if (!hasNext) + { + MarkDone(); + return null; + } + var rowData = _stream.ResponseStream.Current; + if (rowData.Metadata != null) + { + _metadata = rowData.Metadata; + } + if (rowData.Stats != null) + { + _stats = rowData.Stats; + } + if (rowData.Data.Count == 0) + { + MarkDone(); + return null; + } + return rowData.Data[0]; + } + catch (RpcException exception) + { + throw new SpannerException(new Status { Code = (int) exception.Status.StatusCode, Message = exception.Status.Detail }); + } + } + + public override async Task NextAsync(CancellationToken cancellationToken = default) + { + if (_pendingRow != null) { + var row = _pendingRow; + _pendingRow = null; + return row; + } + try + { + var hasNext = await _stream.ResponseStream.MoveNext(cancellationToken); + if (!hasNext) + { + MarkDone(); + return null; + } + var rowData = _stream.ResponseStream.Current; + if (rowData.Metadata != null) + { + _metadata = rowData.Metadata; + } + if (rowData.Stats != null) + { + _stats = rowData.Stats; + } + if (rowData.Data.Count == 0) + { + MarkDone(); + return null; + } + return rowData.Data[0]; + } + catch (RpcException exception) + { + throw SpannerException.ToSpannerException(exception); + } + } +} \ No newline at end of file diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/spannerlib-dotnet-grpc-impl.csproj b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/spannerlib-dotnet-grpc-impl.csproj new file mode 100644 index 00000000..d892dd9b --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/spannerlib-dotnet-grpc-impl.csproj @@ -0,0 +1,19 @@ + + + + net8.0 + Google.Cloud.SpannerLib.Grpc + enable + default + + + + + + + + + + + + diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/Server.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/Server.cs new file mode 100644 index 00000000..1235d086 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/Server.cs @@ -0,0 +1,196 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using System; +using System.Diagnostics; +using System.IO; +using System.Runtime.InteropServices; +using System.Threading; + +namespace Google.Cloud.SpannerLib.Grpc; + +public class Server : IDisposable +{ + public enum AddressType + { + UnixDomainSocket, + Tcp, + } + + private Process? _process; + private string? _host; + private bool _disposed; + + public bool IsRunning => _process is { HasExited: false }; + + public Server() + { + } + + public string Start(AddressType addressType = AddressType.UnixDomainSocket) + { + if (_disposed) + { + throw new ObjectDisposedException(nameof(Server)); + } + if (IsRunning) + { + throw new InvalidOperationException("The server is already started."); + } + (_host, _process) = StartGrpcServer(addressType, TimeSpan.FromSeconds(5)); + return _host; + } + + private static Tuple StartGrpcServer(AddressType addressType, TimeSpan timeout) + { + string arguments; + if (addressType == AddressType.UnixDomainSocket) + { + // Generate a random temp file name that will be used for the Unix domain socket communication. + arguments = Path.GetTempPath() + Guid.NewGuid(); + } + else if (addressType == AddressType.Tcp) + { + arguments = "localhost:0 tcp"; + } + else + { + arguments = "localhost:0 tcp"; + } + + var binaryFileName = GetBinaryFileName().Replace('/', Path.DirectorySeparatorChar); + var info = new ProcessStartInfo + { + Arguments = arguments, + UseShellExecute = false, + FileName = binaryFileName, + RedirectStandardOutput = true, + RedirectStandardError = true, + }; + // Start the process as a child process. The process will automatically stop when the + // parent process stops. + var process = Process.Start(info); + if (process == null) + { + throw new InvalidOperationException("Failed to start spanner"); + } + if (addressType == AddressType.UnixDomainSocket) + { + var watch = new Stopwatch(); + while (!File.Exists(arguments)) + { + if (watch.Elapsed > timeout) + { + throw new TimeoutException($"Attempt to start gRPC server timed out after {timeout}"); + } + Thread.Sleep(1); + } + } + if (addressType == AddressType.UnixDomainSocket) + { + // Return the name of the Unix domain socket. + return Tuple.Create(arguments, process); + } + // Read the dynamically assigned port. + var address = process.StandardError.ReadLine(); + if (address?.Contains("Starting gRPC server on") ?? false) + { + var lastSpace = address.LastIndexOf(" ", StringComparison.Ordinal); + return Tuple.Create(address.Substring(lastSpace + 1), process); + } + throw new InvalidOperationException("Failed to read gRPC address"); + } + + private static string GetBinaryFileName() + { + string? fileName = null; + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + switch (RuntimeInformation.OSArchitecture) + { + case Architecture.X64: + fileName = "runtimes/win-x64/native/grpc_server.exe"; + break; + } + } + else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + { + switch (RuntimeInformation.OSArchitecture) + { + case Architecture.X64: + fileName = "runtimes/linux-x64/native/grpc_server"; + break; + } + } + else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + { + switch (RuntimeInformation.ProcessArchitecture) + { + case Architecture.Arm64: + fileName = "runtimes/osx-arm64/native/grpc_server"; + break; + } + } + if (fileName != null && File.Exists(fileName)) + { + return fileName; + } + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + if (File.Exists("runtimes/any/native/grpc_server.exe")) + { + return "runtimes/any/native/grpc_server.exe"; + } + } + if (File.Exists("runtimes/any/native/grpc_server")) + { + return "runtimes/any/native/grpc_server"; + } + + throw new PlatformNotSupportedException(); + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + public void Stop() + { + if (_process == null || _process.HasExited) + { + return; + } + _process.Kill(); + _process.WaitForExit(); + } + + protected virtual void Dispose(bool disposing) + { + if (_disposed) + { + return; + } + try + { + Stop(); + _process?.Dispose(); + } + finally + { + _disposed = true; + } + } +} \ No newline at end of file diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/build.sh b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/build.sh new file mode 100755 index 00000000..308e2328 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/build.sh @@ -0,0 +1,16 @@ +# Builds the gRPC server and the binary .NET wrapper and install the latter in a local nuget repository. + +# Determine OS + Arch +export DEST=binaries/any/grpc_server +mkdir -p binaries/any +mkdir -p binaries/osx-arm64 + +# Clear all local nuget cache +dotnet nuget locals --clear all +go build -o ../../../grpc-server/grpc_server ../../../grpc-server/server.go +cp ../../../grpc-server/grpc_server $DEST +cp ../../../grpc-server/grpc_server binaries/osx-arm64/grpc_server +dotnet pack +dotnet nuget remove source local_grpc_server 2>/dev/null +dotnet nuget add source "$PWD"/bin/Release --name local_grpc_server +dotnet restore ../spannerlib-dotnet-grpc-impl diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/spannerlib-dotnet-grpc-server.csproj b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/spannerlib-dotnet-grpc-server.csproj new file mode 100644 index 00000000..644c78f9 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/spannerlib-dotnet-grpc-server.csproj @@ -0,0 +1,19 @@ + + + + netstandard2.1 + Google.Cloud.SpannerLib.Grpc + enable + default + Google.Cloud.SpannerLib.GrpcServer + SpannerLib Grpc Server + Google + + + + + + + + + diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-tests/ServerTests.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-tests/ServerTests.cs new file mode 100644 index 00000000..ff243f47 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-tests/ServerTests.cs @@ -0,0 +1,50 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using Google.Cloud.SpannerLib.V1; + +namespace Google.Cloud.SpannerLib.Grpc; + +public class Tests +{ + private Server _server; + + [SetUp] + public void Setup() + { + _server = new Server(); + } + + [TearDown] + public void TearDown() + { + _server.Dispose(); + } + + [Test] + public void TestStartStop() + { + Assert.That(_server.IsRunning, Is.False); + var file = _server.Start(); + Assert.That(_server.IsRunning, Is.True); + + using var channel = GrpcLibSpanner.ForUnixSocket(file); + var client = new V1.SpannerLib.SpannerLibClient(channel); + var info = client.Info(new InfoRequest()); + Assert.That(info, Is.Not.Null); + + _server.Stop(); + Assert.That(_server.IsRunning, Is.False); + } +} \ No newline at end of file diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-tests/spannerlib-dotnet-grpc-tests.csproj b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-tests/spannerlib-dotnet-grpc-tests.csproj new file mode 100644 index 00000000..eaca43e4 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-tests/spannerlib-dotnet-grpc-tests.csproj @@ -0,0 +1,28 @@ + + + + net9.0 + Google.Cloud.SpannerLib.Grpc + latest + enable + enable + false + + + + + + + + + + + + + + + + + + + diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-v1/Spannerlib.g.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-v1/Spannerlib.g.cs new file mode 100644 index 00000000..14132a1d --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-v1/Spannerlib.g.cs @@ -0,0 +1,4102 @@ +// +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: google/spannerlib/v1/spannerlib.proto +// +#pragma warning disable 1591, 0612, 3021, 8981 +#region Designer generated code + +using pb = global::Google.Protobuf; +using pbc = global::Google.Protobuf.Collections; +using pbr = global::Google.Protobuf.Reflection; +using scg = global::System.Collections.Generic; +namespace Google.Cloud.SpannerLib.V1 { + + /// Holder for reflection information generated from google/spannerlib/v1/spannerlib.proto + public static partial class SpannerlibReflection { + + #region Descriptor + /// File descriptor for google/spannerlib/v1/spannerlib.proto + public static pbr::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbr::FileDescriptor descriptor; + + static SpannerlibReflection() { + byte[] descriptorData = global::System.Convert.FromBase64String( + string.Concat( + "CiVnb29nbGUvc3Bhbm5lcmxpYi92MS9zcGFubmVybGliLnByb3RvEhRnb29n", + "bGUuc3Bhbm5lcmxpYi52MRofZ29vZ2xlL2FwaS9maWVsZF9iZWhhdmlvci5w", + "cm90bxobZ29vZ2xlL3Byb3RvYnVmL2VtcHR5LnByb3RvGhxnb29nbGUvcHJv", + "dG9idWYvc3RydWN0LnByb3RvGiJnb29nbGUvc3Bhbm5lci92MS9yZXN1bHRf", + "c2V0LnByb3RvGh9nb29nbGUvc3Bhbm5lci92MS9zcGFubmVyLnByb3RvGiNn", + "b29nbGUvc3Bhbm5lci92MS90cmFuc2FjdGlvbi5wcm90byINCgtJbmZvUmVx", + "dWVzdCIfCgxJbmZvUmVzcG9uc2USDwoHdmVyc2lvbhgBIAEoCSIzChFDcmVh", + "dGVQb29sUmVxdWVzdBIeChFjb25uZWN0aW9uX3N0cmluZxgBIAEoCUID4EEC", + "IkgKF0NyZWF0ZUNvbm5lY3Rpb25SZXF1ZXN0Ei0KBHBvb2wYASABKAsyGi5n", + "b29nbGUuc3Bhbm5lcmxpYi52MS5Qb29sQgPgQQIikwEKDkV4ZWN1dGVSZXF1", + "ZXN0EjkKCmNvbm5lY3Rpb24YASABKAsyIC5nb29nbGUuc3Bhbm5lcmxpYi52", + "MS5Db25uZWN0aW9uQgPgQQISRgoTZXhlY3V0ZV9zcWxfcmVxdWVzdBgCIAEo", + "CzIkLmdvb2dsZS5zcGFubmVyLnYxLkV4ZWN1dGVTcWxSZXF1ZXN0QgPgQQIi", + "owEKE0V4ZWN1dGVCYXRjaFJlcXVlc3QSOQoKY29ubmVjdGlvbhgBIAEoCzIg", + "Lmdvb2dsZS5zcGFubmVybGliLnYxLkNvbm5lY3Rpb25CA+BBAhJRChlleGVj", + "dXRlX2JhdGNoX2RtbF9yZXF1ZXN0GAIgASgLMikuZ29vZ2xlLnNwYW5uZXIu", + "djEuRXhlY3V0ZUJhdGNoRG1sUmVxdWVzdEID4EECIp0BChdCZWdpblRyYW5z", + "YWN0aW9uUmVxdWVzdBI5Cgpjb25uZWN0aW9uGAEgASgLMiAuZ29vZ2xlLnNw", + "YW5uZXJsaWIudjEuQ29ubmVjdGlvbkID4EECEkcKE3RyYW5zYWN0aW9uX29w", + "dGlvbnMYAiABKAsyJS5nb29nbGUuc3Bhbm5lci52MS5UcmFuc2FjdGlvbk9w", + "dGlvbnNCA+BBAiKeAQoVV3JpdGVNdXRhdGlvbnNSZXF1ZXN0EjkKCmNvbm5l", + "Y3Rpb24YASABKAsyIC5nb29nbGUuc3Bhbm5lcmxpYi52MS5Db25uZWN0aW9u", + "QgPgQQISSgoJbXV0YXRpb25zGAIgASgLMjIuZ29vZ2xlLnNwYW5uZXIudjEu", + "QmF0Y2hXcml0ZVJlcXVlc3QuTXV0YXRpb25Hcm91cEID4EECIhcKBFBvb2wS", + "DwoCaWQYASABKANCA+BBAiJMCgpDb25uZWN0aW9uEi0KBHBvb2wYASABKAsy", + "Gi5nb29nbGUuc3Bhbm5lcmxpYi52MS5Qb29sQgPgQQISDwoCaWQYAiABKANC", + "A+BBAiJSCgRSb3dzEjkKCmNvbm5lY3Rpb24YASABKAsyIC5nb29nbGUuc3Bh", + "bm5lcmxpYi52MS5Db25uZWN0aW9uQgPgQQISDwoCaWQYAiABKANCA+BBAiJq", + "CgtOZXh0UmVxdWVzdBItCgRyb3dzGAEgASgLMhouZ29vZ2xlLnNwYW5uZXJs", + "aWIudjEuUm93c0ID4EECEhUKCG51bV9yb3dzGAIgASgDQgPgQQISFQoIZW5j", + "b2RpbmcYAyABKANCA+BBAiLRAQoHUm93RGF0YRItCgRyb3dzGAEgASgLMhou", + "Z29vZ2xlLnNwYW5uZXJsaWIudjEuUm93c0ID4EECEjYKCG1ldGFkYXRhGAIg", + "ASgLMiQuZ29vZ2xlLnNwYW5uZXIudjEuUmVzdWx0U2V0TWV0YWRhdGESLQoE", + "ZGF0YRgDIAMoCzIaLmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWVCA+BBAhIw", + "CgVzdGF0cxgEIAEoCzIhLmdvb2dsZS5zcGFubmVyLnYxLlJlc3VsdFNldFN0", + "YXRzIkAKD01ldGFkYXRhUmVxdWVzdBItCgRyb3dzGAEgASgLMhouZ29vZ2xl", + "LnNwYW5uZXJsaWIudjEuUm93c0ID4EECIkYKFVJlc3VsdFNldFN0YXRzUmVx", + "dWVzdBItCgRyb3dzGAEgASgLMhouZ29vZ2xlLnNwYW5uZXJsaWIudjEuUm93", + "c0ID4EECImUKF0Nvbm5lY3Rpb25TdHJlYW1SZXF1ZXN0Ej8KD2V4ZWN1dGVf", + "cmVxdWVzdBgBIAEoCzIkLmdvb2dsZS5zcGFubmVybGliLnYxLkV4ZWN1dGVS", + "ZXF1ZXN0SABCCQoHcmVxdWVzdCJaChhDb25uZWN0aW9uU3RyZWFtUmVzcG9u", + "c2USMgoDcm93GAEgASgLMiMuZ29vZ2xlLnNwYW5uZXIudjEuUGFydGlhbFJl", + "c3VsdFNldEgAQgoKCHJlc3BvbnNlMsILCgpTcGFubmVyTGliEk8KBEluZm8S", + "IS5nb29nbGUuc3Bhbm5lcmxpYi52MS5JbmZvUmVxdWVzdBoiLmdvb2dsZS5z", + "cGFubmVybGliLnYxLkluZm9SZXNwb25zZSIAElMKCkNyZWF0ZVBvb2wSJy5n", + "b29nbGUuc3Bhbm5lcmxpYi52MS5DcmVhdGVQb29sUmVxdWVzdBoaLmdvb2ds", + "ZS5zcGFubmVybGliLnYxLlBvb2wiABJBCglDbG9zZVBvb2wSGi5nb29nbGUu", + "c3Bhbm5lcmxpYi52MS5Qb29sGhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IgAS", + "ZQoQQ3JlYXRlQ29ubmVjdGlvbhItLmdvb2dsZS5zcGFubmVybGliLnYxLkNy", + "ZWF0ZUNvbm5lY3Rpb25SZXF1ZXN0GiAuZ29vZ2xlLnNwYW5uZXJsaWIudjEu", + "Q29ubmVjdGlvbiIAEk0KD0Nsb3NlQ29ubmVjdGlvbhIgLmdvb2dsZS5zcGFu", + "bmVybGliLnYxLkNvbm5lY3Rpb24aFi5nb29nbGUucHJvdG9idWYuRW1wdHki", + "ABJNCgdFeGVjdXRlEiQuZ29vZ2xlLnNwYW5uZXJsaWIudjEuRXhlY3V0ZVJl", + "cXVlc3QaGi5nb29nbGUuc3Bhbm5lcmxpYi52MS5Sb3dzIgASWwoQRXhlY3V0", + "ZVN0cmVhbWluZxIkLmdvb2dsZS5zcGFubmVybGliLnYxLkV4ZWN1dGVSZXF1", + "ZXN0Gh0uZ29vZ2xlLnNwYW5uZXJsaWIudjEuUm93RGF0YSIAMAESZwoMRXhl", + "Y3V0ZUJhdGNoEikuZ29vZ2xlLnNwYW5uZXJsaWIudjEuRXhlY3V0ZUJhdGNo", + "UmVxdWVzdBoqLmdvb2dsZS5zcGFubmVyLnYxLkV4ZWN1dGVCYXRjaERtbFJl", + "c3BvbnNlIgASTgoITWV0YWRhdGESGi5nb29nbGUuc3Bhbm5lcmxpYi52MS5S", + "b3dzGiQuZ29vZ2xlLnNwYW5uZXIudjEuUmVzdWx0U2V0TWV0YWRhdGEiABJH", + "CgROZXh0EiEuZ29vZ2xlLnNwYW5uZXJsaWIudjEuTmV4dFJlcXVlc3QaGi5n", + "b29nbGUucHJvdG9idWYuTGlzdFZhbHVlIgASUQoOUmVzdWx0U2V0U3RhdHMS", + "Gi5nb29nbGUuc3Bhbm5lcmxpYi52MS5Sb3dzGiEuZ29vZ2xlLnNwYW5uZXIu", + "djEuUmVzdWx0U2V0U3RhdHMiABJBCglDbG9zZVJvd3MSGi5nb29nbGUuc3Bh", + "bm5lcmxpYi52MS5Sb3dzGhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IgASWwoQ", + "QmVnaW5UcmFuc2FjdGlvbhItLmdvb2dsZS5zcGFubmVybGliLnYxLkJlZ2lu", + "VHJhbnNhY3Rpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IgAS", + "TwoGQ29tbWl0EiAuZ29vZ2xlLnNwYW5uZXJsaWIudjEuQ29ubmVjdGlvbhoh", + "Lmdvb2dsZS5zcGFubmVyLnYxLkNvbW1pdFJlc3BvbnNlIgASRgoIUm9sbGJh", + "Y2sSIC5nb29nbGUuc3Bhbm5lcmxpYi52MS5Db25uZWN0aW9uGhYuZ29vZ2xl", + "LnByb3RvYnVmLkVtcHR5IgASYgoOV3JpdGVNdXRhdGlvbnMSKy5nb29nbGUu", + "c3Bhbm5lcmxpYi52MS5Xcml0ZU11dGF0aW9uc1JlcXVlc3QaIS5nb29nbGUu", + "c3Bhbm5lci52MS5Db21taXRSZXNwb25zZSIAEncKEENvbm5lY3Rpb25TdHJl", + "YW0SLS5nb29nbGUuc3Bhbm5lcmxpYi52MS5Db25uZWN0aW9uU3RyZWFtUmVx", + "dWVzdBouLmdvb2dsZS5zcGFubmVybGliLnYxLkNvbm5lY3Rpb25TdHJlYW1S", + "ZXNwb25zZSIAKAEwAULNAQoeY29tLmdvb2dsZS5jbG91ZC5zcGFubmVybGli", + "LnYxQg9TcGFubmVyTGliUHJvdG9QAVo+Y2xvdWQuZ29vZ2xlLmNvbS9nby9z", + "cGFubmVybGliL2FwaXYxL3NwYW5uZXJsaWJwYjtzcGFubmVybGlicGKqAhpH", + "b29nbGUuQ2xvdWQuU3Bhbm5lckxpYi5WMcoCGkdvb2dsZVxDbG91ZFxTcGFu", + "bmVyTGliXFYx6gIdR29vZ2xlOjpDbG91ZDo6U3Bhbm5lckxpYjo6VjFiBnBy", + "b3RvMw==")); + descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, + new pbr::FileDescriptor[] { global::Google.Api.FieldBehaviorReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.EmptyReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.StructReflection.Descriptor, global::Google.Cloud.Spanner.V1.ResultSetReflection.Descriptor, global::Google.Cloud.Spanner.V1.SpannerReflection.Descriptor, global::Google.Cloud.Spanner.V1.TransactionReflection.Descriptor, }, + new pbr::GeneratedClrTypeInfo(null, null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.InfoRequest), global::Google.Cloud.SpannerLib.V1.InfoRequest.Parser, null, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.InfoResponse), global::Google.Cloud.SpannerLib.V1.InfoResponse.Parser, new[]{ "Version" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.CreatePoolRequest), global::Google.Cloud.SpannerLib.V1.CreatePoolRequest.Parser, new[]{ "ConnectionString" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.CreateConnectionRequest), global::Google.Cloud.SpannerLib.V1.CreateConnectionRequest.Parser, new[]{ "Pool" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.ExecuteRequest), global::Google.Cloud.SpannerLib.V1.ExecuteRequest.Parser, new[]{ "Connection", "ExecuteSqlRequest" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.ExecuteBatchRequest), global::Google.Cloud.SpannerLib.V1.ExecuteBatchRequest.Parser, new[]{ "Connection", "ExecuteBatchDmlRequest" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.BeginTransactionRequest), global::Google.Cloud.SpannerLib.V1.BeginTransactionRequest.Parser, new[]{ "Connection", "TransactionOptions" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.WriteMutationsRequest), global::Google.Cloud.SpannerLib.V1.WriteMutationsRequest.Parser, new[]{ "Connection", "Mutations" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.Pool), global::Google.Cloud.SpannerLib.V1.Pool.Parser, new[]{ "Id" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.Connection), global::Google.Cloud.SpannerLib.V1.Connection.Parser, new[]{ "Pool", "Id" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.Rows), global::Google.Cloud.SpannerLib.V1.Rows.Parser, new[]{ "Connection", "Id" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.NextRequest), global::Google.Cloud.SpannerLib.V1.NextRequest.Parser, new[]{ "Rows", "NumRows", "Encoding" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.RowData), global::Google.Cloud.SpannerLib.V1.RowData.Parser, new[]{ "Rows", "Metadata", "Data", "Stats" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.MetadataRequest), global::Google.Cloud.SpannerLib.V1.MetadataRequest.Parser, new[]{ "Rows" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.ResultSetStatsRequest), global::Google.Cloud.SpannerLib.V1.ResultSetStatsRequest.Parser, new[]{ "Rows" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.ConnectionStreamRequest), global::Google.Cloud.SpannerLib.V1.ConnectionStreamRequest.Parser, new[]{ "ExecuteRequest" }, new[]{ "Request" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.ConnectionStreamResponse), global::Google.Cloud.SpannerLib.V1.ConnectionStreamResponse.Parser, new[]{ "Row" }, new[]{ "Response" }, null, null, null) + })); + } + #endregion + + } + #region Messages + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class InfoRequest : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new InfoRequest()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[0]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public InfoRequest() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public InfoRequest(InfoRequest other) : this() { + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public InfoRequest Clone() { + return new InfoRequest(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as InfoRequest); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(InfoRequest other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(InfoRequest other) { + if (other == null) { + return; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + } + } + } + #endif + + } + + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class InfoResponse : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new InfoResponse()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[1]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public InfoResponse() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public InfoResponse(InfoResponse other) : this() { + version_ = other.version_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public InfoResponse Clone() { + return new InfoResponse(this); + } + + /// Field number for the "version" field. + public const int VersionFieldNumber = 1; + private string version_ = ""; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public string Version { + get { return version_; } + set { + version_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as InfoResponse); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(InfoResponse other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (Version != other.Version) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (Version.Length != 0) hash ^= Version.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (Version.Length != 0) { + output.WriteRawTag(10); + output.WriteString(Version); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (Version.Length != 0) { + output.WriteRawTag(10); + output.WriteString(Version); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (Version.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(Version); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(InfoResponse other) { + if (other == null) { + return; + } + if (other.Version.Length != 0) { + Version = other.Version; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + Version = input.ReadString(); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + Version = input.ReadString(); + break; + } + } + } + } + #endif + + } + + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class CreatePoolRequest : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new CreatePoolRequest()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[2]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public CreatePoolRequest() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public CreatePoolRequest(CreatePoolRequest other) : this() { + connectionString_ = other.connectionString_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public CreatePoolRequest Clone() { + return new CreatePoolRequest(this); + } + + /// Field number for the "connection_string" field. + public const int ConnectionStringFieldNumber = 1; + private string connectionString_ = ""; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public string ConnectionString { + get { return connectionString_; } + set { + connectionString_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as CreatePoolRequest); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(CreatePoolRequest other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (ConnectionString != other.ConnectionString) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (ConnectionString.Length != 0) hash ^= ConnectionString.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (ConnectionString.Length != 0) { + output.WriteRawTag(10); + output.WriteString(ConnectionString); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (ConnectionString.Length != 0) { + output.WriteRawTag(10); + output.WriteString(ConnectionString); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (ConnectionString.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(ConnectionString); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(CreatePoolRequest other) { + if (other == null) { + return; + } + if (other.ConnectionString.Length != 0) { + ConnectionString = other.ConnectionString; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + ConnectionString = input.ReadString(); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + ConnectionString = input.ReadString(); + break; + } + } + } + } + #endif + + } + + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class CreateConnectionRequest : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new CreateConnectionRequest()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[3]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public CreateConnectionRequest() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public CreateConnectionRequest(CreateConnectionRequest other) : this() { + pool_ = other.pool_ != null ? other.pool_.Clone() : null; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public CreateConnectionRequest Clone() { + return new CreateConnectionRequest(this); + } + + /// Field number for the "pool" field. + public const int PoolFieldNumber = 1; + private global::Google.Cloud.SpannerLib.V1.Pool pool_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.SpannerLib.V1.Pool Pool { + get { return pool_; } + set { + pool_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as CreateConnectionRequest); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(CreateConnectionRequest other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!object.Equals(Pool, other.Pool)) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (pool_ != null) hash ^= Pool.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (pool_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Pool); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (pool_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Pool); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (pool_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Pool); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(CreateConnectionRequest other) { + if (other == null) { + return; + } + if (other.pool_ != null) { + if (pool_ == null) { + Pool = new global::Google.Cloud.SpannerLib.V1.Pool(); + } + Pool.MergeFrom(other.Pool); + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + if (pool_ == null) { + Pool = new global::Google.Cloud.SpannerLib.V1.Pool(); + } + input.ReadMessage(Pool); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + if (pool_ == null) { + Pool = new global::Google.Cloud.SpannerLib.V1.Pool(); + } + input.ReadMessage(Pool); + break; + } + } + } + } + #endif + + } + + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class ExecuteRequest : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new ExecuteRequest()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[4]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ExecuteRequest() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ExecuteRequest(ExecuteRequest other) : this() { + connection_ = other.connection_ != null ? other.connection_.Clone() : null; + executeSqlRequest_ = other.executeSqlRequest_ != null ? other.executeSqlRequest_.Clone() : null; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ExecuteRequest Clone() { + return new ExecuteRequest(this); + } + + /// Field number for the "connection" field. + public const int ConnectionFieldNumber = 1; + private global::Google.Cloud.SpannerLib.V1.Connection connection_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.SpannerLib.V1.Connection Connection { + get { return connection_; } + set { + connection_ = value; + } + } + + /// Field number for the "execute_sql_request" field. + public const int ExecuteSqlRequestFieldNumber = 2; + private global::Google.Cloud.Spanner.V1.ExecuteSqlRequest executeSqlRequest_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.Spanner.V1.ExecuteSqlRequest ExecuteSqlRequest { + get { return executeSqlRequest_; } + set { + executeSqlRequest_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as ExecuteRequest); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(ExecuteRequest other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!object.Equals(Connection, other.Connection)) return false; + if (!object.Equals(ExecuteSqlRequest, other.ExecuteSqlRequest)) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (connection_ != null) hash ^= Connection.GetHashCode(); + if (executeSqlRequest_ != null) hash ^= ExecuteSqlRequest.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (connection_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Connection); + } + if (executeSqlRequest_ != null) { + output.WriteRawTag(18); + output.WriteMessage(ExecuteSqlRequest); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (connection_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Connection); + } + if (executeSqlRequest_ != null) { + output.WriteRawTag(18); + output.WriteMessage(ExecuteSqlRequest); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (connection_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Connection); + } + if (executeSqlRequest_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(ExecuteSqlRequest); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(ExecuteRequest other) { + if (other == null) { + return; + } + if (other.connection_ != null) { + if (connection_ == null) { + Connection = new global::Google.Cloud.SpannerLib.V1.Connection(); + } + Connection.MergeFrom(other.Connection); + } + if (other.executeSqlRequest_ != null) { + if (executeSqlRequest_ == null) { + ExecuteSqlRequest = new global::Google.Cloud.Spanner.V1.ExecuteSqlRequest(); + } + ExecuteSqlRequest.MergeFrom(other.ExecuteSqlRequest); + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + if (connection_ == null) { + Connection = new global::Google.Cloud.SpannerLib.V1.Connection(); + } + input.ReadMessage(Connection); + break; + } + case 18: { + if (executeSqlRequest_ == null) { + ExecuteSqlRequest = new global::Google.Cloud.Spanner.V1.ExecuteSqlRequest(); + } + input.ReadMessage(ExecuteSqlRequest); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + if (connection_ == null) { + Connection = new global::Google.Cloud.SpannerLib.V1.Connection(); + } + input.ReadMessage(Connection); + break; + } + case 18: { + if (executeSqlRequest_ == null) { + ExecuteSqlRequest = new global::Google.Cloud.Spanner.V1.ExecuteSqlRequest(); + } + input.ReadMessage(ExecuteSqlRequest); + break; + } + } + } + } + #endif + + } + + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class ExecuteBatchRequest : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new ExecuteBatchRequest()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[5]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ExecuteBatchRequest() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ExecuteBatchRequest(ExecuteBatchRequest other) : this() { + connection_ = other.connection_ != null ? other.connection_.Clone() : null; + executeBatchDmlRequest_ = other.executeBatchDmlRequest_ != null ? other.executeBatchDmlRequest_.Clone() : null; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ExecuteBatchRequest Clone() { + return new ExecuteBatchRequest(this); + } + + /// Field number for the "connection" field. + public const int ConnectionFieldNumber = 1; + private global::Google.Cloud.SpannerLib.V1.Connection connection_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.SpannerLib.V1.Connection Connection { + get { return connection_; } + set { + connection_ = value; + } + } + + /// Field number for the "execute_batch_dml_request" field. + public const int ExecuteBatchDmlRequestFieldNumber = 2; + private global::Google.Cloud.Spanner.V1.ExecuteBatchDmlRequest executeBatchDmlRequest_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.Spanner.V1.ExecuteBatchDmlRequest ExecuteBatchDmlRequest { + get { return executeBatchDmlRequest_; } + set { + executeBatchDmlRequest_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as ExecuteBatchRequest); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(ExecuteBatchRequest other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!object.Equals(Connection, other.Connection)) return false; + if (!object.Equals(ExecuteBatchDmlRequest, other.ExecuteBatchDmlRequest)) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (connection_ != null) hash ^= Connection.GetHashCode(); + if (executeBatchDmlRequest_ != null) hash ^= ExecuteBatchDmlRequest.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (connection_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Connection); + } + if (executeBatchDmlRequest_ != null) { + output.WriteRawTag(18); + output.WriteMessage(ExecuteBatchDmlRequest); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (connection_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Connection); + } + if (executeBatchDmlRequest_ != null) { + output.WriteRawTag(18); + output.WriteMessage(ExecuteBatchDmlRequest); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (connection_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Connection); + } + if (executeBatchDmlRequest_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(ExecuteBatchDmlRequest); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(ExecuteBatchRequest other) { + if (other == null) { + return; + } + if (other.connection_ != null) { + if (connection_ == null) { + Connection = new global::Google.Cloud.SpannerLib.V1.Connection(); + } + Connection.MergeFrom(other.Connection); + } + if (other.executeBatchDmlRequest_ != null) { + if (executeBatchDmlRequest_ == null) { + ExecuteBatchDmlRequest = new global::Google.Cloud.Spanner.V1.ExecuteBatchDmlRequest(); + } + ExecuteBatchDmlRequest.MergeFrom(other.ExecuteBatchDmlRequest); + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + if (connection_ == null) { + Connection = new global::Google.Cloud.SpannerLib.V1.Connection(); + } + input.ReadMessage(Connection); + break; + } + case 18: { + if (executeBatchDmlRequest_ == null) { + ExecuteBatchDmlRequest = new global::Google.Cloud.Spanner.V1.ExecuteBatchDmlRequest(); + } + input.ReadMessage(ExecuteBatchDmlRequest); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + if (connection_ == null) { + Connection = new global::Google.Cloud.SpannerLib.V1.Connection(); + } + input.ReadMessage(Connection); + break; + } + case 18: { + if (executeBatchDmlRequest_ == null) { + ExecuteBatchDmlRequest = new global::Google.Cloud.Spanner.V1.ExecuteBatchDmlRequest(); + } + input.ReadMessage(ExecuteBatchDmlRequest); + break; + } + } + } + } + #endif + + } + + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class BeginTransactionRequest : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new BeginTransactionRequest()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[6]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public BeginTransactionRequest() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public BeginTransactionRequest(BeginTransactionRequest other) : this() { + connection_ = other.connection_ != null ? other.connection_.Clone() : null; + transactionOptions_ = other.transactionOptions_ != null ? other.transactionOptions_.Clone() : null; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public BeginTransactionRequest Clone() { + return new BeginTransactionRequest(this); + } + + /// Field number for the "connection" field. + public const int ConnectionFieldNumber = 1; + private global::Google.Cloud.SpannerLib.V1.Connection connection_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.SpannerLib.V1.Connection Connection { + get { return connection_; } + set { + connection_ = value; + } + } + + /// Field number for the "transaction_options" field. + public const int TransactionOptionsFieldNumber = 2; + private global::Google.Cloud.Spanner.V1.TransactionOptions transactionOptions_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.Spanner.V1.TransactionOptions TransactionOptions { + get { return transactionOptions_; } + set { + transactionOptions_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as BeginTransactionRequest); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(BeginTransactionRequest other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!object.Equals(Connection, other.Connection)) return false; + if (!object.Equals(TransactionOptions, other.TransactionOptions)) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (connection_ != null) hash ^= Connection.GetHashCode(); + if (transactionOptions_ != null) hash ^= TransactionOptions.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (connection_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Connection); + } + if (transactionOptions_ != null) { + output.WriteRawTag(18); + output.WriteMessage(TransactionOptions); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (connection_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Connection); + } + if (transactionOptions_ != null) { + output.WriteRawTag(18); + output.WriteMessage(TransactionOptions); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (connection_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Connection); + } + if (transactionOptions_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(TransactionOptions); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(BeginTransactionRequest other) { + if (other == null) { + return; + } + if (other.connection_ != null) { + if (connection_ == null) { + Connection = new global::Google.Cloud.SpannerLib.V1.Connection(); + } + Connection.MergeFrom(other.Connection); + } + if (other.transactionOptions_ != null) { + if (transactionOptions_ == null) { + TransactionOptions = new global::Google.Cloud.Spanner.V1.TransactionOptions(); + } + TransactionOptions.MergeFrom(other.TransactionOptions); + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + if (connection_ == null) { + Connection = new global::Google.Cloud.SpannerLib.V1.Connection(); + } + input.ReadMessage(Connection); + break; + } + case 18: { + if (transactionOptions_ == null) { + TransactionOptions = new global::Google.Cloud.Spanner.V1.TransactionOptions(); + } + input.ReadMessage(TransactionOptions); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + if (connection_ == null) { + Connection = new global::Google.Cloud.SpannerLib.V1.Connection(); + } + input.ReadMessage(Connection); + break; + } + case 18: { + if (transactionOptions_ == null) { + TransactionOptions = new global::Google.Cloud.Spanner.V1.TransactionOptions(); + } + input.ReadMessage(TransactionOptions); + break; + } + } + } + } + #endif + + } + + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class WriteMutationsRequest : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new WriteMutationsRequest()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[7]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public WriteMutationsRequest() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public WriteMutationsRequest(WriteMutationsRequest other) : this() { + connection_ = other.connection_ != null ? other.connection_.Clone() : null; + mutations_ = other.mutations_ != null ? other.mutations_.Clone() : null; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public WriteMutationsRequest Clone() { + return new WriteMutationsRequest(this); + } + + /// Field number for the "connection" field. + public const int ConnectionFieldNumber = 1; + private global::Google.Cloud.SpannerLib.V1.Connection connection_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.SpannerLib.V1.Connection Connection { + get { return connection_; } + set { + connection_ = value; + } + } + + /// Field number for the "mutations" field. + public const int MutationsFieldNumber = 2; + private global::Google.Cloud.Spanner.V1.BatchWriteRequest.Types.MutationGroup mutations_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.Spanner.V1.BatchWriteRequest.Types.MutationGroup Mutations { + get { return mutations_; } + set { + mutations_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as WriteMutationsRequest); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(WriteMutationsRequest other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!object.Equals(Connection, other.Connection)) return false; + if (!object.Equals(Mutations, other.Mutations)) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (connection_ != null) hash ^= Connection.GetHashCode(); + if (mutations_ != null) hash ^= Mutations.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (connection_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Connection); + } + if (mutations_ != null) { + output.WriteRawTag(18); + output.WriteMessage(Mutations); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (connection_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Connection); + } + if (mutations_ != null) { + output.WriteRawTag(18); + output.WriteMessage(Mutations); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (connection_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Connection); + } + if (mutations_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Mutations); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(WriteMutationsRequest other) { + if (other == null) { + return; + } + if (other.connection_ != null) { + if (connection_ == null) { + Connection = new global::Google.Cloud.SpannerLib.V1.Connection(); + } + Connection.MergeFrom(other.Connection); + } + if (other.mutations_ != null) { + if (mutations_ == null) { + Mutations = new global::Google.Cloud.Spanner.V1.BatchWriteRequest.Types.MutationGroup(); + } + Mutations.MergeFrom(other.Mutations); + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + if (connection_ == null) { + Connection = new global::Google.Cloud.SpannerLib.V1.Connection(); + } + input.ReadMessage(Connection); + break; + } + case 18: { + if (mutations_ == null) { + Mutations = new global::Google.Cloud.Spanner.V1.BatchWriteRequest.Types.MutationGroup(); + } + input.ReadMessage(Mutations); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + if (connection_ == null) { + Connection = new global::Google.Cloud.SpannerLib.V1.Connection(); + } + input.ReadMessage(Connection); + break; + } + case 18: { + if (mutations_ == null) { + Mutations = new global::Google.Cloud.Spanner.V1.BatchWriteRequest.Types.MutationGroup(); + } + input.ReadMessage(Mutations); + break; + } + } + } + } + #endif + + } + + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class Pool : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new Pool()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[8]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public Pool() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public Pool(Pool other) : this() { + id_ = other.id_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public Pool Clone() { + return new Pool(this); + } + + /// Field number for the "id" field. + public const int IdFieldNumber = 1; + private long id_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public long Id { + get { return id_; } + set { + id_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as Pool); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(Pool other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (Id != other.Id) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (Id != 0L) hash ^= Id.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (Id != 0L) { + output.WriteRawTag(8); + output.WriteInt64(Id); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (Id != 0L) { + output.WriteRawTag(8); + output.WriteInt64(Id); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (Id != 0L) { + size += 1 + pb::CodedOutputStream.ComputeInt64Size(Id); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(Pool other) { + if (other == null) { + return; + } + if (other.Id != 0L) { + Id = other.Id; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 8: { + Id = input.ReadInt64(); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 8: { + Id = input.ReadInt64(); + break; + } + } + } + } + #endif + + } + + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class Connection : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new Connection()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[9]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public Connection() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public Connection(Connection other) : this() { + pool_ = other.pool_ != null ? other.pool_.Clone() : null; + id_ = other.id_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public Connection Clone() { + return new Connection(this); + } + + /// Field number for the "pool" field. + public const int PoolFieldNumber = 1; + private global::Google.Cloud.SpannerLib.V1.Pool pool_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.SpannerLib.V1.Pool Pool { + get { return pool_; } + set { + pool_ = value; + } + } + + /// Field number for the "id" field. + public const int IdFieldNumber = 2; + private long id_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public long Id { + get { return id_; } + set { + id_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as Connection); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(Connection other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!object.Equals(Pool, other.Pool)) return false; + if (Id != other.Id) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (pool_ != null) hash ^= Pool.GetHashCode(); + if (Id != 0L) hash ^= Id.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (pool_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Pool); + } + if (Id != 0L) { + output.WriteRawTag(16); + output.WriteInt64(Id); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (pool_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Pool); + } + if (Id != 0L) { + output.WriteRawTag(16); + output.WriteInt64(Id); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (pool_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Pool); + } + if (Id != 0L) { + size += 1 + pb::CodedOutputStream.ComputeInt64Size(Id); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(Connection other) { + if (other == null) { + return; + } + if (other.pool_ != null) { + if (pool_ == null) { + Pool = new global::Google.Cloud.SpannerLib.V1.Pool(); + } + Pool.MergeFrom(other.Pool); + } + if (other.Id != 0L) { + Id = other.Id; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + if (pool_ == null) { + Pool = new global::Google.Cloud.SpannerLib.V1.Pool(); + } + input.ReadMessage(Pool); + break; + } + case 16: { + Id = input.ReadInt64(); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + if (pool_ == null) { + Pool = new global::Google.Cloud.SpannerLib.V1.Pool(); + } + input.ReadMessage(Pool); + break; + } + case 16: { + Id = input.ReadInt64(); + break; + } + } + } + } + #endif + + } + + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class Rows : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new Rows()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[10]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public Rows() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public Rows(Rows other) : this() { + connection_ = other.connection_ != null ? other.connection_.Clone() : null; + id_ = other.id_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public Rows Clone() { + return new Rows(this); + } + + /// Field number for the "connection" field. + public const int ConnectionFieldNumber = 1; + private global::Google.Cloud.SpannerLib.V1.Connection connection_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.SpannerLib.V1.Connection Connection { + get { return connection_; } + set { + connection_ = value; + } + } + + /// Field number for the "id" field. + public const int IdFieldNumber = 2; + private long id_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public long Id { + get { return id_; } + set { + id_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as Rows); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(Rows other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!object.Equals(Connection, other.Connection)) return false; + if (Id != other.Id) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (connection_ != null) hash ^= Connection.GetHashCode(); + if (Id != 0L) hash ^= Id.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (connection_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Connection); + } + if (Id != 0L) { + output.WriteRawTag(16); + output.WriteInt64(Id); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (connection_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Connection); + } + if (Id != 0L) { + output.WriteRawTag(16); + output.WriteInt64(Id); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (connection_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Connection); + } + if (Id != 0L) { + size += 1 + pb::CodedOutputStream.ComputeInt64Size(Id); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(Rows other) { + if (other == null) { + return; + } + if (other.connection_ != null) { + if (connection_ == null) { + Connection = new global::Google.Cloud.SpannerLib.V1.Connection(); + } + Connection.MergeFrom(other.Connection); + } + if (other.Id != 0L) { + Id = other.Id; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + if (connection_ == null) { + Connection = new global::Google.Cloud.SpannerLib.V1.Connection(); + } + input.ReadMessage(Connection); + break; + } + case 16: { + Id = input.ReadInt64(); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + if (connection_ == null) { + Connection = new global::Google.Cloud.SpannerLib.V1.Connection(); + } + input.ReadMessage(Connection); + break; + } + case 16: { + Id = input.ReadInt64(); + break; + } + } + } + } + #endif + + } + + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class NextRequest : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new NextRequest()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[11]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public NextRequest() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public NextRequest(NextRequest other) : this() { + rows_ = other.rows_ != null ? other.rows_.Clone() : null; + numRows_ = other.numRows_; + encoding_ = other.encoding_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public NextRequest Clone() { + return new NextRequest(this); + } + + /// Field number for the "rows" field. + public const int RowsFieldNumber = 1; + private global::Google.Cloud.SpannerLib.V1.Rows rows_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.SpannerLib.V1.Rows Rows { + get { return rows_; } + set { + rows_ = value; + } + } + + /// Field number for the "num_rows" field. + public const int NumRowsFieldNumber = 2; + private long numRows_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public long NumRows { + get { return numRows_; } + set { + numRows_ = value; + } + } + + /// Field number for the "encoding" field. + public const int EncodingFieldNumber = 3; + private long encoding_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public long Encoding { + get { return encoding_; } + set { + encoding_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as NextRequest); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(NextRequest other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!object.Equals(Rows, other.Rows)) return false; + if (NumRows != other.NumRows) return false; + if (Encoding != other.Encoding) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (rows_ != null) hash ^= Rows.GetHashCode(); + if (NumRows != 0L) hash ^= NumRows.GetHashCode(); + if (Encoding != 0L) hash ^= Encoding.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (rows_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Rows); + } + if (NumRows != 0L) { + output.WriteRawTag(16); + output.WriteInt64(NumRows); + } + if (Encoding != 0L) { + output.WriteRawTag(24); + output.WriteInt64(Encoding); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (rows_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Rows); + } + if (NumRows != 0L) { + output.WriteRawTag(16); + output.WriteInt64(NumRows); + } + if (Encoding != 0L) { + output.WriteRawTag(24); + output.WriteInt64(Encoding); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (rows_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Rows); + } + if (NumRows != 0L) { + size += 1 + pb::CodedOutputStream.ComputeInt64Size(NumRows); + } + if (Encoding != 0L) { + size += 1 + pb::CodedOutputStream.ComputeInt64Size(Encoding); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(NextRequest other) { + if (other == null) { + return; + } + if (other.rows_ != null) { + if (rows_ == null) { + Rows = new global::Google.Cloud.SpannerLib.V1.Rows(); + } + Rows.MergeFrom(other.Rows); + } + if (other.NumRows != 0L) { + NumRows = other.NumRows; + } + if (other.Encoding != 0L) { + Encoding = other.Encoding; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + if (rows_ == null) { + Rows = new global::Google.Cloud.SpannerLib.V1.Rows(); + } + input.ReadMessage(Rows); + break; + } + case 16: { + NumRows = input.ReadInt64(); + break; + } + case 24: { + Encoding = input.ReadInt64(); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + if (rows_ == null) { + Rows = new global::Google.Cloud.SpannerLib.V1.Rows(); + } + input.ReadMessage(Rows); + break; + } + case 16: { + NumRows = input.ReadInt64(); + break; + } + case 24: { + Encoding = input.ReadInt64(); + break; + } + } + } + } + #endif + + } + + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class RowData : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new RowData()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[12]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public RowData() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public RowData(RowData other) : this() { + rows_ = other.rows_ != null ? other.rows_.Clone() : null; + metadata_ = other.metadata_ != null ? other.metadata_.Clone() : null; + data_ = other.data_.Clone(); + stats_ = other.stats_ != null ? other.stats_.Clone() : null; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public RowData Clone() { + return new RowData(this); + } + + /// Field number for the "rows" field. + public const int RowsFieldNumber = 1; + private global::Google.Cloud.SpannerLib.V1.Rows rows_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.SpannerLib.V1.Rows Rows { + get { return rows_; } + set { + rows_ = value; + } + } + + /// Field number for the "metadata" field. + public const int MetadataFieldNumber = 2; + private global::Google.Cloud.Spanner.V1.ResultSetMetadata metadata_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.Spanner.V1.ResultSetMetadata Metadata { + get { return metadata_; } + set { + metadata_ = value; + } + } + + /// Field number for the "data" field. + public const int DataFieldNumber = 3; + private static readonly pb::FieldCodec _repeated_data_codec + = pb::FieldCodec.ForMessage(26, global::Google.Protobuf.WellKnownTypes.ListValue.Parser); + private readonly pbc::RepeatedField data_ = new pbc::RepeatedField(); + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public pbc::RepeatedField Data { + get { return data_; } + } + + /// Field number for the "stats" field. + public const int StatsFieldNumber = 4; + private global::Google.Cloud.Spanner.V1.ResultSetStats stats_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.Spanner.V1.ResultSetStats Stats { + get { return stats_; } + set { + stats_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as RowData); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(RowData other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!object.Equals(Rows, other.Rows)) return false; + if (!object.Equals(Metadata, other.Metadata)) return false; + if(!data_.Equals(other.data_)) return false; + if (!object.Equals(Stats, other.Stats)) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (rows_ != null) hash ^= Rows.GetHashCode(); + if (metadata_ != null) hash ^= Metadata.GetHashCode(); + hash ^= data_.GetHashCode(); + if (stats_ != null) hash ^= Stats.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (rows_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Rows); + } + if (metadata_ != null) { + output.WriteRawTag(18); + output.WriteMessage(Metadata); + } + data_.WriteTo(output, _repeated_data_codec); + if (stats_ != null) { + output.WriteRawTag(34); + output.WriteMessage(Stats); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (rows_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Rows); + } + if (metadata_ != null) { + output.WriteRawTag(18); + output.WriteMessage(Metadata); + } + data_.WriteTo(ref output, _repeated_data_codec); + if (stats_ != null) { + output.WriteRawTag(34); + output.WriteMessage(Stats); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (rows_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Rows); + } + if (metadata_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Metadata); + } + size += data_.CalculateSize(_repeated_data_codec); + if (stats_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Stats); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(RowData other) { + if (other == null) { + return; + } + if (other.rows_ != null) { + if (rows_ == null) { + Rows = new global::Google.Cloud.SpannerLib.V1.Rows(); + } + Rows.MergeFrom(other.Rows); + } + if (other.metadata_ != null) { + if (metadata_ == null) { + Metadata = new global::Google.Cloud.Spanner.V1.ResultSetMetadata(); + } + Metadata.MergeFrom(other.Metadata); + } + data_.Add(other.data_); + if (other.stats_ != null) { + if (stats_ == null) { + Stats = new global::Google.Cloud.Spanner.V1.ResultSetStats(); + } + Stats.MergeFrom(other.Stats); + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + if (rows_ == null) { + Rows = new global::Google.Cloud.SpannerLib.V1.Rows(); + } + input.ReadMessage(Rows); + break; + } + case 18: { + if (metadata_ == null) { + Metadata = new global::Google.Cloud.Spanner.V1.ResultSetMetadata(); + } + input.ReadMessage(Metadata); + break; + } + case 26: { + data_.AddEntriesFrom(input, _repeated_data_codec); + break; + } + case 34: { + if (stats_ == null) { + Stats = new global::Google.Cloud.Spanner.V1.ResultSetStats(); + } + input.ReadMessage(Stats); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + if (rows_ == null) { + Rows = new global::Google.Cloud.SpannerLib.V1.Rows(); + } + input.ReadMessage(Rows); + break; + } + case 18: { + if (metadata_ == null) { + Metadata = new global::Google.Cloud.Spanner.V1.ResultSetMetadata(); + } + input.ReadMessage(Metadata); + break; + } + case 26: { + data_.AddEntriesFrom(ref input, _repeated_data_codec); + break; + } + case 34: { + if (stats_ == null) { + Stats = new global::Google.Cloud.Spanner.V1.ResultSetStats(); + } + input.ReadMessage(Stats); + break; + } + } + } + } + #endif + + } + + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class MetadataRequest : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new MetadataRequest()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[13]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public MetadataRequest() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public MetadataRequest(MetadataRequest other) : this() { + rows_ = other.rows_ != null ? other.rows_.Clone() : null; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public MetadataRequest Clone() { + return new MetadataRequest(this); + } + + /// Field number for the "rows" field. + public const int RowsFieldNumber = 1; + private global::Google.Cloud.SpannerLib.V1.Rows rows_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.SpannerLib.V1.Rows Rows { + get { return rows_; } + set { + rows_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as MetadataRequest); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(MetadataRequest other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!object.Equals(Rows, other.Rows)) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (rows_ != null) hash ^= Rows.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (rows_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Rows); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (rows_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Rows); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (rows_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Rows); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(MetadataRequest other) { + if (other == null) { + return; + } + if (other.rows_ != null) { + if (rows_ == null) { + Rows = new global::Google.Cloud.SpannerLib.V1.Rows(); + } + Rows.MergeFrom(other.Rows); + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + if (rows_ == null) { + Rows = new global::Google.Cloud.SpannerLib.V1.Rows(); + } + input.ReadMessage(Rows); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + if (rows_ == null) { + Rows = new global::Google.Cloud.SpannerLib.V1.Rows(); + } + input.ReadMessage(Rows); + break; + } + } + } + } + #endif + + } + + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class ResultSetStatsRequest : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new ResultSetStatsRequest()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[14]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ResultSetStatsRequest() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ResultSetStatsRequest(ResultSetStatsRequest other) : this() { + rows_ = other.rows_ != null ? other.rows_.Clone() : null; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ResultSetStatsRequest Clone() { + return new ResultSetStatsRequest(this); + } + + /// Field number for the "rows" field. + public const int RowsFieldNumber = 1; + private global::Google.Cloud.SpannerLib.V1.Rows rows_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.SpannerLib.V1.Rows Rows { + get { return rows_; } + set { + rows_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as ResultSetStatsRequest); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(ResultSetStatsRequest other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!object.Equals(Rows, other.Rows)) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (rows_ != null) hash ^= Rows.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (rows_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Rows); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (rows_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Rows); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (rows_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Rows); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(ResultSetStatsRequest other) { + if (other == null) { + return; + } + if (other.rows_ != null) { + if (rows_ == null) { + Rows = new global::Google.Cloud.SpannerLib.V1.Rows(); + } + Rows.MergeFrom(other.Rows); + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + if (rows_ == null) { + Rows = new global::Google.Cloud.SpannerLib.V1.Rows(); + } + input.ReadMessage(Rows); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + if (rows_ == null) { + Rows = new global::Google.Cloud.SpannerLib.V1.Rows(); + } + input.ReadMessage(Rows); + break; + } + } + } + } + #endif + + } + + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class ConnectionStreamRequest : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new ConnectionStreamRequest()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[15]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ConnectionStreamRequest() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ConnectionStreamRequest(ConnectionStreamRequest other) : this() { + switch (other.RequestCase) { + case RequestOneofCase.ExecuteRequest: + ExecuteRequest = other.ExecuteRequest.Clone(); + break; + } + + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ConnectionStreamRequest Clone() { + return new ConnectionStreamRequest(this); + } + + /// Field number for the "execute_request" field. + public const int ExecuteRequestFieldNumber = 1; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.SpannerLib.V1.ExecuteRequest ExecuteRequest { + get { return requestCase_ == RequestOneofCase.ExecuteRequest ? (global::Google.Cloud.SpannerLib.V1.ExecuteRequest) request_ : null; } + set { + request_ = value; + requestCase_ = value == null ? RequestOneofCase.None : RequestOneofCase.ExecuteRequest; + } + } + + private object request_; + /// Enum of possible cases for the "request" oneof. + public enum RequestOneofCase { + None = 0, + ExecuteRequest = 1, + } + private RequestOneofCase requestCase_ = RequestOneofCase.None; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public RequestOneofCase RequestCase { + get { return requestCase_; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void ClearRequest() { + requestCase_ = RequestOneofCase.None; + request_ = null; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as ConnectionStreamRequest); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(ConnectionStreamRequest other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!object.Equals(ExecuteRequest, other.ExecuteRequest)) return false; + if (RequestCase != other.RequestCase) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (requestCase_ == RequestOneofCase.ExecuteRequest) hash ^= ExecuteRequest.GetHashCode(); + hash ^= (int) requestCase_; + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (requestCase_ == RequestOneofCase.ExecuteRequest) { + output.WriteRawTag(10); + output.WriteMessage(ExecuteRequest); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (requestCase_ == RequestOneofCase.ExecuteRequest) { + output.WriteRawTag(10); + output.WriteMessage(ExecuteRequest); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (requestCase_ == RequestOneofCase.ExecuteRequest) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(ExecuteRequest); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(ConnectionStreamRequest other) { + if (other == null) { + return; + } + switch (other.RequestCase) { + case RequestOneofCase.ExecuteRequest: + if (ExecuteRequest == null) { + ExecuteRequest = new global::Google.Cloud.SpannerLib.V1.ExecuteRequest(); + } + ExecuteRequest.MergeFrom(other.ExecuteRequest); + break; + } + + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + global::Google.Cloud.SpannerLib.V1.ExecuteRequest subBuilder = new global::Google.Cloud.SpannerLib.V1.ExecuteRequest(); + if (requestCase_ == RequestOneofCase.ExecuteRequest) { + subBuilder.MergeFrom(ExecuteRequest); + } + input.ReadMessage(subBuilder); + ExecuteRequest = subBuilder; + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + global::Google.Cloud.SpannerLib.V1.ExecuteRequest subBuilder = new global::Google.Cloud.SpannerLib.V1.ExecuteRequest(); + if (requestCase_ == RequestOneofCase.ExecuteRequest) { + subBuilder.MergeFrom(ExecuteRequest); + } + input.ReadMessage(subBuilder); + ExecuteRequest = subBuilder; + break; + } + } + } + } + #endif + + } + + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class ConnectionStreamResponse : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new ConnectionStreamResponse()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[16]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ConnectionStreamResponse() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ConnectionStreamResponse(ConnectionStreamResponse other) : this() { + switch (other.ResponseCase) { + case ResponseOneofCase.Row: + Row = other.Row.Clone(); + break; + } + + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ConnectionStreamResponse Clone() { + return new ConnectionStreamResponse(this); + } + + /// Field number for the "row" field. + public const int RowFieldNumber = 1; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.Spanner.V1.PartialResultSet Row { + get { return responseCase_ == ResponseOneofCase.Row ? (global::Google.Cloud.Spanner.V1.PartialResultSet) response_ : null; } + set { + response_ = value; + responseCase_ = value == null ? ResponseOneofCase.None : ResponseOneofCase.Row; + } + } + + private object response_; + /// Enum of possible cases for the "response" oneof. + public enum ResponseOneofCase { + None = 0, + Row = 1, + } + private ResponseOneofCase responseCase_ = ResponseOneofCase.None; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ResponseOneofCase ResponseCase { + get { return responseCase_; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void ClearResponse() { + responseCase_ = ResponseOneofCase.None; + response_ = null; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as ConnectionStreamResponse); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(ConnectionStreamResponse other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!object.Equals(Row, other.Row)) return false; + if (ResponseCase != other.ResponseCase) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (responseCase_ == ResponseOneofCase.Row) hash ^= Row.GetHashCode(); + hash ^= (int) responseCase_; + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (responseCase_ == ResponseOneofCase.Row) { + output.WriteRawTag(10); + output.WriteMessage(Row); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (responseCase_ == ResponseOneofCase.Row) { + output.WriteRawTag(10); + output.WriteMessage(Row); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (responseCase_ == ResponseOneofCase.Row) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Row); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(ConnectionStreamResponse other) { + if (other == null) { + return; + } + switch (other.ResponseCase) { + case ResponseOneofCase.Row: + if (Row == null) { + Row = new global::Google.Cloud.Spanner.V1.PartialResultSet(); + } + Row.MergeFrom(other.Row); + break; + } + + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + global::Google.Cloud.Spanner.V1.PartialResultSet subBuilder = new global::Google.Cloud.Spanner.V1.PartialResultSet(); + if (responseCase_ == ResponseOneofCase.Row) { + subBuilder.MergeFrom(Row); + } + input.ReadMessage(subBuilder); + Row = subBuilder; + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + global::Google.Cloud.Spanner.V1.PartialResultSet subBuilder = new global::Google.Cloud.Spanner.V1.PartialResultSet(); + if (responseCase_ == ResponseOneofCase.Row) { + subBuilder.MergeFrom(Row); + } + input.ReadMessage(subBuilder); + Row = subBuilder; + break; + } + } + } + } + #endif + + } + + #endregion + +} + +#endregion Designer generated code diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-v1/SpannerlibGrpc.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-v1/SpannerlibGrpc.cs new file mode 100644 index 00000000..d5e9db94 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-v1/SpannerlibGrpc.cs @@ -0,0 +1,590 @@ +// +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: google/spannerlib/v1/spannerlib.proto +// +#pragma warning disable 0414, 1591, 8981, 0612 +#region Designer generated code + +using grpc = global::Grpc.Core; + +namespace Google.Cloud.SpannerLib.V1 { + public static partial class SpannerLib + { + static readonly string __ServiceName = "google.spannerlib.v1.SpannerLib"; + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static void __Helper_SerializeMessage(global::Google.Protobuf.IMessage message, grpc::SerializationContext context) + { + #if !GRPC_DISABLE_PROTOBUF_BUFFER_SERIALIZATION + if (message is global::Google.Protobuf.IBufferMessage) + { + context.SetPayloadLength(message.CalculateSize()); + global::Google.Protobuf.MessageExtensions.WriteTo(message, context.GetBufferWriter()); + context.Complete(); + return; + } + #endif + context.Complete(global::Google.Protobuf.MessageExtensions.ToByteArray(message)); + } + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static class __Helper_MessageCache + { + public static readonly bool IsBufferMessage = global::System.Reflection.IntrospectionExtensions.GetTypeInfo(typeof(global::Google.Protobuf.IBufferMessage)).IsAssignableFrom(typeof(T)); + } + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static T __Helper_DeserializeMessage(grpc::DeserializationContext context, global::Google.Protobuf.MessageParser parser) where T : global::Google.Protobuf.IMessage + { + #if !GRPC_DISABLE_PROTOBUF_BUFFER_SERIALIZATION + if (__Helper_MessageCache.IsBufferMessage) + { + return parser.ParseFrom(context.PayloadAsReadOnlySequence()); + } + #endif + return parser.ParseFrom(context.PayloadAsNewBuffer()); + } + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spannerlib_v1_InfoRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.SpannerLib.V1.InfoRequest.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spannerlib_v1_InfoResponse = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.SpannerLib.V1.InfoResponse.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spannerlib_v1_CreatePoolRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.SpannerLib.V1.CreatePoolRequest.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spannerlib_v1_Pool = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.SpannerLib.V1.Pool.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_protobuf_Empty = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Protobuf.WellKnownTypes.Empty.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spannerlib_v1_CreateConnectionRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.SpannerLib.V1.CreateConnectionRequest.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spannerlib_v1_Connection = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.SpannerLib.V1.Connection.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spannerlib_v1_ExecuteRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.SpannerLib.V1.ExecuteRequest.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spannerlib_v1_Rows = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.SpannerLib.V1.Rows.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spannerlib_v1_RowData = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.SpannerLib.V1.RowData.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spannerlib_v1_ExecuteBatchRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.SpannerLib.V1.ExecuteBatchRequest.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spanner_v1_ExecuteBatchDmlResponse = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.Spanner.V1.ExecuteBatchDmlResponse.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spanner_v1_ResultSetMetadata = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.Spanner.V1.ResultSetMetadata.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spannerlib_v1_NextRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.SpannerLib.V1.NextRequest.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_protobuf_ListValue = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Protobuf.WellKnownTypes.ListValue.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spanner_v1_ResultSetStats = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.Spanner.V1.ResultSetStats.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spannerlib_v1_BeginTransactionRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.SpannerLib.V1.BeginTransactionRequest.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spanner_v1_CommitResponse = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.Spanner.V1.CommitResponse.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spannerlib_v1_WriteMutationsRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.SpannerLib.V1.WriteMutationsRequest.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spannerlib_v1_ConnectionStreamRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.SpannerLib.V1.ConnectionStreamRequest.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spannerlib_v1_ConnectionStreamResponse = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.SpannerLib.V1.ConnectionStreamResponse.Parser)); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_Info = new grpc::Method( + grpc::MethodType.Unary, + __ServiceName, + "Info", + __Marshaller_google_spannerlib_v1_InfoRequest, + __Marshaller_google_spannerlib_v1_InfoResponse); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_CreatePool = new grpc::Method( + grpc::MethodType.Unary, + __ServiceName, + "CreatePool", + __Marshaller_google_spannerlib_v1_CreatePoolRequest, + __Marshaller_google_spannerlib_v1_Pool); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_ClosePool = new grpc::Method( + grpc::MethodType.Unary, + __ServiceName, + "ClosePool", + __Marshaller_google_spannerlib_v1_Pool, + __Marshaller_google_protobuf_Empty); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_CreateConnection = new grpc::Method( + grpc::MethodType.Unary, + __ServiceName, + "CreateConnection", + __Marshaller_google_spannerlib_v1_CreateConnectionRequest, + __Marshaller_google_spannerlib_v1_Connection); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_CloseConnection = new grpc::Method( + grpc::MethodType.Unary, + __ServiceName, + "CloseConnection", + __Marshaller_google_spannerlib_v1_Connection, + __Marshaller_google_protobuf_Empty); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_Execute = new grpc::Method( + grpc::MethodType.Unary, + __ServiceName, + "Execute", + __Marshaller_google_spannerlib_v1_ExecuteRequest, + __Marshaller_google_spannerlib_v1_Rows); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_ExecuteStreaming = new grpc::Method( + grpc::MethodType.ServerStreaming, + __ServiceName, + "ExecuteStreaming", + __Marshaller_google_spannerlib_v1_ExecuteRequest, + __Marshaller_google_spannerlib_v1_RowData); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_ExecuteBatch = new grpc::Method( + grpc::MethodType.Unary, + __ServiceName, + "ExecuteBatch", + __Marshaller_google_spannerlib_v1_ExecuteBatchRequest, + __Marshaller_google_spanner_v1_ExecuteBatchDmlResponse); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_Metadata = new grpc::Method( + grpc::MethodType.Unary, + __ServiceName, + "Metadata", + __Marshaller_google_spannerlib_v1_Rows, + __Marshaller_google_spanner_v1_ResultSetMetadata); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_Next = new grpc::Method( + grpc::MethodType.Unary, + __ServiceName, + "Next", + __Marshaller_google_spannerlib_v1_NextRequest, + __Marshaller_google_protobuf_ListValue); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_ResultSetStats = new grpc::Method( + grpc::MethodType.Unary, + __ServiceName, + "ResultSetStats", + __Marshaller_google_spannerlib_v1_Rows, + __Marshaller_google_spanner_v1_ResultSetStats); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_CloseRows = new grpc::Method( + grpc::MethodType.Unary, + __ServiceName, + "CloseRows", + __Marshaller_google_spannerlib_v1_Rows, + __Marshaller_google_protobuf_Empty); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_BeginTransaction = new grpc::Method( + grpc::MethodType.Unary, + __ServiceName, + "BeginTransaction", + __Marshaller_google_spannerlib_v1_BeginTransactionRequest, + __Marshaller_google_protobuf_Empty); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_Commit = new grpc::Method( + grpc::MethodType.Unary, + __ServiceName, + "Commit", + __Marshaller_google_spannerlib_v1_Connection, + __Marshaller_google_spanner_v1_CommitResponse); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_Rollback = new grpc::Method( + grpc::MethodType.Unary, + __ServiceName, + "Rollback", + __Marshaller_google_spannerlib_v1_Connection, + __Marshaller_google_protobuf_Empty); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_WriteMutations = new grpc::Method( + grpc::MethodType.Unary, + __ServiceName, + "WriteMutations", + __Marshaller_google_spannerlib_v1_WriteMutationsRequest, + __Marshaller_google_spanner_v1_CommitResponse); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_ConnectionStream = new grpc::Method( + grpc::MethodType.DuplexStreaming, + __ServiceName, + "ConnectionStream", + __Marshaller_google_spannerlib_v1_ConnectionStreamRequest, + __Marshaller_google_spannerlib_v1_ConnectionStreamResponse); + + /// Service descriptor + public static global::Google.Protobuf.Reflection.ServiceDescriptor Descriptor + { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.Services[0]; } + } + + /// Client for SpannerLib + public partial class SpannerLibClient : grpc::ClientBase + { + /// Creates a new client for SpannerLib + /// The channel to use to make remote calls. + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public SpannerLibClient(grpc::ChannelBase channel) : base(channel) + { + } + /// Creates a new client for SpannerLib that uses a custom CallInvoker. + /// The callInvoker to use to make remote calls. + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public SpannerLibClient(grpc::CallInvoker callInvoker) : base(callInvoker) + { + } + /// Protected parameterless constructor to allow creation of test doubles. + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + protected SpannerLibClient() : base() + { + } + /// Protected constructor to allow creation of configured clients. + /// The client configuration. + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + protected SpannerLibClient(ClientBaseConfiguration configuration) : base(configuration) + { + } + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.SpannerLib.V1.InfoResponse Info(global::Google.Cloud.SpannerLib.V1.InfoRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return Info(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.SpannerLib.V1.InfoResponse Info(global::Google.Cloud.SpannerLib.V1.InfoRequest request, grpc::CallOptions options) + { + return CallInvoker.BlockingUnaryCall(__Method_Info, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall InfoAsync(global::Google.Cloud.SpannerLib.V1.InfoRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return InfoAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall InfoAsync(global::Google.Cloud.SpannerLib.V1.InfoRequest request, grpc::CallOptions options) + { + return CallInvoker.AsyncUnaryCall(__Method_Info, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.SpannerLib.V1.Pool CreatePool(global::Google.Cloud.SpannerLib.V1.CreatePoolRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return CreatePool(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.SpannerLib.V1.Pool CreatePool(global::Google.Cloud.SpannerLib.V1.CreatePoolRequest request, grpc::CallOptions options) + { + return CallInvoker.BlockingUnaryCall(__Method_CreatePool, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall CreatePoolAsync(global::Google.Cloud.SpannerLib.V1.CreatePoolRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return CreatePoolAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall CreatePoolAsync(global::Google.Cloud.SpannerLib.V1.CreatePoolRequest request, grpc::CallOptions options) + { + return CallInvoker.AsyncUnaryCall(__Method_CreatePool, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Protobuf.WellKnownTypes.Empty ClosePool(global::Google.Cloud.SpannerLib.V1.Pool request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return ClosePool(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Protobuf.WellKnownTypes.Empty ClosePool(global::Google.Cloud.SpannerLib.V1.Pool request, grpc::CallOptions options) + { + return CallInvoker.BlockingUnaryCall(__Method_ClosePool, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall ClosePoolAsync(global::Google.Cloud.SpannerLib.V1.Pool request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return ClosePoolAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall ClosePoolAsync(global::Google.Cloud.SpannerLib.V1.Pool request, grpc::CallOptions options) + { + return CallInvoker.AsyncUnaryCall(__Method_ClosePool, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.SpannerLib.V1.Connection CreateConnection(global::Google.Cloud.SpannerLib.V1.CreateConnectionRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return CreateConnection(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.SpannerLib.V1.Connection CreateConnection(global::Google.Cloud.SpannerLib.V1.CreateConnectionRequest request, grpc::CallOptions options) + { + return CallInvoker.BlockingUnaryCall(__Method_CreateConnection, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall CreateConnectionAsync(global::Google.Cloud.SpannerLib.V1.CreateConnectionRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return CreateConnectionAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall CreateConnectionAsync(global::Google.Cloud.SpannerLib.V1.CreateConnectionRequest request, grpc::CallOptions options) + { + return CallInvoker.AsyncUnaryCall(__Method_CreateConnection, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Protobuf.WellKnownTypes.Empty CloseConnection(global::Google.Cloud.SpannerLib.V1.Connection request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return CloseConnection(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Protobuf.WellKnownTypes.Empty CloseConnection(global::Google.Cloud.SpannerLib.V1.Connection request, grpc::CallOptions options) + { + return CallInvoker.BlockingUnaryCall(__Method_CloseConnection, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall CloseConnectionAsync(global::Google.Cloud.SpannerLib.V1.Connection request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return CloseConnectionAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall CloseConnectionAsync(global::Google.Cloud.SpannerLib.V1.Connection request, grpc::CallOptions options) + { + return CallInvoker.AsyncUnaryCall(__Method_CloseConnection, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.SpannerLib.V1.Rows Execute(global::Google.Cloud.SpannerLib.V1.ExecuteRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return Execute(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.SpannerLib.V1.Rows Execute(global::Google.Cloud.SpannerLib.V1.ExecuteRequest request, grpc::CallOptions options) + { + return CallInvoker.BlockingUnaryCall(__Method_Execute, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall ExecuteAsync(global::Google.Cloud.SpannerLib.V1.ExecuteRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return ExecuteAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall ExecuteAsync(global::Google.Cloud.SpannerLib.V1.ExecuteRequest request, grpc::CallOptions options) + { + return CallInvoker.AsyncUnaryCall(__Method_Execute, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncServerStreamingCall ExecuteStreaming(global::Google.Cloud.SpannerLib.V1.ExecuteRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return ExecuteStreaming(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncServerStreamingCall ExecuteStreaming(global::Google.Cloud.SpannerLib.V1.ExecuteRequest request, grpc::CallOptions options) + { + return CallInvoker.AsyncServerStreamingCall(__Method_ExecuteStreaming, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.Spanner.V1.ExecuteBatchDmlResponse ExecuteBatch(global::Google.Cloud.SpannerLib.V1.ExecuteBatchRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return ExecuteBatch(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.Spanner.V1.ExecuteBatchDmlResponse ExecuteBatch(global::Google.Cloud.SpannerLib.V1.ExecuteBatchRequest request, grpc::CallOptions options) + { + return CallInvoker.BlockingUnaryCall(__Method_ExecuteBatch, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall ExecuteBatchAsync(global::Google.Cloud.SpannerLib.V1.ExecuteBatchRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return ExecuteBatchAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall ExecuteBatchAsync(global::Google.Cloud.SpannerLib.V1.ExecuteBatchRequest request, grpc::CallOptions options) + { + return CallInvoker.AsyncUnaryCall(__Method_ExecuteBatch, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.Spanner.V1.ResultSetMetadata Metadata(global::Google.Cloud.SpannerLib.V1.Rows request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return Metadata(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.Spanner.V1.ResultSetMetadata Metadata(global::Google.Cloud.SpannerLib.V1.Rows request, grpc::CallOptions options) + { + return CallInvoker.BlockingUnaryCall(__Method_Metadata, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall MetadataAsync(global::Google.Cloud.SpannerLib.V1.Rows request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return MetadataAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall MetadataAsync(global::Google.Cloud.SpannerLib.V1.Rows request, grpc::CallOptions options) + { + return CallInvoker.AsyncUnaryCall(__Method_Metadata, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Protobuf.WellKnownTypes.ListValue Next(global::Google.Cloud.SpannerLib.V1.NextRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return Next(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Protobuf.WellKnownTypes.ListValue Next(global::Google.Cloud.SpannerLib.V1.NextRequest request, grpc::CallOptions options) + { + return CallInvoker.BlockingUnaryCall(__Method_Next, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall NextAsync(global::Google.Cloud.SpannerLib.V1.NextRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return NextAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall NextAsync(global::Google.Cloud.SpannerLib.V1.NextRequest request, grpc::CallOptions options) + { + return CallInvoker.AsyncUnaryCall(__Method_Next, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.Spanner.V1.ResultSetStats ResultSetStats(global::Google.Cloud.SpannerLib.V1.Rows request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return ResultSetStats(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.Spanner.V1.ResultSetStats ResultSetStats(global::Google.Cloud.SpannerLib.V1.Rows request, grpc::CallOptions options) + { + return CallInvoker.BlockingUnaryCall(__Method_ResultSetStats, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall ResultSetStatsAsync(global::Google.Cloud.SpannerLib.V1.Rows request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return ResultSetStatsAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall ResultSetStatsAsync(global::Google.Cloud.SpannerLib.V1.Rows request, grpc::CallOptions options) + { + return CallInvoker.AsyncUnaryCall(__Method_ResultSetStats, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Protobuf.WellKnownTypes.Empty CloseRows(global::Google.Cloud.SpannerLib.V1.Rows request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return CloseRows(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Protobuf.WellKnownTypes.Empty CloseRows(global::Google.Cloud.SpannerLib.V1.Rows request, grpc::CallOptions options) + { + return CallInvoker.BlockingUnaryCall(__Method_CloseRows, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall CloseRowsAsync(global::Google.Cloud.SpannerLib.V1.Rows request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return CloseRowsAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall CloseRowsAsync(global::Google.Cloud.SpannerLib.V1.Rows request, grpc::CallOptions options) + { + return CallInvoker.AsyncUnaryCall(__Method_CloseRows, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Protobuf.WellKnownTypes.Empty BeginTransaction(global::Google.Cloud.SpannerLib.V1.BeginTransactionRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return BeginTransaction(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Protobuf.WellKnownTypes.Empty BeginTransaction(global::Google.Cloud.SpannerLib.V1.BeginTransactionRequest request, grpc::CallOptions options) + { + return CallInvoker.BlockingUnaryCall(__Method_BeginTransaction, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall BeginTransactionAsync(global::Google.Cloud.SpannerLib.V1.BeginTransactionRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return BeginTransactionAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall BeginTransactionAsync(global::Google.Cloud.SpannerLib.V1.BeginTransactionRequest request, grpc::CallOptions options) + { + return CallInvoker.AsyncUnaryCall(__Method_BeginTransaction, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.Spanner.V1.CommitResponse Commit(global::Google.Cloud.SpannerLib.V1.Connection request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return Commit(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.Spanner.V1.CommitResponse Commit(global::Google.Cloud.SpannerLib.V1.Connection request, grpc::CallOptions options) + { + return CallInvoker.BlockingUnaryCall(__Method_Commit, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall CommitAsync(global::Google.Cloud.SpannerLib.V1.Connection request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return CommitAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall CommitAsync(global::Google.Cloud.SpannerLib.V1.Connection request, grpc::CallOptions options) + { + return CallInvoker.AsyncUnaryCall(__Method_Commit, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Protobuf.WellKnownTypes.Empty Rollback(global::Google.Cloud.SpannerLib.V1.Connection request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return Rollback(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Protobuf.WellKnownTypes.Empty Rollback(global::Google.Cloud.SpannerLib.V1.Connection request, grpc::CallOptions options) + { + return CallInvoker.BlockingUnaryCall(__Method_Rollback, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall RollbackAsync(global::Google.Cloud.SpannerLib.V1.Connection request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return RollbackAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall RollbackAsync(global::Google.Cloud.SpannerLib.V1.Connection request, grpc::CallOptions options) + { + return CallInvoker.AsyncUnaryCall(__Method_Rollback, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.Spanner.V1.CommitResponse WriteMutations(global::Google.Cloud.SpannerLib.V1.WriteMutationsRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return WriteMutations(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.Spanner.V1.CommitResponse WriteMutations(global::Google.Cloud.SpannerLib.V1.WriteMutationsRequest request, grpc::CallOptions options) + { + return CallInvoker.BlockingUnaryCall(__Method_WriteMutations, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall WriteMutationsAsync(global::Google.Cloud.SpannerLib.V1.WriteMutationsRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return WriteMutationsAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall WriteMutationsAsync(global::Google.Cloud.SpannerLib.V1.WriteMutationsRequest request, grpc::CallOptions options) + { + return CallInvoker.AsyncUnaryCall(__Method_WriteMutations, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncDuplexStreamingCall ConnectionStream(grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return ConnectionStream(new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncDuplexStreamingCall ConnectionStream(grpc::CallOptions options) + { + return CallInvoker.AsyncDuplexStreamingCall(__Method_ConnectionStream, null, options); + } + /// Creates a new instance of client from given ClientBaseConfiguration. + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + protected override SpannerLibClient NewInstance(ClientBaseConfiguration configuration) + { + return new SpannerLibClient(configuration); + } + } + + } +} +#endregion diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-v1/spannerlib-dotnet-grpc-v1.csproj b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-v1/spannerlib-dotnet-grpc-v1.csproj new file mode 100644 index 00000000..3141df11 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-v1/spannerlib-dotnet-grpc-v1.csproj @@ -0,0 +1,15 @@ + + + + netstandard2.1 + Google.Cloud.SpannerLib.V1 + enable + default + + + + + + + + diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/MockSpannerServer.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/MockSpannerServer.cs index 269c77ab..28118fdf 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/MockSpannerServer.cs +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/MockSpannerServer.cs @@ -795,4 +795,10 @@ public override Task DropDatabase(DropDatabaseRequest request, ServerCall _requests.Enqueue(request); return Task.FromResult(new Empty()); } + + public void Reset() + { + _requests.Clear(); + } + } \ No newline at end of file diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/SpannerConverter.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/SpannerConverter.cs index cbb3096c..9b64ffab 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/SpannerConverter.cs +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/SpannerConverter.cs @@ -61,10 +61,18 @@ internal static Value ToProtobufValue(Spanner.V1.Type type, object? value) .ToString(InvariantCulture) }; case TypeCode.Float32: + if (value is float float32) + { + return new Value { NumberValue = float32 }; + } return new Value { NumberValue = Convert.ToSingle(value, InvariantCulture) }; case TypeCode.Float64: return new Value { NumberValue = Convert.ToDouble(value, InvariantCulture) }; case TypeCode.Timestamp: + if (value is string value1) + { + return Value.ForString(value1); + } return new Value { StringValue = XmlConvert.ToString(Convert.ToDateTime(value, InvariantCulture), XmlDateTimeSerializationMode.Utc) @@ -100,7 +108,7 @@ internal static Value ToProtobufValue(Spanner.V1.Type type, object? value) } if (value is string str) { - return Value.ForString(SpannerNumeric.Parse(str).ToString()); + return Value.ForString(str); } if (value is float || value is double || value is decimal) { @@ -122,6 +130,8 @@ internal static Value ToProtobufValue(Spanner.V1.Type type, object? value) return Value.ForString(numericValue.ToString()); } throw new ArgumentException("Numeric parameters must be of type SpannerNumeric or string"); + case TypeCode.Uuid: + return Value.ForString(value.ToString()); default: throw new ArgumentOutOfRangeException(nameof(type.Code), type.Code, null); diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native-impl/SharedLibSpanner.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native-impl/SharedLibSpanner.cs index 1a94c318..431d1774 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native-impl/SharedLibSpanner.cs +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native-impl/SharedLibSpanner.cs @@ -13,6 +13,7 @@ // limitations under the License. using System; +using System.Threading; using System.Threading.Tasks; using Google.Cloud.Spanner.V1; using Google.Protobuf; @@ -115,9 +116,9 @@ public Rows Execute(Connection connection, ExecuteSqlRequest statement) return new Rows(connection, handler.ObjectId()); } - public Task ExecuteAsync(Connection connection, ExecuteSqlRequest statement) + public Task ExecuteAsync(Connection connection, ExecuteSqlRequest statement, CancellationToken cancellationToken) { - return Task.Run(() => Execute(connection, statement)); + return Task.Run(() => Execute(connection, statement), cancellationToken); } public long[] ExecuteBatch(Connection connection, ExecuteBatchDmlRequest statements) @@ -154,9 +155,9 @@ public long[] ExecuteBatch(Connection connection, ExecuteBatchDmlRequest stateme return result; } - public Task ExecuteBatchAsync(Connection connection, ExecuteBatchDmlRequest statements) + public Task ExecuteBatchAsync(Connection connection, ExecuteBatchDmlRequest statements, CancellationToken cancellationToken = default) { - return Task.Run(() => ExecuteBatch(connection, statements)); + return Task.Run(() => ExecuteBatch(connection, statements), cancellationToken); } public ResultSetMetadata? Metadata(Rows rows) @@ -165,9 +166,9 @@ public Task ExecuteBatchAsync(Connection connection, ExecuteBatchDmlRequ return handler.Length == 0 ? null : ResultSetMetadata.Parser.ParseFrom(handler.Value()); } - public async Task MetadataAsync(Rows rows) + public async Task MetadataAsync(Rows rows, CancellationToken cancellationToken = default) { - return await Task.Run(() => Metadata(rows)); + return await Task.Run(() => Metadata(rows), cancellationToken); } public ResultSetStats? Stats(Rows rows) @@ -182,9 +183,9 @@ public Task ExecuteBatchAsync(Connection connection, ExecuteBatchDmlRequ return handler.Length == 0 ? null : ListValue.Parser.ParseFrom(handler.Value()); } - public async Task NextAsync(Rows rows, int numRows, ISpannerLib.RowEncoding encoding) + public async Task NextAsync(Rows rows, int numRows, ISpannerLib.RowEncoding encoding, CancellationToken cancellationToken = default) { - return await Task.Run(() => Next(rows, numRows, encoding)); + return await Task.Run(() => Next(rows, numRows, encoding), cancellationToken); } public void CloseRows(Rows rows) @@ -192,6 +193,11 @@ public void CloseRows(Rows rows) ExecuteAndReleaseLibraryFunction(() => SpannerLib.CloseRows(rows.SpannerConnection.Pool.Id, rows.SpannerConnection.Id, rows.Id)); } + public Task CloseRowsAsync(Rows rows, CancellationToken cancellationToken = default) + { + return Task.Run(() => CloseRows(rows), cancellationToken); + } + public void BeginTransaction(Connection connection, TransactionOptions transactionOptions) { using var handler = ExecuteLibraryFunction(() => @@ -208,8 +214,18 @@ public void BeginTransaction(Connection connection, TransactionOptions transacti return handler.Length == 0 ? null : CommitResponse.Parser.ParseFrom(handler.Value()); } + public Task CommitAsync(Connection connection, CancellationToken cancellationToken = default) + { + return Task.Run(() => Commit(connection), cancellationToken); + } + public void Rollback(Connection connection) { ExecuteAndReleaseLibraryFunction(() => SpannerLib.Rollback(connection.Pool.Id, connection.Id)); } + + public Task RollbackAsync(Connection connection, CancellationToken cancellationToken = default) + { + return Task.Run(() => Rollback(connection), cancellationToken); + } } diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/AbstractMockServerTests.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/AbstractMockServerTests.cs new file mode 100644 index 00000000..a98b679b --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/AbstractMockServerTests.cs @@ -0,0 +1,66 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using Google.Cloud.SpannerLib.Grpc; +using Google.Cloud.SpannerLib.MockServer; +using Google.Cloud.SpannerLib.Native.Impl; +using NUnit.Framework.Internal; + +namespace Google.Cloud.SpannerLib.Tests; + +public abstract class AbstractMockServerTests +{ + public enum LibType + { + Shared, + Grpc, + GrpcTcp, + } + + protected readonly Dictionary SpannerLibDictionary = new([ + new KeyValuePair(LibType.Shared, new SharedLibSpanner()), + new KeyValuePair(LibType.Grpc, new GrpcLibSpanner()), + new KeyValuePair(LibType.GrpcTcp, new GrpcLibSpanner(addressType: Server.AddressType.Tcp)), + ]); + + protected SpannerMockServerFixture Fixture; + + protected string ConnectionString => $"{Fixture.Host}:{Fixture.Port}/projects/p1/instances/i1/databases/d1;UsePlainText=true"; + + [OneTimeSetUp] + public void Setup() + { + Fixture = new SpannerMockServerFixture(); + Fixture.SpannerMock.AddOrUpdateStatementResult("SELECT 1", StatementResult.CreateSelect1ResultSet()); + } + + [OneTimeTearDown] + public void Teardown() + { + foreach (var spannerLib in SpannerLibDictionary.Values) + { + spannerLib.Dispose(); + } + Fixture.Dispose(); + } + + [TearDown] + public void Reset() + { + Fixture.SpannerMock.Reset(); + Fixture.DatabaseAdminMock.Reset(); + Fixture.SpannerMock.AddOrUpdateStatementResult("SELECT 1", StatementResult.CreateSelect1ResultSet()); + } + +} \ No newline at end of file diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/BasicTests.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/BasicTests.cs index 687746f2..81358026 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/BasicTests.cs +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/BasicTests.cs @@ -24,46 +24,28 @@ namespace Google.Cloud.SpannerLib.Tests; -public class BasicTests +public class BasicTests : AbstractMockServerTests { - private readonly ISpannerLib _spannerLib = new SharedLibSpanner(); - - private SpannerMockServerFixture _fixture; - - private string ConnectionString => $"{_fixture.Host}:{_fixture.Port}/projects/p1/instances/i1/databases/d1;UsePlainText=true"; - - [SetUp] - public void Setup() - { - _fixture = new SpannerMockServerFixture(); - _fixture.SpannerMock.AddOrUpdateStatementResult("SELECT 1", StatementResult.CreateSelect1ResultSet()); - } - - [TearDown] - public void Teardown() - { - _fixture.Dispose(); - } [Test] - public void TestCreatePool() + public void TestCreatePool([Values] LibType libType) { - var pool = Pool.Create(_spannerLib, ConnectionString); + var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); pool.Close(); } [Test] - public void TestCreateConnection() + public void TestCreateConnection([Values] LibType libType) { - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); var connection = pool.CreateConnection(); connection.Close(); } [Test] - public void TestExecuteQuery() + public void TestExecuteQuery([Values] LibType libType) { - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); using var rows = connection.Execute(new ExecuteSqlRequest { Sql = "SELECT 1" }); for (var row = rows.Next(); row != null; row = rows.Next()) @@ -75,12 +57,12 @@ public void TestExecuteQuery() } [Test] - public void TestExecuteQueryError() + public void TestExecuteQueryError([Values] LibType libType) { var sql = "select * from non_existing_table"; - _fixture.SpannerMock.AddOrUpdateStatementResult(sql, StatementResult.CreateException(new RpcException(new Status(StatusCode.NotFound, "Table not found")))); + Fixture.SpannerMock.AddOrUpdateStatementResult(sql, StatementResult.CreateException(new RpcException(new Status(StatusCode.NotFound, "Table not found")))); - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); SpannerException exception = Assert.Throws(() => connection.Execute(new ExecuteSqlRequest { Sql = sql })); Assert.That(exception.Code, Is.EqualTo(Code.NotFound)); @@ -88,15 +70,15 @@ public void TestExecuteQueryError() } [Test] - public void TestExecuteParameterizedQuery() + public void TestExecuteParameterizedQuery([Values] LibType libType) { var sql = "select col_varchar from all_types where col_bigint=$1::bigint"; - _fixture.SpannerMock.AddOrUpdateStatementResult(sql, + Fixture.SpannerMock.AddOrUpdateStatementResult(sql, StatementResult.CreateSingleColumnResultSet( new Spanner.V1.Type { Code = TypeCode.String }, "col_varchar", "some-value")); - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); var parameters = new Struct { @@ -119,15 +101,15 @@ public void TestExecuteParameterizedQuery() } [Test] - public void TestQueryParameterStartingWithUnderscore() + public void TestQueryParameterStartingWithUnderscore([Values] LibType libType) { var sql = "select col_string from all_types where col_int64=@__id"; - _fixture.SpannerMock.AddOrUpdateStatementResult(sql, + Fixture.SpannerMock.AddOrUpdateStatementResult(sql, StatementResult.CreateSingleColumnResultSet( new Spanner.V1.Type { Code = TypeCode.String }, "col_string", "some-value")); - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); var parameters = new Struct { @@ -151,9 +133,9 @@ public void TestQueryParameterStartingWithUnderscore() [Test] [Ignore("execute async disabled for now")] - public async Task TestExecuteQueryAsync() + public async Task TestExecuteQueryAsync([Values] LibType libType) { - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); using var rows = await connection.ExecuteAsync(new ExecuteSqlRequest { Sql = "SELECT 1" }); var metadata = rows.Metadata; @@ -167,9 +149,9 @@ public async Task TestExecuteQueryAsync() } [Test] - public void TestReadOnlyTransaction() + public void TestReadOnlyTransaction([Values] LibType libType) { - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); connection.BeginTransaction(new TransactionOptions { ReadOnly = new TransactionOptions.Types.ReadOnly() }); using var rows = connection.Execute(new ExecuteSqlRequest { Sql = "SELECT 1" }); @@ -184,11 +166,11 @@ public void TestReadOnlyTransaction() } [Test] - public void TestReadWriteTransaction() + public void TestReadWriteTransaction([Values] LibType libType) { var sql = "update table1 set value='one' where id=1"; - _fixture.SpannerMock.AddOrUpdateStatementResult(sql, StatementResult.CreateUpdateCount(1)); - using var pool = Pool.Create(_spannerLib, ConnectionString); + Fixture.SpannerMock.AddOrUpdateStatementResult(sql, StatementResult.CreateUpdateCount(1)); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); connection.BeginTransaction(new TransactionOptions { ReadWrite = new TransactionOptions.Types.ReadWrite() }); using var rows = connection.Execute(new ExecuteSqlRequest { Sql = sql }); @@ -202,7 +184,7 @@ public void TestReadWriteTransaction() public void TestBenchmarkNativeSpannerLib() { var totalRowCount = 1000000; - _fixture.SpannerMock.AddOrUpdateStatementResult( + Fixture.SpannerMock.AddOrUpdateStatementResult( "select * from all_types", StatementResult.CreateResultSet( new List> @@ -236,7 +218,7 @@ public void TestBenchmarkNativeSpannerLib() public void TestBenchmarkDotnetGrpcClient() { var totalRowCount = 1000000; - _fixture.SpannerMock.AddOrUpdateStatementResult( + Fixture.SpannerMock.AddOrUpdateStatementResult( "select * from all_types", StatementResult.CreateResultSet( new List> @@ -251,7 +233,7 @@ public void TestBenchmarkDotnetGrpcClient() var totalValueCount = totalRowCount * 5; var builder = new SpannerClientBuilder { - Endpoint = $"http://{_fixture.Endpoint}", + Endpoint = $"http://{Fixture.Endpoint}", ChannelCredentials = ChannelCredentials.Insecure }; SpannerClient client = builder.Build(); diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/BatchTests.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/BatchTests.cs index e2c95b01..8428e941 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/BatchTests.cs +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/BatchTests.cs @@ -15,38 +15,19 @@ using Google.Cloud.Spanner.Admin.Database.V1; using Google.Cloud.Spanner.V1; using Google.Cloud.SpannerLib.MockServer; -using Google.Cloud.SpannerLib.Native.Impl; using Google.Protobuf.WellKnownTypes; namespace Google.Cloud.SpannerLib.Tests; -public class BatchTests +public class BatchTests : AbstractMockServerTests { - private readonly ISpannerLib _spannerLib = new SharedLibSpanner(); - - private SpannerMockServerFixture _fixture; - - private string ConnectionString => $"{_fixture.Host}:{_fixture.Port}/projects/p1/instances/i1/databases/d1;UsePlainText=true"; - - [SetUp] - public void Setup() - { - _fixture = new SpannerMockServerFixture(); - } - - [TearDown] - public void Teardown() - { - _fixture.Dispose(); - } - [Test] - public void TestBatchDml() + public void TestBatchDml([Values] LibType libType) { var insert = "insert into test (id, value) values (@id, @value)"; - _fixture.SpannerMock.AddOrUpdateStatementResult(insert, StatementResult.CreateUpdateCount(1)); + Fixture.SpannerMock.AddOrUpdateStatementResult(insert, StatementResult.CreateUpdateCount(1)); - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); var updateCounts = connection.ExecuteBatch([ new ExecuteBatchDmlRequest.Types.Statement {Sql = insert, Params = new Struct @@ -67,15 +48,15 @@ public void TestBatchDml() }}, ]); Assert.That(updateCounts, Is.EqualTo(new long[]{1,1})); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); } [Test] - public void TestBatchDdl() + public void TestBatchDdl([Values] LibType libType) { // We don't need to set up any results for DDL statements on the mock server. // It automatically responds with an long-running operation that has finished when it receives a DDL request. - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); // The input argument for ExecuteBatch is always a ExecuteBatchDmlRequest, even for DDL statements. var updateCounts = connection.ExecuteBatch([ @@ -83,7 +64,7 @@ public void TestBatchDdl() new ExecuteBatchDmlRequest.Types.Statement {Sql = "create index my_index on my_table (value)"}, ]); Assert.That(updateCounts, Is.EqualTo(new long[]{-1,-1})); - Assert.That(_fixture.DatabaseAdminMock.Requests.OfType().Count(), Is.EqualTo(1)); + Assert.That(Fixture.DatabaseAdminMock.Requests.OfType().Count(), Is.EqualTo(1)); } } \ No newline at end of file diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/BenchmarkTests.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/BenchmarkTests.cs new file mode 100644 index 00000000..74504411 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/BenchmarkTests.cs @@ -0,0 +1,197 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using System.Diagnostics; +using Google.Cloud.Spanner.Data; +using Google.Cloud.Spanner.V1; +using Google.Protobuf.WellKnownTypes; + +namespace Google.Cloud.SpannerLib.Tests; + +public class BenchmarkTests : AbstractMockServerTests +{ + readonly struct Stats + { + public TimeSpan Min { get; init; } + public TimeSpan P50 { get; init; } + public TimeSpan P90 { get; init; } + public TimeSpan P95 { get; init; } + public TimeSpan P99 { get; init; } + public TimeSpan Max { get; init; } + public TimeSpan Avg { get; init; } + + public override string ToString() + { + return $"Min: {Min}{Environment.NewLine}" + + $"P50: {P50}{Environment.NewLine}" + + $"P90: {P90}{Environment.NewLine}" + + $"P95: {P95}{Environment.NewLine}" + + $"P99: {P99}{Environment.NewLine}" + + $"Max: {Max}{Environment.NewLine}" + + $"Avg: {Avg}{Environment.NewLine}"; + } + } + + [Test, Sequential] + [Ignore("for local testing")] + public async Task TestBenchmarkRealSpanner([Values] LibType? libType, [Values(false, false, false, true)] bool clientLib) + { + const string connectionString = "projects/appdev-soda-spanner-staging/instances/knut-test-ycsb/databases/knut-test-db"; + const int numTasks = 2000; + object connector; + + if (clientLib) + { + connector = $"Data Source={connectionString}"; + } + else + { + var pool = Pool.Create(SpannerLibDictionary[libType!.Value], connectionString); + connector = pool; + } + + // Warmup + var warmupDuration = await ReadRandomRows(connector, 10); + Console.WriteLine($"Warmup Duration: {warmupDuration}"); + + for (var i = 0; i < 10; i++) + { + var numRows = (i + 1) * 10; + var duration = await ReadRandomRows(connector, numRows); + Console.WriteLine($"Duration ({numRows}): {duration}"); + } + + var stopwatch = Stopwatch.StartNew(); + var tasks = new Task[numTasks]; + for (var i = 0; i < numTasks; i++) + { + tasks[i] = ReadRandomRows(connector, 10); + } + + await Task.WhenAll(tasks); + var durations = new TimeSpan[numTasks]; + for (var i = 0; i < numTasks; i++) + { + durations[i] = tasks[i].Result; + } + var totalDuration = stopwatch.Elapsed; + + var stats = CalculateStats(durations); + Console.WriteLine(); + Console.WriteLine($"Num tasks: {numTasks}"); + Console.WriteLine($"{stats}"); + ThreadPool.GetMaxThreads(out var workerThreads, out _); + Console.WriteLine($"Max threads: {workerThreads}"); + Console.WriteLine($"Total time: {totalDuration}"); + + if (connector is IDisposable disposable) + { + disposable.Dispose(); + } + } + + static Stats CalculateStats(TimeSpan[] durations) + { + var ordered = durations.Order().ToArray(); + var stats = new Stats + { + Min = ordered[0], + P50 = ordered[ordered.Length * 50 / 100], + P90 = ordered[ordered.Length * 90 / 100], + P95 = ordered[ordered.Length * 95 / 100], + P99 = ordered[ordered.Length * 99 / 100], + Max = ordered[^1], + Avg = TimeSpan.FromTicks((long) ordered.Average(duration => duration.Ticks)) + }; + return stats; + } + + static Task ReadRandomRows(object connector, int maxRows) + { + if (connector is Pool pool) + { + return ReadRandomRows(pool, maxRows); + } + if (connector is string connString) + { + return ReadRandomRows(connString, maxRows); + } + throw new NotSupportedException(); + } + + static async Task ReadRandomRows(Pool pool, int maxRows) + { + // Add the randomly selected identifiers to a set to ensure that we know exactly how many rows will be returned, + // as the random selection of identifiers could contain duplicates. + var set = new HashSet(); + var list = Value.ForList(); + list.ListValue.Values.Capacity = maxRows; + for (var c = 0; c < maxRows; c++) + { + var id = Random.Shared.Next(1, 1_000_001); + set.Add(id); + list.ListValue.Values.Add(Value.ForString($"{id}")); + } + await using var connection = pool.CreateConnection(); + + var stopwatch = Stopwatch.StartNew(); + var request = new ExecuteSqlRequest + { + Sql = "select * from all_types where col_bigint = any($1)", + Params = new Struct { Fields = { ["p1"] = list } }, + }; + var count = 0; + await using var rows = await connection.ExecuteAsync(request); + while (await rows.NextAsync() is { } row) + { + Assert.That(row.Values.Count, Is.EqualTo(10)); + count++; + } + Assert.That(count, Is.EqualTo(set.Count)); + + return stopwatch.Elapsed; + } + + static async Task ReadRandomRows(string connectionString, int maxRows) + { + var set = new HashSet(); + var list = new List + { + Capacity = maxRows + }; + for (var c = 0; c < maxRows; c++) + { + var id = Random.Shared.Next(1, 1_000_001); + set.Add(id); + list.Add(id); + } + await using var connection = new SpannerConnection(connectionString); + + var stopwatch = Stopwatch.StartNew(); + await using var cmd = connection.CreateSelectCommand( + "select * from all_types where col_bigint = any($1)", + new SpannerParameterCollection {{"p1", SpannerDbType.ArrayOf(SpannerDbType.Int64), list}} + ); + var count = 0; + await using var rows = await cmd.ExecuteReaderAsync(); + while (await rows.ReadAsync()) + { + Assert.That(rows.FieldCount, Is.EqualTo(10)); + count++; + } + Assert.That(count, Is.EqualTo(set.Count)); + + return stopwatch.Elapsed; + } +} \ No newline at end of file diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/ConnectionTests.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/ConnectionTests.cs index 1f4e88ea..b6bc88ad 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/ConnectionTests.cs +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/ConnectionTests.cs @@ -13,47 +13,27 @@ // limitations under the License. using Google.Cloud.Spanner.V1; -using Google.Cloud.SpannerLib.MockServer; -using Google.Cloud.SpannerLib.Native.Impl; using Google.Protobuf.WellKnownTypes; using Google.Rpc; namespace Google.Cloud.SpannerLib.Tests; -public class ConnectionTests +public class ConnectionTests : AbstractMockServerTests { - private readonly ISpannerLib _spannerLib = new SharedLibSpanner(); - - private SpannerMockServerFixture _fixture; - - private string ConnectionString => $"{_fixture.Host}:{_fixture.Port}/projects/p1/instances/i1/databases/d1;UsePlainText=true"; - - [SetUp] - public void Setup() - { - _fixture = new SpannerMockServerFixture(); - } - - [TearDown] - public void Teardown() - { - _fixture.Dispose(); - } - [Test] - public void TestCreateConnection() + public void TestCreateConnection([Values] LibType libType) { - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); Assert.That(connection, Is.Not.Null); Assert.That(connection.Id, Is.GreaterThan(0)); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); } [Test] - public void TestCreateTwoConnections() + public void TestCreateTwoConnections([Values] LibType libType) { - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection1 = pool.CreateConnection(); using var connection2 = pool.CreateConnection(); Assert.That(connection1, Is.Not.Null); @@ -61,13 +41,13 @@ public void TestCreateTwoConnections() Assert.That(connection1.Id, Is.GreaterThan(0)); Assert.That(connection2.Id, Is.GreaterThan(0)); Assert.That(connection1.Id, Is.Not.EqualTo(connection2.Id)); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); } [Test] - public void TestWriteMutations() + public void TestWriteMutations([Values] LibType libType) { - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); var insertMutation = new Mutation { @@ -99,9 +79,9 @@ public void TestWriteMutations() }); Assert.That(response, Is.Not.Null); Assert.That(response.CommitTimestamp, Is.Not.Null); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); - var commit = _fixture.SpannerMock.Requests.OfType().Single(); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + var commit = Fixture.SpannerMock.Requests.OfType().Single(); Assert.That(commit, Is.Not.Null); Assert.That(commit.Mutations.Count, Is.EqualTo(2)); Assert.That(commit.Mutations[0].Insert.Values.Count, Is.EqualTo(2)); @@ -109,9 +89,9 @@ public void TestWriteMutations() } [Test] - public void TestWriteMutationsInTransaction() + public void TestWriteMutationsInTransaction([Values] LibType libType) { - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); connection.BeginTransaction(new TransactionOptions()); @@ -136,18 +116,18 @@ public void TestWriteMutationsInTransaction() response = connection.Commit(); Assert.That(response, Is.Not.Null); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); - var commit = _fixture.SpannerMock.Requests.OfType().Single(); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + var commit = Fixture.SpannerMock.Requests.OfType().Single(); Assert.That(commit, Is.Not.Null); Assert.That(commit.Mutations.Count, Is.EqualTo(1)); Assert.That(commit.Mutations[0].Insert.Values.Count, Is.EqualTo(1)); } [Test] - public void TestWriteMutationsInReadOnlyTransaction() + public void TestWriteMutationsInReadOnlyTransaction([Values] LibType libType) { - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); connection.BeginTransaction(new TransactionOptions{ReadOnly = new TransactionOptions.Types.ReadOnly()}); diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/PoolTests.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/PoolTests.cs index 314770c2..c33ffdbb 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/PoolTests.cs +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/PoolTests.cs @@ -14,48 +14,29 @@ using Google.Cloud.Spanner.V1; using Google.Cloud.SpannerLib.MockServer; -using Google.Cloud.SpannerLib.Native.Impl; using Google.Rpc; using Grpc.Core; namespace Google.Cloud.SpannerLib.Tests; -public class PoolTests +public class PoolTests : AbstractMockServerTests { - private readonly ISpannerLib _spannerLib = new SharedLibSpanner(); - - private SpannerMockServerFixture _fixture; - - private string ConnectionString => $"{_fixture.Host}:{_fixture.Port}/projects/p1/instances/i1/databases/d1;UsePlainText=true"; - - [SetUp] - public void Setup() - { - _fixture = new SpannerMockServerFixture(); - } - - [TearDown] - public void Teardown() - { - _fixture.Dispose(); - } - [Test] - public void TestCreatePool() + public void TestCreatePool([Values] LibType libType) { - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); Assert.That(pool, Is.Not.Null); Assert.That(pool.Id, Is.GreaterThan(0)); // Creating a pool should create the underlying client and a multiplexed session. - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); } [Test] - public void TestCreatePoolFails() + public void TestCreatePoolFails([Values] LibType libType) { - _fixture.SpannerMock.AddOrUpdateExecutionTime(nameof(_fixture.SpannerMock.CreateSession), ExecutionTime.CreateException(StatusCode.PermissionDenied, "Not allowed")); + Fixture.SpannerMock.AddOrUpdateExecutionTime(nameof(Fixture.SpannerMock.CreateSession), ExecutionTime.CreateException(StatusCode.PermissionDenied, "Not allowed")); - SpannerException exception = Assert.Throws(() => Pool.Create(_spannerLib, ConnectionString)); + SpannerException exception = Assert.Throws(() => Pool.Create(SpannerLibDictionary[libType], ConnectionString)); Assert.That(exception.Code, Is.EqualTo(Code.PermissionDenied)); } diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/RowsTests.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/RowsTests.cs index e45fb226..a4d0d253 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/RowsTests.cs +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/RowsTests.cs @@ -15,35 +15,17 @@ using Google.Cloud.Spanner.Admin.Database.V1; using Google.Cloud.Spanner.V1; using Google.Cloud.SpannerLib.MockServer; -using Google.Cloud.SpannerLib.Native.Impl; +using Google.Rpc; +using TypeCode = Google.Cloud.Spanner.V1.TypeCode; namespace Google.Cloud.SpannerLib.Tests; -public class RowsTests +public class RowsTests : AbstractMockServerTests { - private readonly ISpannerLib _spannerLib = new SharedLibSpanner(); - - private SpannerMockServerFixture _fixture; - - private string ConnectionString => $"{_fixture.Host}:{_fixture.Port}/projects/p1/instances/i1/databases/d1;UsePlainText=true"; - - [SetUp] - public void Setup() - { - _fixture = new SpannerMockServerFixture(); - _fixture.SpannerMock.AddOrUpdateStatementResult("SELECT 1", StatementResult.CreateSelect1ResultSet()); - } - - [TearDown] - public void Teardown() - { - _fixture.Dispose(); - } - [Test] - public void TestExecuteSelect1() + public void TestExecuteSelect1([Values] LibType libType) { - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); using var rows = connection.Execute(new ExecuteSqlRequest { Sql = "SELECT 1" }); var numRows = 0; @@ -58,14 +40,28 @@ public void TestExecuteSelect1() } [Test] - public void TestRandomResults() + public void TestEmptyResults([Values] LibType libType) + { + var sql = "select * from (select 1) where false"; + Fixture.SpannerMock.AddOrUpdateStatementResult(sql, StatementResult.CreateSingleColumnResultSet(new Spanner.V1.Type{Code = TypeCode.Int64}, "c")); + + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); + using var connection = pool.CreateConnection(); + using var rows = connection.Execute(new ExecuteSqlRequest { Sql = sql }); + Assert.That(rows.Metadata, Is.Not.Null); + Assert.That(rows.Metadata.RowType.Fields.Count, Is.EqualTo(1)); + Assert.That(rows.Next(), Is.Null); + } + + [Test] + public void TestRandomResults([Values] LibType libType) { var numRows = 10; var rowType = RandomResultSetGenerator.GenerateAllTypesRowType(); var results = RandomResultSetGenerator.Generate(rowType, numRows); - _fixture.SpannerMock.AddOrUpdateStatementResult("select * from random", StatementResult.CreateQuery(results)); + Fixture.SpannerMock.AddOrUpdateStatementResult("select * from random", StatementResult.CreateQuery(results)); - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); using var rows = connection.Execute(new ExecuteSqlRequest { Sql = "select * from random" }); @@ -77,48 +73,118 @@ public void TestRandomResults() } Assert.That(rowCount, Is.EqualTo(numRows)); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); - var request = _fixture.SpannerMock.Requests.OfType().First(); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + var request = Fixture.SpannerMock.Requests.OfType().First(); + Assert.That(request.Transaction?.SingleUse?.ReadOnly?.HasStrong ?? false); + } + + [Test] + public void TestStopHalfway([Values] LibType libType) + { + var numRows = 10; + var rowType = RandomResultSetGenerator.GenerateAllTypesRowType(); + var results = RandomResultSetGenerator.Generate(rowType, numRows); + Fixture.SpannerMock.AddOrUpdateStatementResult("select * from random", StatementResult.CreateQuery(results)); + var stopAfterRows = Random.Shared.Next(1, numRows - 1); + + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); + using var connection = pool.CreateConnection(); + using var rows = connection.Execute(new ExecuteSqlRequest { Sql = "select * from random" }); + Assert.That(rows.Metadata, Is.Not.Null); + Assert.That(rows.Metadata.RowType.Fields.Count, Is.EqualTo(rowType.Fields.Count)); + + var rowCount = 0; + while (rows.Next() is { } row) + { + rowCount++; + Assert.That(row.Values.Count, Is.EqualTo(rowType.Fields.Count)); + if (rowCount == stopAfterRows) + { + break; + } + } + + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + var request = Fixture.SpannerMock.Requests.OfType().First(); Assert.That(request.Transaction?.SingleUse?.ReadOnly?.HasStrong ?? false); } [Test] - public void TestExecuteDml() + public void TestCloseConnectionWithOpenRows([Values] LibType libType) + { + var numRows = 5000; + var rowType = RandomResultSetGenerator.GenerateAllTypesRowType(); + var results = RandomResultSetGenerator.Generate(rowType, numRows); + Fixture.SpannerMock.AddOrUpdateStatementResult("select * from random", StatementResult.CreateQuery(results)); + + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); + using var connection = pool.CreateConnection(); + using var rows = connection.Execute(new ExecuteSqlRequest { Sql = "select * from random" }); + + // Verify that we can fetch the first row. + Assert.That(rows.Next(), Is.Not.Null); + // Close the connection while the rows object is still open. + connection.Close(); + // Getting all the rows should not be possible. + // If the underlying Rows object uses a stream, then it could be that it still receives some rows, but it will + // eventually fail. + var exception = Assert.Throws(() => + { + while (rows.Next() is not null) + { + } + }); + // The error is 'Connection not found' or an internal exception from the underlying driver, depending on exactly + // when the driver detects that the connection and all related objects have been closed. + Assert.That(exception.Code is Code.NotFound or Code.Unknown, Is.True); + + if (libType == LibType.Shared) + { + // TODO: Remove this once it has been fixed in the shared library. + // Closing a Rows object that has already been closed because the connection has been closed, should + // be a no-op. + var closeException = Assert.Throws(() => rows.Close()); + Assert.That(closeException.Code, Is.EqualTo(Code.NotFound)); + } + } + + [Test] + public void TestExecuteDml([Values] LibType libType) { var sql = "update my_table set value=1 where id=2"; - _fixture.SpannerMock.AddOrUpdateStatementResult(sql, StatementResult.CreateUpdateCount(1L)); + Fixture.SpannerMock.AddOrUpdateStatementResult(sql, StatementResult.CreateUpdateCount(1L)); - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); using var rows = connection.Execute(new ExecuteSqlRequest { Sql = sql }); Assert.That(rows.Next(), Is.Null); Assert.That(rows.UpdateCount, Is.EqualTo(1L)); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); - var request = _fixture.SpannerMock.Requests.OfType().First(); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + var request = Fixture.SpannerMock.Requests.OfType().First(); Assert.That(request.Transaction?.Begin?.ReadWrite, Is.Not.Null); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); } [Test] - public void TestExecuteDdl() + public void TestExecuteDdl([Values] LibType libType) { // The mock DatabaseAdmin server always responds with a finished operation when // UpdateDatabaseDdl is called, so we don't need to set up any results. - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); using var rows = connection.Execute(new ExecuteSqlRequest { Sql = "create my_table (id int64 primary key)" }); Assert.That(rows.Next(), Is.Null); Assert.That(rows.UpdateCount, Is.EqualTo(-1L)); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); - Assert.That(_fixture.DatabaseAdminMock.Requests.OfType().Count(), Is.EqualTo(1)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); + Assert.That(Fixture.DatabaseAdminMock.Requests.OfType().Count(), Is.EqualTo(1)); } [Test] - public void TestExecuteClientSideStatement() + public void TestExecuteClientSideStatement([Values] LibType libType) { - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); using (var rows = connection.Execute(new ExecuteSqlRequest { Sql = "show variable retry_aborts_internally" })) { diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/TransactionTests.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/TransactionTests.cs index 0c55f56c..010fe5bd 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/TransactionTests.cs +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/TransactionTests.cs @@ -14,66 +14,47 @@ using Google.Cloud.Spanner.V1; using Google.Cloud.SpannerLib.MockServer; -using Google.Cloud.SpannerLib.Native.Impl; using Google.Protobuf.WellKnownTypes; using Google.Rpc; namespace Google.Cloud.SpannerLib.Tests; -public class TransactionTests +public class TransactionTests : AbstractMockServerTests { - private readonly ISpannerLib _spannerLib = new SharedLibSpanner(); - - private SpannerMockServerFixture _fixture; - - private string ConnectionString => $"{_fixture.Host}:{_fixture.Port}/projects/p1/instances/i1/databases/d1;UsePlainText=true"; - - [SetUp] - public void Setup() - { - _fixture = new SpannerMockServerFixture(); - } - - [TearDown] - public void Teardown() - { - _fixture.Dispose(); - } - [Test] - public void TestBeginAndCommit() + public void TestBeginAndCommit([Values] LibType libType) { - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); connection.BeginTransaction(new TransactionOptions()); connection.Commit(); // TODO: The library should take a shortcut and just skip committing empty transactions. - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); } [Test] - public void TestBeginAndRollback() + public void TestBeginAndRollback([Values] LibType libType) { - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); connection.BeginTransaction(new TransactionOptions()); connection.Rollback(); // An empty transaction that is rolled back should be a no-op. - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); } [Test] - public void TestReadWriteTransaction() + public void TestReadWriteTransaction([Values] LibType libType) { var updateSql = "update my_table set value=@value where id=@id"; - _fixture.SpannerMock.AddOrUpdateStatementResult(updateSql, StatementResult.CreateUpdateCount(1)); + Fixture.SpannerMock.AddOrUpdateStatementResult(updateSql, StatementResult.CreateUpdateCount(1)); - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); connection.BeginTransaction(new TransactionOptions()); @@ -98,22 +79,22 @@ public void TestReadWriteTransaction() // There should be no BeginTransaction requests, as the transaction start is inlined with the // first statement. - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); - var request = _fixture.SpannerMock.Requests.OfType().Single(); + var request = Fixture.SpannerMock.Requests.OfType().Single(); Assert.That(request.Transaction?.Begin?.ReadWrite, Is.Not.Null); } [Test] - public void TestReadOnlyTransaction() + public void TestReadOnlyTransaction([Values] LibType libType) { var numRows = 5; var sql = "select * from random"; - _fixture.SpannerMock.AddOrUpdateStatementResult(sql, StatementResult.CreateQuery(RandomResultSetGenerator.Generate(numRows))); + Fixture.SpannerMock.AddOrUpdateStatementResult(sql, StatementResult.CreateQuery(RandomResultSetGenerator.Generate(numRows))); - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); connection.BeginTransaction(new TransactionOptions { @@ -135,18 +116,18 @@ public void TestReadOnlyTransaction() // There should be no BeginTransaction requests, as the transaction start is inlined with the // first statement. - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); - var request = _fixture.SpannerMock.Requests.OfType().Single(); + var request = Fixture.SpannerMock.Requests.OfType().Single(); Assert.That(request.Transaction?.Begin?.ReadOnly, Is.Not.Null); } [Test] - public void TestBeginTwice() + public void TestBeginTwice([Values] LibType libType) { - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); // Try to start two transactions on a connection. connection.BeginTransaction(new TransactionOptions()); diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/spannerlib-dotnet-tests.csproj b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/spannerlib-dotnet-tests.csproj index 7ff1583e..0fb199a0 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/spannerlib-dotnet-tests.csproj +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/spannerlib-dotnet-tests.csproj @@ -11,6 +11,7 @@ + @@ -22,6 +23,7 @@ + diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet.sln b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet.sln index 9c030840..c12c60ca 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet.sln +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet.sln @@ -10,6 +10,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "spannerlib-dotnet-tests", " EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "spannerlib-dotnet-mockserver", "spannerlib-dotnet-mockserver\spannerlib-dotnet-mockserver.csproj", "{218C7FF7-84C7-4415-ABF8-69C5D7FCB6D9}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "spannerlib-dotnet-grpc-server", "spannerlib-dotnet-grpc-server\spannerlib-dotnet-grpc-server.csproj", "{331CF599-8892-46E5-81A3-25793A6BABA8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "spannerlib-dotnet-grpc-tests", "spannerlib-dotnet-grpc-tests\spannerlib-dotnet-grpc-tests.csproj", "{4B345CB2-82D5-41BC-80FD-D7EC8E8BF679}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "spannerlib-dotnet-grpc-impl", "spannerlib-dotnet-grpc-impl\spannerlib-dotnet-grpc-impl.csproj", "{60403079-D584-4CB9-AAB7-7AC7FF39BEBE}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "spannerlib-dotnet-grpc-v1", "spannerlib-dotnet-grpc-v1\spannerlib-dotnet-grpc-v1.csproj", "{C2538D0C-6544-4B44-88A7-02517B786FFD}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -36,5 +44,21 @@ Global {218C7FF7-84C7-4415-ABF8-69C5D7FCB6D9}.Debug|Any CPU.Build.0 = Debug|Any CPU {218C7FF7-84C7-4415-ABF8-69C5D7FCB6D9}.Release|Any CPU.ActiveCfg = Release|Any CPU {218C7FF7-84C7-4415-ABF8-69C5D7FCB6D9}.Release|Any CPU.Build.0 = Release|Any CPU + {331CF599-8892-46E5-81A3-25793A6BABA8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {331CF599-8892-46E5-81A3-25793A6BABA8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {331CF599-8892-46E5-81A3-25793A6BABA8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {331CF599-8892-46E5-81A3-25793A6BABA8}.Release|Any CPU.Build.0 = Release|Any CPU + {4B345CB2-82D5-41BC-80FD-D7EC8E8BF679}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4B345CB2-82D5-41BC-80FD-D7EC8E8BF679}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4B345CB2-82D5-41BC-80FD-D7EC8E8BF679}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4B345CB2-82D5-41BC-80FD-D7EC8E8BF679}.Release|Any CPU.Build.0 = Release|Any CPU + {60403079-D584-4CB9-AAB7-7AC7FF39BEBE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {60403079-D584-4CB9-AAB7-7AC7FF39BEBE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {60403079-D584-4CB9-AAB7-7AC7FF39BEBE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {60403079-D584-4CB9-AAB7-7AC7FF39BEBE}.Release|Any CPU.Build.0 = Release|Any CPU + {C2538D0C-6544-4B44-88A7-02517B786FFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C2538D0C-6544-4B44-88A7-02517B786FFD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C2538D0C-6544-4B44-88A7-02517B786FFD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C2538D0C-6544-4B44-88A7-02517B786FFD}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection EndGlobal diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/AbstractLibObject.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/AbstractLibObject.cs index a40850ae..7de9a28d 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/AbstractLibObject.cs +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/AbstractLibObject.cs @@ -13,6 +13,7 @@ // limitations under the License. using System; +using System.Threading.Tasks; namespace Google.Cloud.SpannerLib; @@ -20,7 +21,7 @@ namespace Google.Cloud.SpannerLib; /// This is the base class for all objects that are created by SpannerLib. It implements IDisposable and automatically /// closes the object in SpannerLib when the object is either being closed, disposed, or finalized. /// -public abstract class AbstractLibObject : IDisposable +public abstract class AbstractLibObject : IDisposable, IAsyncDisposable { internal ISpannerLib Spanner { get; } public long Id { get; } @@ -56,7 +57,13 @@ public void Dispose() Dispose(true); GC.SuppressFinalize(this); } - + + public async ValueTask DisposeAsync() + { + await DisposeAsyncCore().ConfigureAwait(false); + GC.SuppressFinalize(this); + } + public void Close() { Dispose(true); @@ -81,10 +88,35 @@ protected virtual void Dispose(bool disposing) _disposed = true; } } + + protected virtual async ValueTask DisposeAsyncCore() + { + if (_disposed) + { + return; + } + try + { + if (Id > 0) + { + await CloseLibObjectAsync(); + } + } + finally + { + _disposed = true; + } + } /// /// CloseLibObject should be implemented by concrete subclasses and call the corresponding Close function in /// SpannerLib. /// protected abstract void CloseLibObject(); + + protected virtual ValueTask CloseLibObjectAsync() + { + CloseLibObject(); + return default; + } } \ No newline at end of file diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/Connection.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/Connection.cs index e3abaad1..1ef9943a 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/Connection.cs +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/Connection.cs @@ -13,6 +13,7 @@ // limitations under the License. using System.Collections.Generic; +using System.Threading; using System.Threading.Tasks; using Google.Cloud.Spanner.V1; @@ -54,6 +55,11 @@ public void BeginTransaction(TransactionOptions transactionOptions) return Spanner.Commit(this); } + public Task CommitAsync(CancellationToken cancellationToken = default) + { + return Spanner.CommitAsync(this, cancellationToken); + } + /// /// Rollbacks the current transaction. /// @@ -62,6 +68,11 @@ public void Rollback() Spanner.Rollback(this); } + public Task RollbackAsync(CancellationToken cancellationToken = default) + { + return Spanner.RollbackAsync(this, cancellationToken); + } + /// /// Writes the given list of mutations to Spanner. If the connection has an active read/write transaction, then the /// mutations will be buffered in the current transaction and sent to Spanner when the transaction is committed. @@ -139,4 +150,9 @@ protected override void CloseLibObject() { Spanner.CloseConnection(this); } + + protected override async ValueTask CloseLibObjectAsync() + { + await Spanner.CloseConnectionAsync(this); + } } diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/ISpannerLib.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/ISpannerLib.cs index c91086ae..5dfd8e48 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/ISpannerLib.cs +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/ISpannerLib.cs @@ -12,6 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. +using System; +using System.Threading; using System.Threading.Tasks; using Google.Cloud.Spanner.V1; using Google.Protobuf.WellKnownTypes; @@ -24,7 +26,7 @@ namespace Google.Cloud.SpannerLib; /// it as a child process and communicating with it through a gRPC API. The classes in this assembly use this generic /// interface to abstract away the underlying communication method. /// -public interface ISpannerLib +public interface ISpannerLib : IDisposable { /// /// RowEncoding is used to specify the format that SpannerLib should use to return row data. @@ -66,6 +68,14 @@ public enum RowEncoding /// /// The connection to close public void CloseConnection(Connection connection); + + /// + /// Closes the given connection. This also closes any open Rows objects of this connection. Any active transaction + /// on the connection is rolled back. + /// + /// The connection to close + /// The cancellation token + public Task CloseConnectionAsync(Connection connection, CancellationToken cancellationToken = default) => Task.Run(() => CloseConnection(connection), cancellationToken); /// /// Writes an array of mutations to Spanner. The mutations are buffered in the current transaction of the given @@ -97,11 +107,12 @@ public enum RowEncoding /// /// The connection to use to execute the SQL statement /// The statement to execute + /// The cancellation token /// /// A Rows object with the results of the statement. The contents of the Rows object depends on the type of SQL /// statement. /// - public Task ExecuteAsync(Connection connection, ExecuteSqlRequest statement); + public Task ExecuteAsync(Connection connection, ExecuteSqlRequest statement, CancellationToken cancellationToken = default); /// /// Executes a batch of DML or DDL statements on Spanner. The batch may not contain a mix of DML and DDL statements. @@ -116,8 +127,9 @@ public enum RowEncoding /// /// The connection to use to execute the batch /// The DML or DDL statements to execute + /// The cancellation token /// The update count per statement. The update count for a DDL statement is -1. - public Task ExecuteBatchAsync(Connection connection, ExecuteBatchDmlRequest statements); + public Task ExecuteBatchAsync(Connection connection, ExecuteBatchDmlRequest statements, CancellationToken cancellationToken = default); /// /// Returns the ResultSetMetadata of a Rows object. This can be used to inspect the type of data that a Rows object @@ -132,8 +144,9 @@ public enum RowEncoding /// contains. /// /// The Rows object to get the metadata of + /// The cancellation token /// The ResultSetMetadata of the given Rows object - public Task MetadataAsync(Rows rows); + public Task MetadataAsync(Rows rows, CancellationToken cancellationToken = default); /// /// Returns the ResultSetStats of a Rows object. This object contains the update count of a DML statement that was @@ -164,8 +177,9 @@ public enum RowEncoding /// The Rows object to return data rows for /// The maximum number of rows to return /// The encoding that should be used for the data rows + /// The cancellation token /// A ListValue with the actual row data, or null if there are no more rows - public Task NextAsync(Rows rows, int numRows, RowEncoding encoding); + public Task NextAsync(Rows rows, int numRows, RowEncoding encoding, CancellationToken cancellationToken = default); /// /// Closes the given Rows object. This releases all resources associated with this statement result. @@ -173,6 +187,13 @@ public enum RowEncoding /// The Rows object to close public void CloseRows(Rows rows); + /// + /// Closes the given Rows object. This releases all resources associated with this statement result. + /// + /// The Rows object to close + /// The cancellation token + public Task CloseRowsAsync(Rows rows, CancellationToken cancellationToken = default) => Task.Run(() => CloseRows(rows), cancellationToken); + /// /// Starts a new transaction on this connection. A connection can have at most one transaction at any time. All /// transactions, including read-only transactions, must be either committed or rolled back. @@ -190,10 +211,30 @@ public enum RowEncoding /// The connection that has the transaction that should be committed /// The CommitResponse of the transaction, or null if it was a read-only transaction public CommitResponse? Commit(Connection connection); + + /// + /// Commits the current transaction on this connection. + /// + /// The connection that has the transaction that should be committed + /// The CommitResponse of the transaction, or null if it was a read-only transaction + /// The cancellation token + public Task CommitAsync(Connection connection, CancellationToken cancellationToken = default); /// /// Rollbacks the current transaction. /// /// The connection that has the transaction that should be rolled back public void Rollback(Connection connection); + + /// + /// Rollbacks the current transaction. + /// + /// The connection that has the transaction that should be rolled back + /// The cancellation token + public Task RollbackAsync(Connection connection, CancellationToken cancellationToken = default); + + void IDisposable.Dispose() + { + // no-op + } } \ No newline at end of file diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/Rows.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/Rows.cs index 72178e6d..8e18b2da 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/Rows.cs +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/Rows.cs @@ -13,6 +13,7 @@ // limitations under the License. using System; +using System.Threading; using System.Threading.Tasks; using Google.Cloud.Spanner.V1; using Google.Protobuf.WellKnownTypes; @@ -29,14 +30,14 @@ public class Rows : AbstractLibObject private ResultSetMetadata? _metadata; - public ResultSetMetadata? Metadata => _metadata ??= Spanner.Metadata(this); + public virtual ResultSetMetadata? Metadata => _metadata ??= Spanner.Metadata(this); private readonly Lazy _stats; /// /// The ResultSetStats of the SQL statement. This is only available once all data rows have been read. /// - private ResultSetStats? Stats => _stats.Value; + protected virtual ResultSetStats? Stats => _stats.Value; /// /// The update count of the SQL statement. This is only available once all data rows have been read. @@ -76,7 +77,7 @@ public Rows(Connection connection, long id, bool initMetadata = true) : base(con /// Returns the next data row from this Rows object. /// /// The next data row or null if there are no more data - public ListValue? Next() + public virtual ListValue? Next() { var res = Spanner.Next(this, 1, ISpannerLib.RowEncoding.Proto); if (res == null && !_stats.IsValueCreated) @@ -91,9 +92,9 @@ public Rows(Connection connection, long id, bool initMetadata = true) : base(con /// Returns the next data row from this Rows object. /// /// The next data row or null if there are no more data - public async Task NextAsync() + public virtual async Task NextAsync(CancellationToken cancellationToken = default) { - return await Spanner.NextAsync(this, 1, ISpannerLib.RowEncoding.Proto); + return await Spanner.NextAsync(this, 1, ISpannerLib.RowEncoding.Proto, cancellationToken); } /// @@ -103,4 +104,10 @@ protected override void CloseLibObject() { Spanner.CloseRows(this); } + + protected override async ValueTask CloseLibObjectAsync() + { + await Spanner.CloseRowsAsync(this); + } + } diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/SpannerException.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/SpannerException.cs index 3acc98d5..bb87ddb3 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/SpannerException.cs +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/SpannerException.cs @@ -14,6 +14,8 @@ using System; using Google.Rpc; +using Grpc.Core; +using Status = Google.Rpc.Status; namespace Google.Cloud.SpannerLib; @@ -24,6 +26,11 @@ namespace Google.Cloud.SpannerLib; /// The status that was returned by SpannerLib public class SpannerException(Status status) : Exception(status.Message) { + public static SpannerException ToSpannerException(RpcException exception) + { + return new SpannerException(new Status { Code = (int) exception.Status.StatusCode, Message = exception.Message }); + } + public Status Status { get; } = status; public Code Code => (Code)Status.Code; diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/GrpcSpannerLibraryImpl.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/GrpcSpannerLibraryImpl.java index ca546179..705ccffe 100644 --- a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/GrpcSpannerLibraryImpl.java +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/GrpcSpannerLibraryImpl.java @@ -41,6 +41,9 @@ import io.grpc.ManagedChannel; import io.grpc.StatusException; import io.grpc.stub.BlockingClientCall; +import java.util.List; +import java.util.concurrent.ThreadLocalRandom; +import java.util.stream.Collectors; /** This implementation communicates with SpannerLib through a gRPC interface. */ public class GrpcSpannerLibraryImpl implements SpannerLibrary { @@ -48,10 +51,26 @@ public class GrpcSpannerLibraryImpl implements SpannerLibrary { private final SpannerLibBlockingV2Stub stub; private final boolean useStreamingRows; + private final List channels; + private final List stubs; + public GrpcSpannerLibraryImpl(Channel channel, boolean useStreamingRows) { this.channel = channel; this.stub = SpannerLibGrpc.newBlockingV2Stub(channel); this.useStreamingRows = useStreamingRows; + + this.channels = null; + this.stubs = null; + } + + public GrpcSpannerLibraryImpl(List channels) { + this.channel = channels.get(0); + this.stub = SpannerLibGrpc.newBlockingV2Stub(channels.get(0)); + this.useStreamingRows = true; + + this.channels = channels; + this.stubs = + channels.stream().map(SpannerLibGrpc::newBlockingV2Stub).collect(Collectors.toList()); } static SpannerLibException toSpannerLibException(StatusException exception) { @@ -86,6 +105,13 @@ private static com.google.cloud.spannerlib.v1.Rows toProto(Rows rows) { @Override public void close() { + if (this.channels != null) { + for (Channel channel : channels) { + if (channel instanceof ManagedChannel) { + ((ManagedChannel) channel).shutdown(); + } + } + } if (this.channel instanceof ManagedChannel) { ((ManagedChannel) this.channel).shutdown(); } @@ -207,6 +233,10 @@ public Rows execute(Connection connection, ExecuteSqlRequest request) { } private Rows executeStreaming(Connection connection, ExecuteSqlRequest request) { + SpannerLibBlockingV2Stub stub = this.stub; + if (stubs != null) { + stub = stubs.get(ThreadLocalRandom.current().nextInt(stubs.size())); + } BlockingClientCall stream = stub.executeStreaming( ExecuteRequest.newBuilder() diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/InfoRequest.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/InfoRequest.java new file mode 100644 index 00000000..787fa695 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/InfoRequest.java @@ -0,0 +1,364 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +/** Protobuf type {@code google.spannerlib.v1.InfoRequest} */ +@com.google.protobuf.Generated +public final class InfoRequest extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spannerlib.v1.InfoRequest) + InfoRequestOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 32, + /* patch= */ 1, + /* suffix= */ "", + InfoRequest.class.getName()); + } + + // Use InfoRequest.newBuilder() to construct. + private InfoRequest(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private InfoRequest() {} + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_InfoRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_InfoRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.InfoRequest.class, + com.google.cloud.spannerlib.v1.InfoRequest.Builder.class); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.cloud.spannerlib.v1.InfoRequest)) { + return super.equals(obj); + } + com.google.cloud.spannerlib.v1.InfoRequest other = + (com.google.cloud.spannerlib.v1.InfoRequest) obj; + + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.cloud.spannerlib.v1.InfoRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.InfoRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.InfoRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.InfoRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.InfoRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.InfoRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.InfoRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.InfoRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.InfoRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.InfoRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.InfoRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.InfoRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.cloud.spannerlib.v1.InfoRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** Protobuf type {@code google.spannerlib.v1.InfoRequest} */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spannerlib.v1.InfoRequest) + com.google.cloud.spannerlib.v1.InfoRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_InfoRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_InfoRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.InfoRequest.class, + com.google.cloud.spannerlib.v1.InfoRequest.Builder.class); + } + + // Construct using com.google.cloud.spannerlib.v1.InfoRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_InfoRequest_descriptor; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.InfoRequest getDefaultInstanceForType() { + return com.google.cloud.spannerlib.v1.InfoRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.InfoRequest build() { + com.google.cloud.spannerlib.v1.InfoRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.InfoRequest buildPartial() { + com.google.cloud.spannerlib.v1.InfoRequest result = + new com.google.cloud.spannerlib.v1.InfoRequest(this); + onBuilt(); + return result; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.cloud.spannerlib.v1.InfoRequest) { + return mergeFrom((com.google.cloud.spannerlib.v1.InfoRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.cloud.spannerlib.v1.InfoRequest other) { + if (other == com.google.cloud.spannerlib.v1.InfoRequest.getDefaultInstance()) return this; + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + // @@protoc_insertion_point(builder_scope:google.spannerlib.v1.InfoRequest) + } + + // @@protoc_insertion_point(class_scope:google.spannerlib.v1.InfoRequest) + private static final com.google.cloud.spannerlib.v1.InfoRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.cloud.spannerlib.v1.InfoRequest(); + } + + public static com.google.cloud.spannerlib.v1.InfoRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public InfoRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.InfoRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/InfoRequestOrBuilder.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/InfoRequestOrBuilder.java new file mode 100644 index 00000000..40f8f103 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/InfoRequestOrBuilder.java @@ -0,0 +1,12 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +@com.google.protobuf.Generated +public interface InfoRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spannerlib.v1.InfoRequest) + com.google.protobuf.MessageOrBuilder {} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/InfoResponse.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/InfoResponse.java new file mode 100644 index 00000000..b7dc7f72 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/InfoResponse.java @@ -0,0 +1,522 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +/** Protobuf type {@code google.spannerlib.v1.InfoResponse} */ +@com.google.protobuf.Generated +public final class InfoResponse extends com.google.protobuf.GeneratedMessage + implements + // @@protoc_insertion_point(message_implements:google.spannerlib.v1.InfoResponse) + InfoResponseOrBuilder { + private static final long serialVersionUID = 0L; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 32, + /* patch= */ 1, + /* suffix= */ "", + InfoResponse.class.getName()); + } + + // Use InfoResponse.newBuilder() to construct. + private InfoResponse(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + + private InfoResponse() { + version_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_InfoResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_InfoResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.InfoResponse.class, + com.google.cloud.spannerlib.v1.InfoResponse.Builder.class); + } + + public static final int VERSION_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object version_ = ""; + + /** + * string version = 1; + * + * @return The version. + */ + @java.lang.Override + public java.lang.String getVersion() { + java.lang.Object ref = version_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + version_ = s; + return s; + } + } + + /** + * string version = 1; + * + * @return The bytes for version. + */ + @java.lang.Override + public com.google.protobuf.ByteString getVersionBytes() { + java.lang.Object ref = version_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + version_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(version_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, version_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(version_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, version_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.cloud.spannerlib.v1.InfoResponse)) { + return super.equals(obj); + } + com.google.cloud.spannerlib.v1.InfoResponse other = + (com.google.cloud.spannerlib.v1.InfoResponse) obj; + + if (!getVersion().equals(other.getVersion())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + VERSION_FIELD_NUMBER; + hash = (53 * hash) + getVersion().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.cloud.spannerlib.v1.InfoResponse parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.InfoResponse parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.InfoResponse parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.InfoResponse parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.InfoResponse parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.cloud.spannerlib.v1.InfoResponse parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.InfoResponse parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.InfoResponse parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.InfoResponse parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.InfoResponse parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.cloud.spannerlib.v1.InfoResponse parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.google.cloud.spannerlib.v1.InfoResponse parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.cloud.spannerlib.v1.InfoResponse prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** Protobuf type {@code google.spannerlib.v1.InfoResponse} */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spannerlib.v1.InfoResponse) + com.google.cloud.spannerlib.v1.InfoResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_InfoResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_InfoResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.cloud.spannerlib.v1.InfoResponse.class, + com.google.cloud.spannerlib.v1.InfoResponse.Builder.class); + } + + // Construct using com.google.cloud.spannerlib.v1.InfoResponse.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + version_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.cloud.spannerlib.v1.SpannerLibProto + .internal_static_google_spannerlib_v1_InfoResponse_descriptor; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.InfoResponse getDefaultInstanceForType() { + return com.google.cloud.spannerlib.v1.InfoResponse.getDefaultInstance(); + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.InfoResponse build() { + com.google.cloud.spannerlib.v1.InfoResponse result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.InfoResponse buildPartial() { + com.google.cloud.spannerlib.v1.InfoResponse result = + new com.google.cloud.spannerlib.v1.InfoResponse(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.cloud.spannerlib.v1.InfoResponse result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.version_ = version_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.cloud.spannerlib.v1.InfoResponse) { + return mergeFrom((com.google.cloud.spannerlib.v1.InfoResponse) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.cloud.spannerlib.v1.InfoResponse other) { + if (other == com.google.cloud.spannerlib.v1.InfoResponse.getDefaultInstance()) return this; + if (!other.getVersion().isEmpty()) { + version_ = other.version_; + bitField0_ |= 0x00000001; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + version_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object version_ = ""; + + /** + * string version = 1; + * + * @return The version. + */ + public java.lang.String getVersion() { + java.lang.Object ref = version_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + version_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * string version = 1; + * + * @return The bytes for version. + */ + public com.google.protobuf.ByteString getVersionBytes() { + java.lang.Object ref = version_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + version_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * string version = 1; + * + * @param value The version to set. + * @return This builder for chaining. + */ + public Builder setVersion(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + version_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * string version = 1; + * + * @return This builder for chaining. + */ + public Builder clearVersion() { + version_ = getDefaultInstance().getVersion(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * string version = 1; + * + * @param value The bytes for version to set. + * @return This builder for chaining. + */ + public Builder setVersionBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + version_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:google.spannerlib.v1.InfoResponse) + } + + // @@protoc_insertion_point(class_scope:google.spannerlib.v1.InfoResponse) + private static final com.google.cloud.spannerlib.v1.InfoResponse DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.cloud.spannerlib.v1.InfoResponse(); + } + + public static com.google.cloud.spannerlib.v1.InfoResponse getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public InfoResponse parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.cloud.spannerlib.v1.InfoResponse getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/InfoResponseOrBuilder.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/InfoResponseOrBuilder.java new file mode 100644 index 00000000..c9698fbd --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/InfoResponseOrBuilder.java @@ -0,0 +1,27 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: google/spannerlib/v1/spannerlib.proto +// Protobuf Java Version: 4.32.1 + +package com.google.cloud.spannerlib.v1; + +@com.google.protobuf.Generated +public interface InfoResponseOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spannerlib.v1.InfoResponse) + com.google.protobuf.MessageOrBuilder { + + /** + * string version = 1; + * + * @return The version. + */ + java.lang.String getVersion(); + + /** + * string version = 1; + * + * @return The bytes for version. + */ + com.google.protobuf.ByteString getVersionBytes(); +} diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/SpannerLibGrpc.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/SpannerLibGrpc.java index 939d2530..643b7cf2 100644 --- a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/SpannerLibGrpc.java +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/SpannerLibGrpc.java @@ -11,6 +11,47 @@ private SpannerLibGrpc() {} public static final java.lang.String SERVICE_NAME = "google.spannerlib.v1.SpannerLib"; // Static method descriptors that strictly reflect the proto. + private static volatile io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.InfoRequest, com.google.cloud.spannerlib.v1.InfoResponse> + getInfoMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "Info", + requestType = com.google.cloud.spannerlib.v1.InfoRequest.class, + responseType = com.google.cloud.spannerlib.v1.InfoResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.InfoRequest, com.google.cloud.spannerlib.v1.InfoResponse> + getInfoMethod() { + io.grpc.MethodDescriptor< + com.google.cloud.spannerlib.v1.InfoRequest, com.google.cloud.spannerlib.v1.InfoResponse> + getInfoMethod; + if ((getInfoMethod = SpannerLibGrpc.getInfoMethod) == null) { + synchronized (SpannerLibGrpc.class) { + if ((getInfoMethod = SpannerLibGrpc.getInfoMethod) == null) { + SpannerLibGrpc.getInfoMethod = + getInfoMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "Info")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.cloud.spannerlib.v1.InfoRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.cloud.spannerlib.v1.InfoResponse.getDefaultInstance())) + .setSchemaDescriptor(new SpannerLibMethodDescriptorSupplier("Info")) + .build(); + } + } + } + return getInfoMethod; + } + private static volatile io.grpc.MethodDescriptor< com.google.cloud.spannerlib.v1.CreatePoolRequest, com.google.cloud.spannerlib.v1.Pool> getCreatePoolMethod; @@ -735,6 +776,13 @@ public SpannerLibFutureStub newStub( /** */ public interface AsyncService { + /** */ + default void info( + com.google.cloud.spannerlib.v1.InfoRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getInfoMethod(), responseObserver); + } + /** */ default void createPool( com.google.cloud.spannerlib.v1.CreatePoolRequest request, @@ -878,6 +926,14 @@ protected SpannerLibStub build(io.grpc.Channel channel, io.grpc.CallOptions call return new SpannerLibStub(channel, callOptions); } + /** */ + public void info( + com.google.cloud.spannerlib.v1.InfoRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getInfoMethod(), getCallOptions()), request, responseObserver); + } + /** */ public void createPool( com.google.cloud.spannerlib.v1.CreatePoolRequest request, @@ -1036,6 +1092,13 @@ protected SpannerLibBlockingV2Stub build( return new SpannerLibBlockingV2Stub(channel, callOptions); } + /** */ + public com.google.cloud.spannerlib.v1.InfoResponse info( + com.google.cloud.spannerlib.v1.InfoRequest request) throws io.grpc.StatusException { + return io.grpc.stub.ClientCalls.blockingV2UnaryCall( + getChannel(), getInfoMethod(), getCallOptions(), request); + } + /** */ public com.google.cloud.spannerlib.v1.Pool createPool( com.google.cloud.spannerlib.v1.CreatePoolRequest request) throws io.grpc.StatusException { @@ -1169,6 +1232,13 @@ protected SpannerLibBlockingStub build( return new SpannerLibBlockingStub(channel, callOptions); } + /** */ + public com.google.cloud.spannerlib.v1.InfoResponse info( + com.google.cloud.spannerlib.v1.InfoRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getInfoMethod(), getCallOptions(), request); + } + /** */ public com.google.cloud.spannerlib.v1.Pool createPool( com.google.cloud.spannerlib.v1.CreatePoolRequest request) { @@ -1283,6 +1353,14 @@ protected SpannerLibFutureStub build(io.grpc.Channel channel, io.grpc.CallOption return new SpannerLibFutureStub(channel, callOptions); } + /** */ + public com.google.common.util.concurrent.ListenableFuture< + com.google.cloud.spannerlib.v1.InfoResponse> + info(com.google.cloud.spannerlib.v1.InfoRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getInfoMethod(), getCallOptions()), request); + } + /** */ public com.google.common.util.concurrent.ListenableFuture createPool(com.google.cloud.spannerlib.v1.CreatePoolRequest request) { @@ -1385,22 +1463,23 @@ public com.google.common.util.concurrent.ListenableFuture implements io.grpc.stub.ServerCalls.UnaryMethod, @@ -1419,6 +1498,12 @@ private static final class MethodHandlers @java.lang.SuppressWarnings("unchecked") public void invoke(Req request, io.grpc.stub.StreamObserver responseObserver) { switch (methodId) { + case METHODID_INFO: + serviceImpl.info( + (com.google.cloud.spannerlib.v1.InfoRequest) request, + (io.grpc.stub.StreamObserver) + responseObserver); + break; case METHODID_CREATE_POOL: serviceImpl.createPool( (com.google.cloud.spannerlib.v1.CreatePoolRequest) request, @@ -1522,6 +1607,12 @@ public io.grpc.stub.StreamObserver invoke( public static final io.grpc.ServerServiceDefinition bindService(AsyncService service) { return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor()) + .addMethod( + getInfoMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.cloud.spannerlib.v1.InfoRequest, + com.google.cloud.spannerlib.v1.InfoResponse>(service, METHODID_INFO))) .addMethod( getCreatePoolMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall( @@ -1670,6 +1761,7 @@ public static io.grpc.ServiceDescriptor getServiceDescriptor() { result = io.grpc.ServiceDescriptor.newBuilder(SERVICE_NAME) .setSchemaDescriptor(new SpannerLibFileDescriptorSupplier()) + .addMethod(getInfoMethod()) .addMethod(getCreatePoolMethod()) .addMethod(getClosePoolMethod()) .addMethod(getCreateConnectionMethod()) diff --git a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/SpannerLibProto.java b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/SpannerLibProto.java index a1e78d92..37ae2f12 100644 --- a/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/SpannerLibProto.java +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/SpannerLibProto.java @@ -25,6 +25,14 @@ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry r registerAllExtensions((com.google.protobuf.ExtensionRegistryLite) registry); } + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spannerlib_v1_InfoRequest_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spannerlib_v1_InfoRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spannerlib_v1_InfoResponse_descriptor; + static final com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_google_spannerlib_v1_InfoResponse_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spannerlib_v1_CreatePoolRequest_descriptor; static final com.google.protobuf.GeneratedMessage.FieldAccessorTable @@ -100,87 +108,91 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + "oto\032\034google/protobuf/struct.proto\032\"googl" + "e/spanner/v1/result_set.proto\032\037google/sp" + "anner/v1/spanner.proto\032#google/spanner/v" - + "1/transaction.proto\"3\n\021CreatePoolRequest" - + "\022\036\n\021connection_string\030\001 \001(\tB\003\340A\002\"H\n\027Crea" - + "teConnectionRequest\022-\n\004pool\030\001 \001(\0132\032.goog" - + "le.spannerlib.v1.PoolB\003\340A\002\"\223\001\n\016ExecuteRe" - + "quest\0229\n\nconnection\030\001 \001(\0132 .google.spann" - + "erlib.v1.ConnectionB\003\340A\002\022F\n\023execute_sql_" - + "request\030\002 \001(\0132$.google.spanner.v1.Execut" - + "eSqlRequestB\003\340A\002\"\243\001\n\023ExecuteBatchRequest" - + "\0229\n\nconnection\030\001 \001(\0132 .google.spannerlib" - + ".v1.ConnectionB\003\340A\002\022Q\n\031execute_batch_dml" - + "_request\030\002 \001(\0132).google.spanner.v1.Execu" - + "teBatchDmlRequestB\003\340A\002\"\235\001\n\027BeginTransact" - + "ionRequest\0229\n\nconnection\030\001 \001(\0132 .google." - + "spannerlib.v1.ConnectionB\003\340A\002\022G\n\023transac" - + "tion_options\030\002 \001(\0132%.google.spanner.v1.T" - + "ransactionOptionsB\003\340A\002\"\236\001\n\025WriteMutation" - + "sRequest\0229\n\nconnection\030\001 \001(\0132 .google.sp" - + "annerlib.v1.ConnectionB\003\340A\002\022J\n\tmutations" - + "\030\002 \001(\01322.google.spanner.v1.BatchWriteReq" - + "uest.MutationGroupB\003\340A\002\"\027\n\004Pool\022\017\n\002id\030\001 " - + "\001(\003B\003\340A\002\"L\n\nConnection\022-\n\004pool\030\001 \001(\0132\032.g" - + "oogle.spannerlib.v1.PoolB\003\340A\002\022\017\n\002id\030\002 \001(" - + "\003B\003\340A\002\"R\n\004Rows\0229\n\nconnection\030\001 \001(\0132 .goo" - + "gle.spannerlib.v1.ConnectionB\003\340A\002\022\017\n\002id\030" - + "\002 \001(\003B\003\340A\002\"j\n\013NextRequest\022-\n\004rows\030\001 \001(\0132" - + "\032.google.spannerlib.v1.RowsB\003\340A\002\022\025\n\010num_" - + "rows\030\002 \001(\003B\003\340A\002\022\025\n\010encoding\030\003 \001(\003B\003\340A\002\"\321" - + "\001\n\007RowData\022-\n\004rows\030\001 \001(\0132\032.google.spanne" - + "rlib.v1.RowsB\003\340A\002\0226\n\010metadata\030\002 \001(\0132$.go" - + "ogle.spanner.v1.ResultSetMetadata\022-\n\004dat" - + "a\030\003 \003(\0132\032.google.protobuf.ListValueB\003\340A\002" - + "\0220\n\005stats\030\004 \001(\0132!.google.spanner.v1.Resu" - + "ltSetStats\"@\n\017MetadataRequest\022-\n\004rows\030\001 " - + "\001(\0132\032.google.spannerlib.v1.RowsB\003\340A\002\"F\n\025" - + "ResultSetStatsRequest\022-\n\004rows\030\001 \001(\0132\032.go" - + "ogle.spannerlib.v1.RowsB\003\340A\002\"e\n\027Connecti" - + "onStreamRequest\022?\n\017execute_request\030\001 \001(\013" - + "2$.google.spannerlib.v1.ExecuteRequestH\000" - + "B\t\n\007request\"Z\n\030ConnectionStreamResponse\022" - + "2\n\003row\030\001 \001(\0132#.google.spanner.v1.Partial" - + "ResultSetH\000B\n\n\010response2\361\n\n\nSpannerLib\022S" - + "\n\nCreatePool\022\'.google.spannerlib.v1.Crea" - + "tePoolRequest\032\032.google.spannerlib.v1.Poo" - + "l\"\000\022A\n\tClosePool\022\032.google.spannerlib.v1." - + "Pool\032\026.google.protobuf.Empty\"\000\022e\n\020Create" - + "Connection\022-.google.spannerlib.v1.Create" - + "ConnectionRequest\032 .google.spannerlib.v1" - + ".Connection\"\000\022M\n\017CloseConnection\022 .googl" - + "e.spannerlib.v1.Connection\032\026.google.prot" - + "obuf.Empty\"\000\022M\n\007Execute\022$.google.spanner" - + "lib.v1.ExecuteRequest\032\032.google.spannerli" - + "b.v1.Rows\"\000\022[\n\020ExecuteStreaming\022$.google" - + ".spannerlib.v1.ExecuteRequest\032\035.google.s" - + "pannerlib.v1.RowData\"\0000\001\022g\n\014ExecuteBatch" - + "\022).google.spannerlib.v1.ExecuteBatchRequ" - + "est\032*.google.spanner.v1.ExecuteBatchDmlR" - + "esponse\"\000\022N\n\010Metadata\022\032.google.spannerli" - + "b.v1.Rows\032$.google.spanner.v1.ResultSetM" - + "etadata\"\000\022G\n\004Next\022!.google.spannerlib.v1" - + ".NextRequest\032\032.google.protobuf.ListValue" - + "\"\000\022Q\n\016ResultSetStats\022\032.google.spannerlib" - + ".v1.Rows\032!.google.spanner.v1.ResultSetSt" - + "ats\"\000\022A\n\tCloseRows\022\032.google.spannerlib.v" - + "1.Rows\032\026.google.protobuf.Empty\"\000\022[\n\020Begi" - + "nTransaction\022-.google.spannerlib.v1.Begi" - + "nTransactionRequest\032\026.google.protobuf.Em" - + "pty\"\000\022O\n\006Commit\022 .google.spannerlib.v1.C" - + "onnection\032!.google.spanner.v1.CommitResp" - + "onse\"\000\022F\n\010Rollback\022 .google.spannerlib.v" - + "1.Connection\032\026.google.protobuf.Empty\"\000\022b" - + "\n\016WriteMutations\022+.google.spannerlib.v1." - + "WriteMutationsRequest\032!.google.spanner.v" - + "1.CommitResponse\"\000\022w\n\020ConnectionStream\022-" - + ".google.spannerlib.v1.ConnectionStreamRe" - + "quest\032..google.spannerlib.v1.ConnectionS" - + "treamResponse\"\000(\0010\001B\315\001\n\036com.google.cloud" - + ".spannerlib.v1B\017SpannerLibProtoP\001Z>cloud" - + ".google.com/go/spannerlib/apiv1/spannerl" - + "ibpb;spannerlibpb\252\002\032Google.Cloud.Spanner" - + "Lib.V1\312\002\032Google\\Cloud\\SpannerLib\\V1\352\002\035Go" - + "ogle::Cloud::SpannerLib::V1b\006proto3" + + "1/transaction.proto\"\r\n\013InfoRequest\"\037\n\014In" + + "foResponse\022\017\n\007version\030\001 \001(\t\"3\n\021CreatePoo" + + "lRequest\022\036\n\021connection_string\030\001 \001(\tB\003\340A\002" + + "\"H\n\027CreateConnectionRequest\022-\n\004pool\030\001 \001(" + + "\0132\032.google.spannerlib.v1.PoolB\003\340A\002\"\223\001\n\016E" + + "xecuteRequest\0229\n\nconnection\030\001 \001(\0132 .goog" + + "le.spannerlib.v1.ConnectionB\003\340A\002\022F\n\023exec" + + "ute_sql_request\030\002 \001(\0132$.google.spanner.v" + + "1.ExecuteSqlRequestB\003\340A\002\"\243\001\n\023ExecuteBatc" + + "hRequest\0229\n\nconnection\030\001 \001(\0132 .google.sp" + + "annerlib.v1.ConnectionB\003\340A\002\022Q\n\031execute_b" + + "atch_dml_request\030\002 \001(\0132).google.spanner." + + "v1.ExecuteBatchDmlRequestB\003\340A\002\"\235\001\n\027Begin" + + "TransactionRequest\0229\n\nconnection\030\001 \001(\0132 " + + ".google.spannerlib.v1.ConnectionB\003\340A\002\022G\n" + + "\023transaction_options\030\002 \001(\0132%.google.span" + + "ner.v1.TransactionOptionsB\003\340A\002\"\236\001\n\025Write" + + "MutationsRequest\0229\n\nconnection\030\001 \001(\0132 .g" + + "oogle.spannerlib.v1.ConnectionB\003\340A\002\022J\n\tm" + + "utations\030\002 \001(\01322.google.spanner.v1.Batch" + + "WriteRequest.MutationGroupB\003\340A\002\"\027\n\004Pool\022" + + "\017\n\002id\030\001 \001(\003B\003\340A\002\"L\n\nConnection\022-\n\004pool\030\001" + + " \001(\0132\032.google.spannerlib.v1.PoolB\003\340A\002\022\017\n" + + "\002id\030\002 \001(\003B\003\340A\002\"R\n\004Rows\0229\n\nconnection\030\001 \001" + + "(\0132 .google.spannerlib.v1.ConnectionB\003\340A" + + "\002\022\017\n\002id\030\002 \001(\003B\003\340A\002\"j\n\013NextRequest\022-\n\004row" + + "s\030\001 \001(\0132\032.google.spannerlib.v1.RowsB\003\340A\002" + + "\022\025\n\010num_rows\030\002 \001(\003B\003\340A\002\022\025\n\010encoding\030\003 \001(" + + "\003B\003\340A\002\"\321\001\n\007RowData\022-\n\004rows\030\001 \001(\0132\032.googl" + + "e.spannerlib.v1.RowsB\003\340A\002\0226\n\010metadata\030\002 " + + "\001(\0132$.google.spanner.v1.ResultSetMetadat" + + "a\022-\n\004data\030\003 \003(\0132\032.google.protobuf.ListVa" + + "lueB\003\340A\002\0220\n\005stats\030\004 \001(\0132!.google.spanner" + + ".v1.ResultSetStats\"@\n\017MetadataRequest\022-\n" + + "\004rows\030\001 \001(\0132\032.google.spannerlib.v1.RowsB" + + "\003\340A\002\"F\n\025ResultSetStatsRequest\022-\n\004rows\030\001 " + + "\001(\0132\032.google.spannerlib.v1.RowsB\003\340A\002\"e\n\027" + + "ConnectionStreamRequest\022?\n\017execute_reque" + + "st\030\001 \001(\0132$.google.spannerlib.v1.ExecuteR" + + "equestH\000B\t\n\007request\"Z\n\030ConnectionStreamR" + + "esponse\0222\n\003row\030\001 \001(\0132#.google.spanner.v1" + + ".PartialResultSetH\000B\n\n\010response2\302\013\n\nSpan" + + "nerLib\022O\n\004Info\022!.google.spannerlib.v1.In" + + "foRequest\032\".google.spannerlib.v1.InfoRes" + + "ponse\"\000\022S\n\nCreatePool\022\'.google.spannerli" + + "b.v1.CreatePoolRequest\032\032.google.spannerl" + + "ib.v1.Pool\"\000\022A\n\tClosePool\022\032.google.spann" + + "erlib.v1.Pool\032\026.google.protobuf.Empty\"\000\022" + + "e\n\020CreateConnection\022-.google.spannerlib." + + "v1.CreateConnectionRequest\032 .google.span" + + "nerlib.v1.Connection\"\000\022M\n\017CloseConnectio" + + "n\022 .google.spannerlib.v1.Connection\032\026.go" + + "ogle.protobuf.Empty\"\000\022M\n\007Execute\022$.googl" + + "e.spannerlib.v1.ExecuteRequest\032\032.google." + + "spannerlib.v1.Rows\"\000\022[\n\020ExecuteStreaming" + + "\022$.google.spannerlib.v1.ExecuteRequest\032\035" + + ".google.spannerlib.v1.RowData\"\0000\001\022g\n\014Exe" + + "cuteBatch\022).google.spannerlib.v1.Execute" + + "BatchRequest\032*.google.spanner.v1.Execute" + + "BatchDmlResponse\"\000\022N\n\010Metadata\022\032.google." + + "spannerlib.v1.Rows\032$.google.spanner.v1.R" + + "esultSetMetadata\"\000\022G\n\004Next\022!.google.span" + + "nerlib.v1.NextRequest\032\032.google.protobuf." + + "ListValue\"\000\022Q\n\016ResultSetStats\022\032.google.s" + + "pannerlib.v1.Rows\032!.google.spanner.v1.Re" + + "sultSetStats\"\000\022A\n\tCloseRows\022\032.google.spa" + + "nnerlib.v1.Rows\032\026.google.protobuf.Empty\"" + + "\000\022[\n\020BeginTransaction\022-.google.spannerli" + + "b.v1.BeginTransactionRequest\032\026.google.pr" + + "otobuf.Empty\"\000\022O\n\006Commit\022 .google.spanne" + + "rlib.v1.Connection\032!.google.spanner.v1.C" + + "ommitResponse\"\000\022F\n\010Rollback\022 .google.spa" + + "nnerlib.v1.Connection\032\026.google.protobuf." + + "Empty\"\000\022b\n\016WriteMutations\022+.google.spann" + + "erlib.v1.WriteMutationsRequest\032!.google." + + "spanner.v1.CommitResponse\"\000\022w\n\020Connectio" + + "nStream\022-.google.spannerlib.v1.Connectio" + + "nStreamRequest\032..google.spannerlib.v1.Co" + + "nnectionStreamResponse\"\000(\0010\001B\315\001\n\036com.goo" + + "gle.cloud.spannerlib.v1B\017SpannerLibProto" + + "P\001Z>cloud.google.com/go/spannerlib/apiv1" + + "/spannerlibpb;spannerlibpb\252\002\032Google.Clou" + + "d.SpannerLib.V1\312\002\032Google\\Cloud\\SpannerLi" + + "b\\V1\352\002\035Google::Cloud::SpannerLib::V1b\006pr" + + "oto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( @@ -193,8 +205,21 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { com.google.spanner.v1.SpannerProto.getDescriptor(), com.google.spanner.v1.TransactionProto.getDescriptor(), }); - internal_static_google_spannerlib_v1_CreatePoolRequest_descriptor = + internal_static_google_spannerlib_v1_InfoRequest_descriptor = getDescriptor().getMessageTypes().get(0); + internal_static_google_spannerlib_v1_InfoRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spannerlib_v1_InfoRequest_descriptor, new java.lang.String[] {}); + internal_static_google_spannerlib_v1_InfoResponse_descriptor = + getDescriptor().getMessageTypes().get(1); + internal_static_google_spannerlib_v1_InfoResponse_fieldAccessorTable = + new com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_google_spannerlib_v1_InfoResponse_descriptor, + new java.lang.String[] { + "Version", + }); + internal_static_google_spannerlib_v1_CreatePoolRequest_descriptor = + getDescriptor().getMessageTypes().get(2); internal_static_google_spannerlib_v1_CreatePoolRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spannerlib_v1_CreatePoolRequest_descriptor, @@ -202,7 +227,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "ConnectionString", }); internal_static_google_spannerlib_v1_CreateConnectionRequest_descriptor = - getDescriptor().getMessageTypes().get(1); + getDescriptor().getMessageTypes().get(3); internal_static_google_spannerlib_v1_CreateConnectionRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spannerlib_v1_CreateConnectionRequest_descriptor, @@ -210,7 +235,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "Pool", }); internal_static_google_spannerlib_v1_ExecuteRequest_descriptor = - getDescriptor().getMessageTypes().get(2); + getDescriptor().getMessageTypes().get(4); internal_static_google_spannerlib_v1_ExecuteRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spannerlib_v1_ExecuteRequest_descriptor, @@ -218,7 +243,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "Connection", "ExecuteSqlRequest", }); internal_static_google_spannerlib_v1_ExecuteBatchRequest_descriptor = - getDescriptor().getMessageTypes().get(3); + getDescriptor().getMessageTypes().get(5); internal_static_google_spannerlib_v1_ExecuteBatchRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spannerlib_v1_ExecuteBatchRequest_descriptor, @@ -226,7 +251,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "Connection", "ExecuteBatchDmlRequest", }); internal_static_google_spannerlib_v1_BeginTransactionRequest_descriptor = - getDescriptor().getMessageTypes().get(4); + getDescriptor().getMessageTypes().get(6); internal_static_google_spannerlib_v1_BeginTransactionRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spannerlib_v1_BeginTransactionRequest_descriptor, @@ -234,14 +259,14 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "Connection", "TransactionOptions", }); internal_static_google_spannerlib_v1_WriteMutationsRequest_descriptor = - getDescriptor().getMessageTypes().get(5); + getDescriptor().getMessageTypes().get(7); internal_static_google_spannerlib_v1_WriteMutationsRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spannerlib_v1_WriteMutationsRequest_descriptor, new java.lang.String[] { "Connection", "Mutations", }); - internal_static_google_spannerlib_v1_Pool_descriptor = getDescriptor().getMessageTypes().get(6); + internal_static_google_spannerlib_v1_Pool_descriptor = getDescriptor().getMessageTypes().get(8); internal_static_google_spannerlib_v1_Pool_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spannerlib_v1_Pool_descriptor, @@ -249,14 +274,15 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "Id", }); internal_static_google_spannerlib_v1_Connection_descriptor = - getDescriptor().getMessageTypes().get(7); + getDescriptor().getMessageTypes().get(9); internal_static_google_spannerlib_v1_Connection_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spannerlib_v1_Connection_descriptor, new java.lang.String[] { "Pool", "Id", }); - internal_static_google_spannerlib_v1_Rows_descriptor = getDescriptor().getMessageTypes().get(8); + internal_static_google_spannerlib_v1_Rows_descriptor = + getDescriptor().getMessageTypes().get(10); internal_static_google_spannerlib_v1_Rows_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spannerlib_v1_Rows_descriptor, @@ -264,7 +290,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "Connection", "Id", }); internal_static_google_spannerlib_v1_NextRequest_descriptor = - getDescriptor().getMessageTypes().get(9); + getDescriptor().getMessageTypes().get(11); internal_static_google_spannerlib_v1_NextRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spannerlib_v1_NextRequest_descriptor, @@ -272,7 +298,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "Rows", "NumRows", "Encoding", }); internal_static_google_spannerlib_v1_RowData_descriptor = - getDescriptor().getMessageTypes().get(10); + getDescriptor().getMessageTypes().get(12); internal_static_google_spannerlib_v1_RowData_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spannerlib_v1_RowData_descriptor, @@ -280,7 +306,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "Rows", "Metadata", "Data", "Stats", }); internal_static_google_spannerlib_v1_MetadataRequest_descriptor = - getDescriptor().getMessageTypes().get(11); + getDescriptor().getMessageTypes().get(13); internal_static_google_spannerlib_v1_MetadataRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spannerlib_v1_MetadataRequest_descriptor, @@ -288,7 +314,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "Rows", }); internal_static_google_spannerlib_v1_ResultSetStatsRequest_descriptor = - getDescriptor().getMessageTypes().get(12); + getDescriptor().getMessageTypes().get(14); internal_static_google_spannerlib_v1_ResultSetStatsRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spannerlib_v1_ResultSetStatsRequest_descriptor, @@ -296,7 +322,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "Rows", }); internal_static_google_spannerlib_v1_ConnectionStreamRequest_descriptor = - getDescriptor().getMessageTypes().get(13); + getDescriptor().getMessageTypes().get(15); internal_static_google_spannerlib_v1_ConnectionStreamRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spannerlib_v1_ConnectionStreamRequest_descriptor, @@ -304,7 +330,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "ExecuteRequest", "Request", }); internal_static_google_spannerlib_v1_ConnectionStreamResponse_descriptor = - getDescriptor().getMessageTypes().get(14); + getDescriptor().getMessageTypes().get(16); internal_static_google_spannerlib_v1_ConnectionStreamResponse_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_google_spannerlib_v1_ConnectionStreamResponse_descriptor, diff --git a/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/AbstractSpannerLibTest.java b/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/AbstractSpannerLibTest.java index 712bc36d..4ecea7b3 100644 --- a/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/AbstractSpannerLibTest.java +++ b/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/AbstractSpannerLibTest.java @@ -18,9 +18,11 @@ import com.google.cloud.spanner.connection.AbstractMockServerTest; import com.google.common.collect.ImmutableList; -import io.grpc.ManagedChannel; +import io.grpc.Channel; import io.grpc.ManagedChannelBuilder; +import java.util.ArrayList; import java.util.Collection; +import java.util.List; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; @@ -81,9 +83,16 @@ public void maybeCreateLibrary() throws Exception { private SpannerLibrary createLibrary() { if (libraryType == PoolTest.LibraryType.GRPC) { - ManagedChannel channel = - ManagedChannelBuilder.forTarget(grpcServerAddress).usePlaintext().build(); - return new GrpcSpannerLibraryImpl(channel, true); + int numChannels = 20; + List channels = new ArrayList<>(numChannels); + for (int i = 0; i < numChannels; i++) { + channels.add(ManagedChannelBuilder.forTarget(grpcServerAddress).usePlaintext().build()); + } + return new GrpcSpannerLibraryImpl(channels); + + // ManagedChannel channel = + // ManagedChannelBuilder.forTarget(grpcServerAddress).usePlaintext().build(); + // return new GrpcSpannerLibraryImpl(channel, true); } else if (libraryType == PoolTest.LibraryType.SHARED) { return NativeSpannerLibraryImpl.getInstance(); } else { diff --git a/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/BenchmarkTest.java b/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/BenchmarkTest.java new file mode 100644 index 00000000..60d29aeb --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/BenchmarkTest.java @@ -0,0 +1,155 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spannerlib; + +import static org.junit.Assert.assertEquals; + +import com.google.common.base.Stopwatch; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; +import com.google.common.util.concurrent.ListeningExecutorService; +import com.google.common.util.concurrent.MoreExecutors; +import com.google.protobuf.ListValue; +import com.google.protobuf.Struct; +import com.google.protobuf.Value; +import com.google.spanner.v1.ExecuteSqlRequest; +import java.time.Duration; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.concurrent.Executors; +import java.util.concurrent.ThreadLocalRandom; +import org.junit.Ignore; +import org.junit.Test; + +public class BenchmarkTest extends AbstractSpannerLibTest { + static class Stats { + public final Duration min; + public final Duration p50; + public final Duration p90; + public final Duration p95; + public final Duration p99; + public final Duration max; + public final Duration avg; + + public Stats( + Duration min, + Duration p50, + Duration p90, + Duration p95, + Duration p99, + Duration max, + Duration avg) { + this.min = min; + this.p50 = p50; + this.p90 = p90; + this.p95 = p95; + this.p99 = p99; + this.max = max; + this.avg = avg; + } + + @Override + public String toString() { + return String.format( + "Min: %s\n" + + "P50: %s\n" + + "P90: %s\n" + + "P95: %s\n" + + "P99: %s\n" + + "Max: %s\n" + + "Avg: %s\n", + min, p50, p90, p95, p99, max, avg); + } + } + + @Test + @Ignore("For local testing") + public void testBenchmarkRealSpanner() throws Exception { + try (Pool pool = + Pool.createPool( + library, + "projects/appdev-soda-spanner-staging/instances/knut-test-ycsb/databases/knut-test-db")) { + Duration warmupDuration = readRandomRows(pool, 10); + System.out.printf("Warmup duration: %s%n", warmupDuration); + + for (int i = 0; i < 10; i++) { + int numRows = (i + 1) * 10; + Duration duration = readRandomRows(pool, numRows); + System.out.printf("Duration (%d): %s%n", numRows, duration); + } + + int numThreads = 100; + int numTasks = 200; + ListeningExecutorService executor = + MoreExecutors.listeningDecorator(Executors.newCachedThreadPool()); + List> futures = new ArrayList<>(numTasks); + for (int i = 0; i < numTasks; i++) { + futures.add(executor.submit(() -> readRandomRows(pool, 10))); + } + Futures.allAsList(futures).get(); + Stats stats = calculateStats(new ArrayList<>(Futures.allAsList(futures).get())); + System.out.println(); + System.out.printf("Num tasks: %d\n", numTasks); + System.out.println(stats); + } + } + + private static Stats calculateStats(List durations) { + durations.sort(Duration::compareTo); + return new Stats( + durations.get(0), + durations.get(durations.size() * 50 / 100), + durations.get(durations.size() * 90 / 100), + durations.get(durations.size() * 95 / 100), + durations.get(durations.size() * 99 / 100), + durations.get(durations.size() - 1), + Duration.ofNanos( + (long) durations.stream().mapToLong(Duration::toNanos).average().orElse(0.0d))); + } + + private static Duration readRandomRows(Pool pool, int maxRows) { + HashSet set = new HashSet(); + ListValue.Builder builder = ListValue.newBuilder(); + for (int c = 0; c < maxRows; c++) { + int id = ThreadLocalRandom.current().nextInt(1, 1_000_001); + set.add(id); + builder.addValues(Value.newBuilder().setStringValue(String.valueOf(id)).build()); + } + try (Connection connection = pool.createConnection()) { + Stopwatch stopwatch = Stopwatch.createStarted(); + ExecuteSqlRequest request = + ExecuteSqlRequest.newBuilder() + .setSql("select * from all_types where col_bigint = any($1)") + .setParams( + Struct.newBuilder() + .putFields("p1", Value.newBuilder().setListValue(builder.build()).build()) + .build()) + .build(); + int count = 0; + try (Rows rows = connection.execute(request)) { + ListValue row; + while ((row = rows.next()) != null) { + assertEquals(10, row.getValuesList().size()); + count++; + } + assertEquals(set.size(), count); + } + return stopwatch.elapsed(); + } + } +} From 283d6c5a09fb57749931539e87e9a68e1922a8cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Knut=20Olav=20L=C3=B8ite?= Date: Thu, 16 Oct 2025 13:02:18 +0200 Subject: [PATCH 8/9] chore: return long instead of int --- .../wrappers/spannerlib-dotnet/spannerlib-dotnet/Rows.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/Rows.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/Rows.cs index 8e18b2da..0a877e55 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/Rows.cs +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/Rows.cs @@ -49,17 +49,17 @@ public long UpdateCount var stats = Stats; if (stats == null) { - return -1; + return -1L; } if (stats.HasRowCountExact) { - return (int)stats.RowCountExact; + return stats.RowCountExact; } if (stats.HasRowCountLowerBound) { - return (int)stats.RowCountLowerBound; + return stats.RowCountLowerBound; } - return -1; + return -1L; } } From 1dba922e4262d6dbbae65174f26f03a2278ed9f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Knut=20Olav=20L=C3=B8ite?= Date: Thu, 16 Oct 2025 13:15:00 +0200 Subject: [PATCH 9/9] chore: remove TODO --- .../spannerlib-dotnet-tests/TransactionTests.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/TransactionTests.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/TransactionTests.cs index 010fe5bd..8345460c 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/TransactionTests.cs +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/TransactionTests.cs @@ -29,9 +29,8 @@ public void TestBeginAndCommit([Values] LibType libType) connection.BeginTransaction(new TransactionOptions()); connection.Commit(); - // TODO: The library should take a shortcut and just skip committing empty transactions. - Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); - Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); + Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); } [Test]