diff --git a/.github/workflows/spanner-lib-tests.yml b/.github/workflows/spanner-lib-tests.yml index d39c4785..468cd3d6 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 @@ -71,3 +79,90 @@ jobs: run: mvn -Djna.debug_load=true test working-directory: spannerlib/wrappers/spannerlib-java shell: bash + + dotnet-wrapper: + strategy: + matrix: + go-version: [1.25.x] + os: [ubuntu-latest, macos-latest, windows-latest] + runs-on: ${{ matrix.os }} + steps: + - name: Install dotnet + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '9.0.x' + - name: Install Go + uses: actions/setup-go@v5 + with: + 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 + - name: Copy to .NET wrapper + working-directory: spannerlib + run: | + mkdir -p wrappers/spannerlib-dotnet/spannerlib-dotnet-native/libraries/any + if [ "$RUNNER_OS" == "Windows" ]; then + cp shared/spannerlib.so wrappers/spannerlib-dotnet/spannerlib-dotnet-native/libraries/any/spannerlib.dll + else + cp shared/spannerlib.so wrappers/spannerlib-dotnet/spannerlib-dotnet-native/libraries/any/spannerlib + fi + shell: bash + - name: Build .NET native library package + run: dotnet pack + working-directory: spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native + shell: bash + - name: Add .NET package source + run: | + if [ "$RUNNER_OS" == "Windows" ]; then + echo ${GITHUB_WORKSPACE}"\spannerlib\wrappers\spannerlib-dotnet\spannerlib-dotnet-native\bin\Release" + dotnet nuget add source ${GITHUB_WORKSPACE}"\spannerlib\wrappers\spannerlib-dotnet\spannerlib-dotnet-native\bin\Release" --name local + else + dotnet nuget add source "$PWD"/bin/Release --name local + 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 + shell: bash + - name: Build + run: dotnet build --no-restore + working-directory: spannerlib/wrappers/spannerlib-dotnet + shell: bash + - name: .NET Unit Tests + working-directory: spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests + run: dotnet test --no-build --verbosity normal + shell: bash 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/conn.go b/conn.go index 31dc2c41..a5c415fc 100644 --- a/conn.go +++ b/conn.go @@ -1119,6 +1119,12 @@ func (c *conn) BeginReadOnlyTransaction(ctx context.Context, options *ReadOnlyTr // // BeginReadWriteTransaction starts a new read/write transaction on this connection. func (c *conn) BeginReadWriteTransaction(ctx context.Context, options *ReadWriteTransactionOptions) (driver.Tx, error) { + // TODO: Support `set local transaction_tag = 'my_tag'` and similar. + // Get the current options of this connection and merge these with the input options. + // The input options take precedence over the default options of the connection. + execOptions := c.options(false) + mergeTransactionOptions(&execOptions.TransactionOptions, &options.TransactionOptions) + options.TransactionOptions = execOptions.TransactionOptions c.withTempTransactionOptions(options) tx, err := c.BeginTx(ctx, driver.TxOptions{}) if err != nil { diff --git a/spannerlib/.gitignore b/spannerlib/.gitignore index f6dbcd3d..5944b517 100644 --- a/spannerlib/.gitignore +++ b/spannerlib/.gitignore @@ -1,3 +1,5 @@ spannerlib.h spannerlib.so +spannerlib.dll grpc_server +grpc_server.exe 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-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-dotnet.sh b/spannerlib/grpc-server/build-dotnet.sh new file mode 100755 index 00000000..beb4edd9 --- /dev/null +++ b/spannerlib/grpc-server/build-dotnet.sh @@ -0,0 +1,17 @@ +mkdir -p ../wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/binaries/any +rm ../wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/binaries/any/grpc_server + +GOOS=darwin GOARCH=arm64 go build -o grpc_server server.go +chmod +x grpc_server +mkdir -p ../wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/binaries/osx-arm64 +cp grpc_server ../wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/binaries/osx-arm64/grpc_server + +GOOS=linux GOARCH=amd64 go build -o grpc_server server.go +chmod +x grpc_server +mkdir -p ../wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/binaries/linux-x64 +cp grpc_server ../wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/binaries/linux-x64/grpc_server + +GOOS=windows GOARCH=amd64 go build -o grpc_server.exe server.go +chmod +x grpc_server.exe +mkdir -p ../wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/binaries/win-x64 +cp grpc_server.exe ../wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/binaries/win-x64/grpc_server.exe 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..a14a7154 --- /dev/null +++ b/spannerlib/grpc-server/build-java-darwin-aarch64.sh @@ -0,0 +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 new file mode 100755 index 00000000..d3721808 --- /dev/null +++ b/spannerlib/grpc-server/build-protos.sh @@ -0,0 +1,25 @@ +PATH="${PATH}:${HOME}/go/bin" +ln -sf "${PWD}"/google/spannerlib googleapis/google/spannerlib +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 +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 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 new file mode 100644 index 00000000..3707b228 --- /dev/null +++ b/spannerlib/grpc-server/google/spannerlib/v1/spannerlib.pb.go @@ -0,0 +1,1118 @@ +// 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 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"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CreatePoolRequest) Reset() { + *x = CreatePoolRequest{} + mi := &file_google_spannerlib_v1_spannerlib_proto_msgTypes[2] + 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[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 CreatePoolRequest.ProtoReflect.Descriptor instead. +func (*CreatePoolRequest) Descriptor() ([]byte, []int) { + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{2} +} + +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[3] + 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[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 CreateConnectionRequest.ProtoReflect.Descriptor instead. +func (*CreateConnectionRequest) Descriptor() ([]byte, []int) { + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{3} +} + +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[4] + 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[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 ExecuteRequest.ProtoReflect.Descriptor instead. +func (*ExecuteRequest) Descriptor() ([]byte, []int) { + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{4} +} + +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[5] + 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[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 ExecuteBatchRequest.ProtoReflect.Descriptor instead. +func (*ExecuteBatchRequest) Descriptor() ([]byte, []int) { + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{5} +} + +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[6] + 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[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 BeginTransactionRequest.ProtoReflect.Descriptor instead. +func (*BeginTransactionRequest) Descriptor() ([]byte, []int) { + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{6} +} + +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[7] + 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[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 WriteMutationsRequest.ProtoReflect.Descriptor instead. +func (*WriteMutationsRequest) Descriptor() ([]byte, []int) { + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{7} +} + +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[8] + 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[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 Pool.ProtoReflect.Descriptor instead. +func (*Pool) Descriptor() ([]byte, []int) { + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{8} +} + +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[9] + 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[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 Connection.ProtoReflect.Descriptor instead. +func (*Connection) Descriptor() ([]byte, []int) { + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{9} +} + +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[10] + 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[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 Rows.ProtoReflect.Descriptor instead. +func (*Rows) Descriptor() ([]byte, []int) { + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{10} +} + +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[11] + 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[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 NextRequest.ProtoReflect.Descriptor instead. +func (*NextRequest) Descriptor() ([]byte, []int) { + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{11} +} + +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[12] + 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[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 RowData.ProtoReflect.Descriptor instead. +func (*RowData) Descriptor() ([]byte, []int) { + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{12} +} + +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[13] + 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[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 MetadataRequest.ProtoReflect.Descriptor instead. +func (*MetadataRequest) Descriptor() ([]byte, []int) { + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{13} +} + +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[14] + 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[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 ResultSetStatsRequest.ProtoReflect.Descriptor instead. +func (*ResultSetStatsRequest) Descriptor() ([]byte, []int) { + return file_google_spannerlib_v1_spannerlib_proto_rawDescGZIP(), []int{14} +} + +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[15] + 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[15] + 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{15} +} + +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[16] + 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[16] + 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{16} +} + +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\"\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" + + "\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\xc2\v\n" + + "\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" + + "\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, 17) +var file_google_spannerlib_v1_spannerlib_proto_goTypes = []any{ + (*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{ + 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 +} + +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[15].OneofWrappers = []any{ + (*ConnectionStreamRequest_ExecuteRequest)(nil), + } + file_google_spannerlib_v1_spannerlib_proto_msgTypes[16].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: 17, + 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..57d58b41 --- /dev/null +++ b/spannerlib/grpc-server/google/spannerlib/v1/spannerlib.proto @@ -0,0 +1,170 @@ +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 Info(InfoRequest) returns (InfoResponse) {} + + 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 InfoRequest { +} + +message InfoResponse { + string version = 1; +} + +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..b52dd75c --- /dev/null +++ b/spannerlib/grpc-server/google/spannerlib/v1/spannerlib_grpc.pb.go @@ -0,0 +1,730 @@ +// 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_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" + 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 { + 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) + 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) 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) + 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 { + 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) + 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) 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") +} +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_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 { + 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: "Info", + Handler: _SpannerLib_Info_Handler, + }, + { + 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..fee05d7b --- /dev/null +++ b/spannerlib/grpc-server/server.go @@ -0,0 +1,234 @@ +package main + +import ( + "context" + "log" + "math" + "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) + } + grpcServer := grpc.NewServer(grpc.MaxRecvMsgSize(math.MaxInt32)) + + 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) 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 { + 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..1b8faf48 --- /dev/null +++ b/spannerlib/grpc-server/server_test.go @@ -0,0 +1,526 @@ +package main + +import ( + "context" + "fmt" + "net" + "os" + "path/filepath" + "reflect" + "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;retryAbortsInternally=false", 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}); err != nil { + t.Fatalf("failed to begin transaction: %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.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 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.Execute(ctx, &pb.ExecuteRequest{ + Connection: connection, + ExecuteSqlRequest: &sppb.ExecuteSqlRequest{Sql: "set transaction_tag='test_tag'"}, + }); err != nil { + t.Fatalf("failed to set transaction_tag: %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) + } + + requests := server.TestSpanner.DrainRequestsFromServer() + executeRequests := testutil.RequestsOfType(requests, reflect.TypeOf(&sppb.ExecuteSqlRequest{})) + if g, w := len(executeRequests), 1; g != w { + t.Fatalf("num execute requests mismatch\n Got: %v\nWant: %v", g, w) + } + request := executeRequests[0].(*sppb.ExecuteSqlRequest) + if g, w := request.RequestOptions.TransactionTag, "test_tag"; g != w { + t.Fatalf("transaction tag mismatch\n Got: %v\nWant: %v", g, w) + } +} + +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/build-dotnet.sh b/spannerlib/shared/build-dotnet.sh new file mode 100755 index 00000000..f001e7c8 --- /dev/null +++ b/spannerlib/shared/build-dotnet.sh @@ -0,0 +1,17 @@ +mkdir -p ../wrappers/spannerlib-dotnet/spannerlib-dotnet-native/binaries/any +rm ../wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/binaries/any/spannerlib + +GOOS=darwin GOARCH=arm64 CGO_ENABLED=1 go build -o spannerlib.so -buildmode=c-shared shared_lib.go +mkdir -p ../wrappers/spannerlib-dotnet/spannerlib-dotnet-native/binaries/osx-arm64 +cp spannerlib.so ../wrappers/spannerlib-dotnet/spannerlib-dotnet-native/binaries/osx-arm64/spannerlib.so + +#brew tap SergioBenitez/osxct +#brew install x86_64-unknown-linux-gnu +CC=x86_64-unknown-linux-gnu-gcc GOOS=linux GOARCH=amd64 CGO_ENABLED=1 go build -o spannerlib.so -buildmode=c-shared shared_lib.go +mkdir -p ../wrappers/spannerlib-dotnet/spannerlib-dotnet-native/binaries/linux-x64 +cp spannerlib.so ../wrappers/spannerlib-dotnet/spannerlib-dotnet-native/binaries/linux-x64/spannerlib.so + +# brew install mingw-w64 +CC=x86_64-w64-mingw32-gcc GOOS=windows GOARCH=amd64 CGO_ENABLED=1 go build -o spannerlib.dll -buildmode=c-shared shared_lib.go +mkdir -p ../wrappers/spannerlib-dotnet/spannerlib-dotnet-native/binaries/win-x64 +cp spannerlib.dll ../wrappers/spannerlib-dotnet/spannerlib-dotnet-native/binaries/win-x64/spannerlib.dll 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-dotnet/.gitignore b/spannerlib/wrappers/spannerlib-dotnet/.gitignore new file mode 100644 index 00000000..808112cd --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/.gitignore @@ -0,0 +1,4 @@ +.idea +obj +bin +*DotSettings.user diff --git a/spannerlib/wrappers/spannerlib-dotnet/global.json b/spannerlib/wrappers/spannerlib-dotnet/global.json new file mode 100644 index 00000000..93681ff8 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/global.json @@ -0,0 +1,7 @@ +{ + "sdk": { + "version": "9.0.0", + "rollForward": "latestMinor", + "allowPrerelease": false + } +} \ No newline at end of file diff --git a/spannerlib/wrappers/spannerlib-dotnet/publish.sh b/spannerlib/wrappers/spannerlib-dotnet/publish.sh new file mode 100755 index 00000000..602d1471 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/publish.sh @@ -0,0 +1,41 @@ +# NUGET_API_KEY=secret + +# Build gRPC server +echo "Building gRPC server..." +cd ../../grpc-server || exit 1 +./build-dotnet.sh + +# Build shared library + +echo "Building shared library..." +cd ../shared || exit 1 +./build-dotnet.sh + +# Build and publish nuget packages +cd ../wrappers/spannerlib-dotnet || exit 1 + +echo "Building .NET packages..." +VERSION=$(date -u +"1.0.0-alpha.%Y%m%d%H%M%S") + +echo "Publishing as version $VERSION" +find ./ -type f -name "*.csproj" -exec sed -i "" "s|.*|$VERSION|g" {} \; +find ./ -type f -name "*.csproj" -exec sed -i "" "s|||g" {} \; + +dotnet nuget remove source local-native-build 2>/dev/null +dotnet nuget add source "$PWD"/spannerlib-dotnet-native/bin/Release --name local-native-build +dotnet nuget remove source local-grpc-server-build 2>/dev/null +dotnet nuget add source "$PWD"/spannerlib-dotnet-grpc-server/bin/Release --name local-grpc-server-build + +find ./**/bin/Release -type f -name "Alpha*.nupkg" -exec rm {} \; +cd spannerlib-dotnet-native || exit 1 +dotnet pack +cd .. || exit 1 +cd spannerlib-dotnet-grpc-server || exit 1 +dotnet pack +cd .. || exit 1 +dotnet pack +find ./**/bin/Release -type f -name "Alpha*.nupkg" -exec \ + dotnet nuget push \ + {} \ + --api-key $NUGET_API_KEY \ + --source https://api.nuget.org/v3/index.json \; 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..d52184a3 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/GrpcLibSpanner.cs @@ -0,0 +1,421 @@ +// 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 async Task WriteMutationsAsync(Connection connection, + BatchWriteRequest.Types.MutationGroup mutations, CancellationToken cancellationToken = default) + { + try + { + var response = await _client.WriteMutationsAsync(new WriteMutationsRequest + { + Connection = ToProto(connection), + Mutations = mutations, + }); + return response.CommitTimestamp == null ? null : response; + } + catch (RpcException exception) + { + throw SpannerException.ToSpannerException(exception); + } + } + + 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..dd364459 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/spannerlib-dotnet-grpc-impl.csproj @@ -0,0 +1,22 @@ + + + + net8.0 + Google.Cloud.SpannerLib.Grpc + enable + default + Alpha.Google.Cloud.SpannerLib.GrpcImpl + 1.0.0-alpha.20251009140944 + Google + + + + + + + + + + + + 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..436869da --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/Server.cs @@ -0,0 +1,191 @@ +// 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); + return _host; + } + + private static Tuple StartGrpcServer(AddressType addressType) + { + 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) + { + while (!File.Exists(arguments)) + { + 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..e183be01 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/build.sh @@ -0,0 +1,19 @@ +# Builds the gRPC server and the binary .NET wrapper and install the latter in a local nuget repository. + +# Determine OS + Arch +mkdir -p binaries/any +mkdir -p binaries/osx-arm64 +mkdir -p binaries/linux-x64 + +# Clear all local nuget cache +rm binaries/any/grpc_server +dotnet nuget locals --clear all +GOOS=darwin GOARCH=arm64 go build -o ../../../grpc-server/grpc_server ../../../grpc-server/server.go +cp ../../../grpc-server/grpc_server binaries/osx-arm64/grpc_server +GOOS=linux GOARCH=amd64 go build -o ../../../grpc-server/grpc_server ../../../grpc-server/server.go +cp ../../../grpc-server/grpc_server binaries/linux-x64/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/publish.sh b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/publish.sh new file mode 100755 index 00000000..8c3d0e4b --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/publish.sh @@ -0,0 +1,13 @@ +# NUGET_API_KEY=secret + +VERSION=$(date -u +"1.0.0-alpha.%Y%m%d%H%M%S") + +echo "Publishing as version $VERSION" +sed -i "" "s|.*|$VERSION|g" spannerlib-dotnet-grpc-server.csproj + +rm -rf bin/Release +dotnet pack +dotnet nuget push \ + bin/Release/Alpha.Google.Cloud.SpannerLib.GrpcServer.*.nupkg \ + --api-key $NUGET_API_KEY \ + --source https://api.nuget.org/v3/index.json 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..d70ba22c --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/spannerlib-dotnet-grpc-server.csproj @@ -0,0 +1,20 @@ + + + + netstandard2.1 + Google.Cloud.SpannerLib.Grpc + enable + default + Alpha.Google.Cloud.SpannerLib.GrpcServer + SpannerLib Grpc Server + Google + 1.0.0-alpha.20251009140944 + + + + + + + + + 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..a6788ee9 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-tests/spannerlib-dotnet-grpc-tests.csproj @@ -0,0 +1,28 @@ + + + + net8.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..17c3d74d --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-v1/spannerlib-dotnet-grpc-v1.csproj @@ -0,0 +1,18 @@ + + + + netstandard2.1 + Google.Cloud.SpannerLib.V1 + enable + default + Alpha.Google.Cloud.SpannerLib.Grpc.V1 + 1.0.0-alpha.20251009140944 + Google + + + + + + + + diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/MockServerStartup.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/MockServerStartup.cs new file mode 100644 index 00000000..8553f8ec --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/MockServerStartup.cs @@ -0,0 +1,68 @@ +// 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 Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; + +namespace Google.Cloud.SpannerLib.MockServer; + +/// +/// Helper class for starting an in-memory mock Spanner server that is used for testing. +/// +public class MockServerStartup(MockSpannerService mockSpannerService, MockDatabaseAdminService mockDatabaseAdminService) +{ + /// + /// The in-mem Spanner service. + /// + private MockSpannerService MockSpannerService { get; } = mockSpannerService; + + /// + /// The in-mem Spanner database admin service for executing DDL operations. + /// + private MockDatabaseAdminService MockDatabaseAdminService { get; } = mockDatabaseAdminService; + + /// + /// Configures the services that will be available on this gRPC server. + /// This method is called by reflection when the tests are started. + /// + /// The services collection where the services should be added + public void ConfigureServices(IServiceCollection services) + { + services.AddGrpc(); + services.AddSingleton(MockSpannerService); + services.AddSingleton(MockDatabaseAdminService); + } + + /// + /// Configures the gRPC server. This method is called by reflection when the tests are started. + /// + /// The builder for the application that will be hosting the service + /// The webhost environment that is hosting the service + public void Configure(IApplicationBuilder app, IWebHostEnvironment env) + { + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + + app.UseRouting(); + app.UseEndpoints(endpoints => + { + endpoints.MapGrpcService(); + endpoints.MapGrpcService(); + }); + } +} \ No newline at end of file diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/MockSpannerServer.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/MockSpannerServer.cs new file mode 100644 index 00000000..dabc42f0 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/MockSpannerServer.cs @@ -0,0 +1,806 @@ +// 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.Collections; +using System.Collections.Concurrent; +using Google.Cloud.Spanner.Admin.Database.V1; +using Google.Cloud.Spanner.Common.V1; +using Google.Cloud.Spanner.V1; +using Google.LongRunning; +using Google.Protobuf; +using Google.Protobuf.WellKnownTypes; +using Google.Rpc; +using Grpc.Core; +using Status = Google.Rpc.Status; +using GrpcCore = Grpc.Core; + +namespace Google.Cloud.SpannerLib.MockServer; + +public class StatementResult +{ + public enum StatementResultType + { + ResultSet, + UpdateCount, + Exception + } + + public StatementResultType Type { get; } + public ResultSet? ResultSet { get; } + public long UpdateCount { get; } + public Exception? Exception { get; } + + public static StatementResult CreateQuery(ResultSet resultSet) + { + return new StatementResult(resultSet); + } + + public static StatementResult CreateUpdateCount(long count) + { + return new StatementResult(count); + } + + public static StatementResult CreateException(Exception exception) + { + return new StatementResult(exception); + } + + public static StatementResult CreateSelect1ResultSet() + { + return CreateSingleColumnResultSet(new Spanner.V1.Type { Code = Spanner.V1.TypeCode.Int64 }, "COL1", 1); + } + + public static StatementResult CreateSingleColumnResultSet(Spanner.V1.Type type, string col, params object[] values) + => CreateSingleColumnResultSet(null, type, col, values); + + public static StatementResult CreateSingleColumnResultSet(long? updateCount, Spanner.V1.Type type, string col, params object[] values) + { + ResultSet rs = new ResultSet + { + Metadata = new ResultSetMetadata + { + RowType = new StructType() + }, + }; + rs.Metadata.RowType.Fields.Add(new StructType.Types.Field + { + Name = col, + Type = type, + }); + foreach (object val in values) + { + ListValue row = new ListValue(); + row.Values.Add(SpannerConverter.ToProtobufValue(type, val)); + rs.Rows.Add(row); + } + if (updateCount != null) + { + rs.Stats = new ResultSetStats { RowCountExact = updateCount.Value }; + } + return CreateQuery(rs); + } + + public static StatementResult CreateResultSet(IEnumerable> columns, IEnumerable rows) => + CreateResultSet(columns.Select(x => Tuple.Create(new Spanner.V1.Type { Code = x.Item1, ArrayElementType = x.Item1 == Spanner.V1.TypeCode.Array ? new Spanner.V1.Type {Code=Spanner.V1.TypeCode.String} : null}, x.Item2)).ToList(), rows); + + public static StatementResult CreateResultSet(IEnumerable> columns, IEnumerable rows) + { + var rs = new ResultSet + { + Metadata = new ResultSetMetadata + { + RowType = new StructType() + }, + }; + foreach (var col in columns) + { + rs.Metadata.RowType.Fields.Add(new StructType.Types.Field + { + Type = col.Item1, + Name = col.Item2, + }); + } + foreach (var rowValue in rows) + { + var row = new ListValue(); + var colIndex = 0; + foreach (var value in rowValue) + { + row.Values.Add(SpannerConverter.ToProtobufValue(rs.Metadata.RowType.Fields[colIndex].Type, value)); + colIndex++; + } + rs.Rows.Add(row); + } + return CreateQuery(rs); + } + + private StatementResult(ResultSet resultSet) + { + Type = StatementResultType.ResultSet; + ResultSet = resultSet; + } + + private StatementResult(long updateCount) + { + Type = StatementResultType.UpdateCount; + UpdateCount = updateCount; + } + + private StatementResult(Exception exception) + { + Type = StatementResultType.Exception; + Exception = exception; + } +} + +public class ExecutionTime +{ + private readonly int _minimumExecutionTime; + private readonly int _randomExecutionTime; + private readonly Random? _random; + + // TODO: Support multiple exceptions + private Exception? _exception; + private readonly int _exceptionStreamIndex; + private readonly BlockingCollection? _streamWritePermissions; + private bool _alwaysAllowWrite; + + internal bool HasExceptionAtIndex(int index) + { + return _exception != null && _exceptionStreamIndex == index; + } + + internal Exception? PopExceptionAtIndex(int index) + { + Exception? res = _exceptionStreamIndex == index ? _exception : null; + if (res != null) + { + _exception = null; + } + return res; + } + + public void AlwaysAllowWrite() + { + _alwaysAllowWrite = true; + _streamWritePermissions?.Add(int.MaxValue); + } + + internal int TakeWritePermission() + { + if (_alwaysAllowWrite || _streamWritePermissions == null) + { + return int.MaxValue; + } + return _streamWritePermissions.Take(); + } + + internal void SimulateExecutionTime() + { + if (_minimumExecutionTime > 0 || _randomExecutionTime > 0) + { + int totalWaitTime = _minimumExecutionTime; + if (_randomExecutionTime > 0) + { + totalWaitTime += _random?.Next(_randomExecutionTime) ?? _randomExecutionTime; + } + Thread.Sleep(totalWaitTime); + } + if (_exception != null && _exceptionStreamIndex < 0) + { + throw _exception; + } + } + + public static ExecutionTime FromMillis(int minimumExecutionTime, int randomExecutionTime) + { + return new ExecutionTime(minimumExecutionTime, randomExecutionTime, null, -1, null); + } + + public static ExecutionTime FromException(Exception exception) + { + return new ExecutionTime(0, 0, exception, -1, null); + } + + public static ExecutionTime CreateException(StatusCode code, string message) + { + return FromException(new RpcException(new GrpcCore.Status(code, message))); + } + + public static ExecutionTime StreamException(Exception exception, int streamIndex, BlockingCollection streamWritePermissions) + { + return new ExecutionTime(0, 0, exception, streamIndex, streamWritePermissions); + } + + private ExecutionTime(int minimumExecutionTime, int randomExecutionTime, Exception? exception, int exceptionStreamIndex, BlockingCollection? streamWritePermissions) + { + _minimumExecutionTime = minimumExecutionTime; + _randomExecutionTime = randomExecutionTime; + _random = _randomExecutionTime > 0 ? new Random() : null; + _exception = exception; + _exceptionStreamIndex = exceptionStreamIndex; + _streamWritePermissions = streamWritePermissions; + } +} + +public class MockSpannerService : Spanner.V1.Spanner.SpannerBase +{ + private class PartialResultSetsEnumerable : IEnumerable + { + private readonly Transaction? _transaction; + private readonly ResultSet _resultSet; + public PartialResultSetsEnumerable(Transaction? transaction, ResultSet resultSet) + { + _transaction = transaction; + _resultSet = resultSet; + } + + public IEnumerator GetEnumerator() + { + return new PartialResultSetsEnumerator(_transaction, _resultSet); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return new PartialResultSetsEnumerator(_transaction, _resultSet); + } + } + + private class PartialResultSetsEnumerator : IEnumerator + { + private static readonly int SMaxRowsInChunk = 1; + + private readonly Transaction? _transaction; + private readonly ResultSet _resultSet; + private bool _first = true; + private int _currentRow; + private PartialResultSet? _current; + + public PartialResultSetsEnumerator(Transaction? transaction, ResultSet resultSet) + { + _transaction = transaction; + _resultSet = resultSet; + } + + PartialResultSet IEnumerator.Current => _current ?? throw new InvalidOperationException(); + + object IEnumerator.Current => _current ?? throw new InvalidOperationException(); + + public bool MoveNext() + { + _current = new PartialResultSet + { + ResumeToken = ByteString.CopyFromUtf8($"{_currentRow}") + }; + if (_first) + { + _current.Metadata = _resultSet.Metadata.Clone(); + if (_transaction != null) + { + _current.Metadata.Transaction = _transaction; + } + _first = false; + } + else if (_currentRow == _resultSet.Rows.Count) + { + return false; + } + int recordCount = 0; + while (recordCount < SMaxRowsInChunk && _currentRow < _resultSet.Rows.Count) + { + _current.Values.Add(_resultSet.Rows.ElementAt(_currentRow).Values); + recordCount++; + _currentRow++; + } + return true; + } + + public void Reset() + { + throw new NotImplementedException(); + } + + public void Dispose() + { + } + } + + private static readonly string SDialectQuery = + "select option_value from information_schema.database_options where option_name='database_dialect'"; + private static readonly Empty SEmpty = new (); + private static readonly TransactionOptions STransactionSingleUse = new() { ReadOnly = new TransactionOptions.Types.ReadOnly { Strong = true, ReturnReadTimestamp = false } }; + + private readonly object _lock = new(); + private readonly ConcurrentDictionary _results = new(); + private ConcurrentQueue _requests = new(); + private ConcurrentQueue _contexts = new(); + private ConcurrentQueue _headers = new (); + private int _sessionCounter; + private int _transactionCounter; + private readonly ConcurrentDictionary _sessions = new(); + private readonly ConcurrentDictionary _transactions = new(); + private readonly ConcurrentDictionary _transactionOptions = new(); + private readonly ConcurrentDictionary _abortedTransactions = new(); + private bool _abortNextStatement; + private readonly ConcurrentDictionary _executionTimes = new(); + + public MockSpannerService() + { + AddDialectResult(); + } + + public void AddOrUpdateStatementResult(string sql, StatementResult result) + { + _results.AddOrUpdate(sql.Trim(), + result, + (_, _) => result + ); + } + + public void AddOrUpdateExecutionTime(string method, ExecutionTime executionTime) + { + _executionTimes.AddOrUpdate(method, + executionTime, + (_, _) => executionTime + ); + } + + private void AddDialectResult() + { + AddOrUpdateStatementResult(SDialectQuery, + StatementResult.CreateResultSet( + new List> + { + Tuple.Create(Spanner.V1.TypeCode.String, "option_value"), + }, + new List + { + new object[] { "GOOGLE_STANDARD_SQL" }, + })); + } + + internal void AbortTransaction(string transactionId) + { + _abortedTransactions.TryAdd(ByteString.FromBase64(transactionId), true); + } + + internal void AbortNextStatement() + { + lock (_lock) + { + _abortNextStatement = true; + } + } + + public IEnumerable Requests => new List(_requests).AsReadOnly(); + + public IEnumerable Contexts => new List(_contexts).AsReadOnly(); + + public IEnumerable Headers => new List(_headers).AsReadOnly(); + + public void Reset() + { + _requests = new ConcurrentQueue(); + _contexts = new ConcurrentQueue(); + _headers = new ConcurrentQueue(); + _executionTimes.Clear(); + _results.Clear(); + _abortedTransactions.Clear(); + _abortNextStatement = false; + AddDialectResult(); + } + + public override Task BeginTransaction(BeginTransactionRequest request, ServerCallContext context) + { + _requests.Enqueue(request); + _contexts.Enqueue(context); + _headers.Enqueue(context.RequestHeaders); + TryFindSession(request.SessionAsSessionName); + Transaction tx = new Transaction(); + var id = Interlocked.Increment(ref _transactionCounter); + tx.Id = ByteString.CopyFromUtf8($"{request.SessionAsSessionName}/transactions/{id}"); + _transactions.TryAdd(tx.Id, tx); + return Task.FromResult(tx); + } + + public override Task Commit(CommitRequest request, ServerCallContext context) + { + _requests.Enqueue(request); + _contexts.Enqueue(context); + _headers.Enqueue(context.RequestHeaders); + _executionTimes.TryGetValue(nameof(Commit), out ExecutionTime? executionTime); + executionTime?.SimulateExecutionTime(); + TryFindSession(request.SessionAsSessionName); + if (request.TransactionCase == CommitRequest.TransactionOneofCase.TransactionId) + { + TryFindTransaction(request.TransactionId, true); + } + CommitResponse response = new CommitResponse(); + Timestamp ts = Timestamp.FromDateTime(DateTime.UtcNow); + response.CommitTimestamp = ts; + return Task.FromResult(response); + } + + public override Task Rollback(RollbackRequest request, ServerCallContext context) + { + _requests.Enqueue(request); + _contexts.Enqueue(context); + _headers.Enqueue(context.RequestHeaders); + TryFindSession(request.SessionAsSessionName); + _transactions.TryRemove(request.TransactionId, out _); + return Task.FromResult(SEmpty); + } + + private Session CreateSession(DatabaseName database, bool multiplexed) + { + var id = Interlocked.Increment(ref _sessionCounter); + Session session = new Session + { + SessionName = new SessionName(database.ProjectId, database.InstanceId, database.DatabaseId, $"session-{id}"), + Multiplexed = multiplexed, + }; + if (!_sessions.TryAdd(session.SessionName, session)) + { + throw new RpcException(new GrpcCore.Status(StatusCode.AlreadyExists, $"Session with id session-{id} already exists")); + } + return session; + } + + internal static RpcException CreateAbortedException(string message) + { + // Add a 100 nanosecond retry delay to the error to ensure that the delay is used, but does not slow + // down the tests unnecessary (100ns == 1 Tick is the smallest possible measurable timespan in .NET). + var key = RetryInfo.Descriptor.FullName + "-bin"; + var entry = new Metadata.Entry(key, new RetryInfo { RetryDelay = new Duration { Nanos = 100 } }.ToByteArray()); + var trailers = new Metadata { entry }; + + var status = new GrpcCore.Status(StatusCode.Aborted, $"Transaction aborted: {message}"); + var rpc = new RpcException(status, trailers); + + return rpc; + } + + internal static RpcException CreateDatabaseNotFoundException(string name) + { + var key = ResourceInfo.Descriptor.FullName + "-bin"; + var entry = new Metadata.Entry(key, new ResourceInfo { ResourceName = name, ResourceType = "type.googleapis.com/google.spanner.admin.database.v1.Database"}.ToByteArray()); + var trailers = new Metadata { entry }; + + var status = new GrpcCore.Status(StatusCode.NotFound, $"Database not found: Database with id {name} not found"); + var rpc = new RpcException(status, trailers); + + return rpc; + } + + private Transaction TryFindTransaction(ByteString id, Boolean remove = false) + { + if (_abortedTransactions.TryGetValue(id, out bool aborted) && aborted) + { + throw CreateAbortedException("Transaction marked as aborted"); + } + lock (_lock) + { + if (_abortNextStatement) + { + _abortNextStatement = false; + throw CreateAbortedException("Next statement was aborted"); + } + } + if (remove ? _transactions.TryRemove(id, out Transaction? tx) : _transactions.TryGetValue(id, out tx)) + { + return tx; + } + throw new RpcException(new GrpcCore.Status(StatusCode.NotFound, $"Transaction not found: {id.ToBase64()}")); + } + + private Transaction? FindOrBeginTransaction(SessionName session, TransactionSelector? selector) + { + if (selector == null) + { + return BeginTransaction(session, STransactionSingleUse, true); + } + // TODO: Check that the selected transaction actually belongs to the given session. + return selector.SelectorCase switch + { + TransactionSelector.SelectorOneofCase.SingleUse => BeginTransaction(session, selector.SingleUse, true), + TransactionSelector.SelectorOneofCase.Begin => BeginTransaction(session, selector.Begin, false), + TransactionSelector.SelectorOneofCase.Id => TryFindTransaction(selector.Id), + _ => null, + }; + } + + private Transaction BeginTransaction(SessionName session, TransactionOptions options, bool singleUse) + { + Transaction tx = new Transaction(); + var id = Interlocked.Increment(ref _transactionCounter); + tx.Id = ByteString.CopyFromUtf8($"{session}/transactions/{id}"); + if (options.ModeCase == TransactionOptions.ModeOneofCase.ReadOnly && options.ReadOnly.ReturnReadTimestamp) + { + tx.ReadTimestamp = Timestamp.FromDateTime(DateTime.UtcNow); + } + if (!singleUse) + { + _transactions.TryAdd(tx.Id, tx); + _transactionOptions.TryAdd(tx.Id, options); + } + return tx; + } + + public override Task BatchCreateSessions(BatchCreateSessionsRequest request, ServerCallContext context) + { + _requests.Enqueue(request); + _contexts.Enqueue(context); + _headers.Enqueue(context.RequestHeaders); + _executionTimes.TryGetValue(nameof(BatchCreateSessions), out ExecutionTime? executionTime); + executionTime?.SimulateExecutionTime(); + var database = request.DatabaseAsDatabaseName; + BatchCreateSessionsResponse response = new BatchCreateSessionsResponse(); + for (int i = 0; i < request.SessionCount; i++) + { + response.Session.Add(CreateSession(database, false)); + } + return Task.FromResult(response); + } + + public override Task CreateSession(CreateSessionRequest request, ServerCallContext context) + { + _requests.Enqueue(request); + _contexts.Enqueue(context); + _headers.Enqueue(context.RequestHeaders); + _executionTimes.TryGetValue(nameof(CreateSession), out ExecutionTime? executionTime); + executionTime?.SimulateExecutionTime(); + var database = request.DatabaseAsDatabaseName; + return Task.FromResult(CreateSession(database, request.Session?.Multiplexed ?? false)); + } + + public override Task GetSession(GetSessionRequest request, ServerCallContext context) + { + _requests.Enqueue(request); + _contexts.Enqueue(context); + _headers.Enqueue(context.RequestHeaders); + return Task.FromResult(TryFindSession(request.SessionName)); + } + + public override Task ListSessions(ListSessionsRequest request, ServerCallContext context) + { + _requests.Enqueue(request); + _contexts.Enqueue(context); + _headers.Enqueue(context.RequestHeaders); + ListSessionsResponse response = new ListSessionsResponse(); + foreach (Session session in _sessions.Values) + { + response.Sessions.Add(session); + } + return Task.FromResult(response); + } + + public override Task DeleteSession(DeleteSessionRequest request, ServerCallContext context) + { + _requests.Enqueue(request); + _contexts.Enqueue(context); + _headers.Enqueue(context.RequestHeaders); + _sessions.TryRemove(request.SessionName, out _); + return Task.FromResult(SEmpty); + } + + private Session TryFindSession(SessionName name) + { + if (_sessions.TryGetValue(name, out Session? session)) + { + return session; + } + throw new RpcException(new GrpcCore.Status(StatusCode.NotFound, $"Session not found: {name}")); + } + + public override Task ExecuteBatchDml(ExecuteBatchDmlRequest request, ServerCallContext context) + { + _requests.Enqueue(request); + _contexts.Enqueue(context); + _headers.Enqueue(context.RequestHeaders); + _executionTimes.TryGetValue(nameof(ExecuteBatchDml), out ExecutionTime? executionTime); + executionTime?.SimulateExecutionTime(); + _ = TryFindSession(request.SessionAsSessionName); + var tx = FindOrBeginTransaction(request.SessionAsSessionName, request.Transaction); + var response = new ExecuteBatchDmlResponse + { + // TODO: Return other statuses based on the mocked results. + Status = new Status + { + Code = (int)StatusCode.OK + } + }; + var index = 0; + foreach (var statement in request.Statements) + { + if (response.Status.Code != (int)StatusCode.OK) + { + break; + } + if (_results.TryGetValue(statement.Sql.Trim(), out StatementResult? result)) + { + switch (result.Type) + { + case StatementResult.StatementResultType.ResultSet: + throw new RpcException(new GrpcCore.Status(StatusCode.InvalidArgument, $"ResultSet is not a valid result type for BatchDml")); + case StatementResult.StatementResultType.UpdateCount: + if (_executionTimes.TryGetValue(nameof(ExecuteBatchDml) + statement.Sql, out executionTime)) + { + executionTime.SimulateExecutionTime(); + } + var resultSet = CreateUpdateCountResultSet(result.UpdateCount); + if (index == 0 && request.Transaction?.Begin != null && tx != null) + { + resultSet.Metadata.Transaction = tx; + } + response.ResultSets.Add(resultSet); + break; + case StatementResult.StatementResultType.Exception: + if (index == 0) + { + throw result.Exception ?? new InvalidOperationException(); + } + response.Status = StatusFromException(result.Exception ?? new InvalidOperationException()); + break; + default: + throw new RpcException(new GrpcCore.Status(StatusCode.InvalidArgument, $"Invalid result type {result.Type} for {statement.Sql}")); + } + } + else + { + throw new RpcException(new GrpcCore.Status(StatusCode.InvalidArgument, $"No result found for {statement.Sql}")); + } + index++; + } + return Task.FromResult(response); + } + + private Status StatusFromException(Exception e) + { + if (e is RpcException rpc) + { + return new Status { Code = (int)rpc.StatusCode, Message = e.Message }; + } + return new Status { Code = (int)StatusCode.Unknown, Message = e.Message }; + } + + public override async Task ExecuteStreamingSql(ExecuteSqlRequest request, IServerStreamWriter responseStream, ServerCallContext context) + { + if (!request.Sql.Equals(SDialectQuery)) + { + _requests.Enqueue(request); + } + _contexts.Enqueue(context); + _headers.Enqueue(context.RequestHeaders); + _executionTimes.TryGetValue(nameof(ExecuteStreamingSql) + request.Sql, out ExecutionTime? executionTime); + if (executionTime == null) + { + _executionTimes.TryGetValue(nameof(ExecuteStreamingSql), out executionTime); + } + executionTime?.SimulateExecutionTime(); + TryFindSession(request.SessionAsSessionName); + Transaction? returnTransaction = null; + var transaction = FindOrBeginTransaction(request.SessionAsSessionName, request.Transaction); + if (request.Transaction != null && (request.Transaction.SelectorCase == TransactionSelector.SelectorOneofCase.Begin || request.Transaction.SelectorCase == TransactionSelector.SelectorOneofCase.SingleUse)) + { + returnTransaction = transaction; + } + if (_results.TryGetValue(request.Sql.Trim(), out StatementResult? result)) + { + switch (result.Type) + { + case StatementResult.StatementResultType.ResultSet: + await WriteResultSet(returnTransaction, result.ResultSet!, responseStream, executionTime); + break; + case StatementResult.StatementResultType.UpdateCount: + await WriteUpdateCount(returnTransaction, result.UpdateCount, responseStream); + break; + case StatementResult.StatementResultType.Exception: + throw result.Exception!; + default: + throw new RpcException(new GrpcCore.Status(StatusCode.InvalidArgument, $"Invalid result type {result.Type} for {request.Sql}")); + } + } + else + { + throw new RpcException(new GrpcCore.Status(StatusCode.InvalidArgument, $"No result found for {request.Sql}")); + } + } + + private async Task WriteResultSet(Transaction? transaction, ResultSet resultSet, IServerStreamWriter responseStream, ExecutionTime? executionTime) + { + int index = 0; + PartialResultSetsEnumerable enumerator = new PartialResultSetsEnumerable(transaction, resultSet); + int writePermissions = executionTime?.TakeWritePermission() ?? int.MaxValue; + foreach (PartialResultSet prs in enumerator) + { + Exception? e = executionTime?.PopExceptionAtIndex(index); + if (e != null) + { + throw e; + } + await responseStream.WriteAsync(prs); + index++; + writePermissions--; + if (writePermissions == 0) + { + writePermissions = executionTime?.TakeWritePermission() ?? int.MaxValue; + } + } + } + + private async Task WriteUpdateCount(Transaction? transaction, long updateCount, IServerStreamWriter responseStream) + { + PartialResultSet prs = new PartialResultSet + { + Metadata = new ResultSetMetadata { Transaction = transaction, RowType = new StructType()}, + Stats = new ResultSetStats { RowCountExact = updateCount } + }; + await responseStream.WriteAsync(prs); + } + + private ResultSet CreateUpdateCountResultSet(long updateCount) + { + ResultSet rs = new ResultSet + { + Metadata = new ResultSetMetadata { RowType = new StructType()}, + Stats = new ResultSetStats { RowCountExact = updateCount } + }; + return rs; + } +} + +public class MockDatabaseAdminService : DatabaseAdmin.DatabaseAdminBase +{ + private readonly ConcurrentQueue _requests = new ConcurrentQueue(); + + public IEnumerable Requests => new List(_requests).AsReadOnly(); + + public override Task CreateDatabase(CreateDatabaseRequest request, ServerCallContext context) + { + _requests.Enqueue(request); + var op = new Operation + { + Name = "projects/p1/instances/i1/operations/o1", + Response = Any.Pack(new Database()), + Metadata = Any.Pack(new CreateDatabaseMetadata()), + Done = true, + }; + return Task.FromResult(op); + } + + public override Task UpdateDatabaseDdl(UpdateDatabaseDdlRequest request, ServerCallContext context) + { + _requests.Enqueue(request); + var op = new Operation + { + Name = "projects/p1/instances/i1/operations/o1", + Response = Any.Pack(new Empty()), + Metadata = Any.Pack(new UpdateDatabaseDdlMetadata()), + Done = true, + }; + return Task.FromResult(op); + } + + public override Task DropDatabase(DropDatabaseRequest request, ServerCallContext context) + { + _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/README.md b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/README.md new file mode 100644 index 00000000..45d4eff7 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/README.md @@ -0,0 +1,3 @@ +# .NET Spanner Mock Server + +This project contains a mock Spanner server that can be used for testing. diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/RandomResultSetGenerator.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/RandomResultSetGenerator.cs new file mode 100644 index 00000000..63365b51 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/RandomResultSetGenerator.cs @@ -0,0 +1,147 @@ +// 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.Globalization; +using System.Xml; +using Google.Cloud.Spanner.V1; +using Google.Protobuf.WellKnownTypes; +using TypeCode = Google.Cloud.Spanner.V1.TypeCode; + +namespace Google.Cloud.SpannerLib.MockServer; + +public static class RandomResultSetGenerator +{ + public static StructType GenerateAllTypesRowType() + { + return new StructType + { + Fields = { new [] + { + new StructType.Types.Field {Name = "col_bool", Type = new Spanner.V1.Type{Code = TypeCode.Bool}}, + new StructType.Types.Field {Name = "col_bytes", Type = new Spanner.V1.Type{Code = TypeCode.Bytes}}, + new StructType.Types.Field {Name = "col_date", Type = new Spanner.V1.Type{Code = TypeCode.Date}}, + new StructType.Types.Field {Name = "col_float32", Type = new Spanner.V1.Type{Code = TypeCode.Float32}}, + new StructType.Types.Field {Name = "col_float64", Type = new Spanner.V1.Type{Code = TypeCode.Float64}}, + new StructType.Types.Field {Name = "col_int64", Type = new Spanner.V1.Type{Code = TypeCode.Int64}}, + new StructType.Types.Field {Name = "col_interval", Type = new Spanner.V1.Type{Code = TypeCode.Interval}}, + new StructType.Types.Field {Name = "col_json", Type = new Spanner.V1.Type{Code = TypeCode.Json}}, + new StructType.Types.Field {Name = "col_numeric", Type = new Spanner.V1.Type{Code = TypeCode.Numeric}}, + new StructType.Types.Field {Name = "col_string", Type = new Spanner.V1.Type{Code = TypeCode.String}}, + new StructType.Types.Field {Name = "col_timestamp", Type = new Spanner.V1.Type{Code = TypeCode.Timestamp}}, + new StructType.Types.Field {Name = "col_uuid", Type = new Spanner.V1.Type{Code = TypeCode.Uuid}}, + + new StructType.Types.Field {Name = "col_array_bool", Type = new Spanner.V1.Type{Code = TypeCode.Array, ArrayElementType = new Spanner.V1.Type{Code = TypeCode.Bool}}}, + new StructType.Types.Field {Name = "col_array_bytes", Type = new Spanner.V1.Type{Code = TypeCode.Array, ArrayElementType = new Spanner.V1.Type{Code = TypeCode.Bytes}}}, + new StructType.Types.Field {Name = "col_array_date", Type = new Spanner.V1.Type{Code = TypeCode.Array, ArrayElementType = new Spanner.V1.Type{Code = TypeCode.Date}}}, + new StructType.Types.Field {Name = "col_array_float32", Type = new Spanner.V1.Type{Code = TypeCode.Array, ArrayElementType = new Spanner.V1.Type{Code = TypeCode.Float32}}}, + new StructType.Types.Field {Name = "col_array_float64", Type = new Spanner.V1.Type{Code = TypeCode.Array, ArrayElementType = new Spanner.V1.Type{Code = TypeCode.Float64}}}, + new StructType.Types.Field {Name = "col_array_int64", Type = new Spanner.V1.Type{Code = TypeCode.Array, ArrayElementType = new Spanner.V1.Type{Code = TypeCode.Int64}}}, + new StructType.Types.Field {Name = "col_array_interval", Type = new Spanner.V1.Type{Code = TypeCode.Array, ArrayElementType = new Spanner.V1.Type{Code = TypeCode.Interval}}}, + new StructType.Types.Field {Name = "col_array_json", Type = new Spanner.V1.Type{Code = TypeCode.Array, ArrayElementType = new Spanner.V1.Type{Code = TypeCode.Json}}}, + new StructType.Types.Field {Name = "col_array_numeric", Type = new Spanner.V1.Type{Code = TypeCode.Array, ArrayElementType = new Spanner.V1.Type{Code = TypeCode.Numeric}}}, + new StructType.Types.Field {Name = "col_array_string", Type = new Spanner.V1.Type{Code = TypeCode.Array, ArrayElementType = new Spanner.V1.Type{Code = TypeCode.String}}}, + new StructType.Types.Field {Name = "col_array_timestamp", Type = new Spanner.V1.Type{Code = TypeCode.Array, ArrayElementType = new Spanner.V1.Type{Code = TypeCode.Timestamp}}}, + new StructType.Types.Field {Name = "col_array_uuid", Type = new Spanner.V1.Type{Code = TypeCode.Array, ArrayElementType = new Spanner.V1.Type{Code = TypeCode.Uuid}}}, + } } + }; + } + + public static ResultSet Generate(int numRows) + { + return Generate(GenerateAllTypesRowType(), numRows); + } + + public static ResultSet Generate(StructType rowType, int numRows) + { + var result = new ResultSet + { + Metadata = new ResultSetMetadata + { + RowType = rowType, + } + }; + for (var i = 0; i < numRows; i++) + { + result.Rows.Add(GenerateRow(rowType)); + } + return result; + } + + private static ListValue GenerateRow(StructType rowType) + { + var row = new ListValue(); + foreach (var field in rowType.Fields) + { + row.Values.Add(GenerateValue(field.Type)); + } + return row; + } + + private static Value GenerateValue(Spanner.V1.Type type) + { + switch (type.Code) + { + case TypeCode.Bool: + return Value.ForBool(Random.Shared.NextInt64() % 2 == 0); + case TypeCode.Bytes: + return Value.ForString(GenerateRandomBase64String()); + case TypeCode.Date: + var year = Random.Shared.NextInt64(1600, 2100); + var month = Random.Shared.NextInt64(1, 13); + var day = Random.Shared.NextInt64(1, 29); + return Value.ForString($"{year:D4}-{month:D2}-{day:D2}"); + case TypeCode.Float32: + return Value.ForNumber(Random.Shared.NextSingle() * float.MaxValue); + case TypeCode.Float64: + return Value.ForNumber(Random.Shared.NextDouble() * double.MaxValue); + case TypeCode.Int64: + return Value.ForNumber(Random.Shared.NextInt64()); + case TypeCode.Interval: + var timespan = TimeSpan.FromTicks(Random.Shared.NextInt64()); + return Value.ForString(XmlConvert.ToString(timespan)); + case TypeCode.Json: + return Value.ForString("{\"key\":\"" + GenerateRandomBase64String() + "\"}"); + case TypeCode.Numeric: + var n = Random.Shared.NextInt64(100000000) / 100; + return Value.ForString(n.ToString()); + case TypeCode.String: + return Value.ForString(GenerateRandomBase64String()); + case TypeCode.Timestamp: + var ts = DateTime.Now.AddDays(Random.Shared.NextInt64(2 * 36500) - 36500); + return Value.ForString(XmlConvert.ToString(Convert.ToDateTime(ts, CultureInfo.InvariantCulture), + XmlDateTimeSerializationMode.Utc)); + case TypeCode.Uuid: + var uuid = Guid.NewGuid(); + return Value.ForString(uuid.ToString()); + case TypeCode.Array: + var length = Random.Shared.NextInt64(10); + var values = new Value[length]; + for (var i = 0; i < length; i++) + { + values[i] = GenerateValue(type.ArrayElementType); + } + return Value.ForList(values); + default: + throw new ArgumentOutOfRangeException(nameof(type), type, "unsupported type"); + } + } + + private static string GenerateRandomBase64String() + { + var length = Random.Shared.NextInt64(16, 1024); + var bytes = new byte[length]; + Random.Shared.NextBytes(bytes); + return Convert.ToBase64String(bytes); + } +} \ 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 new file mode 100644 index 00000000..9b64ffab --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/SpannerConverter.cs @@ -0,0 +1,153 @@ +// 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.Collections; +using System.Xml; +using Google.Cloud.Spanner.V1; +using Google.Protobuf.WellKnownTypes; +using static System.Globalization.CultureInfo; +using TypeCode = Google.Cloud.Spanner.V1.TypeCode; + +namespace Google.Cloud.SpannerLib.MockServer; + +internal static class SpannerConverter +{ + internal static Value ToProtobufValue(Spanner.V1.Type type, object? value) + { + if (value == null || value is DBNull) + { + return Value.ForNull(); + } + + switch (type.Code) + { + case TypeCode.Bytes: + if (value is string s) + { + return new Value { StringValue = s }; + } + if (value is byte[] bArray) + { + return new Value { StringValue = Convert.ToBase64String(bArray) }; + } + throw new ArgumentException("TypeCode.Bytes only supports string and byte[]", nameof(value)); + case TypeCode.Bool: + return new Value { BoolValue = Convert.ToBoolean(value) }; + case TypeCode.String: + if (value is DateTime dateTime) + { + // If the value is a DateTime, we always convert using XmlConvert. + // This allows us to convert back to a datetime reliably from the + // resulting string (so roundtrip works properly if the developer uses + // a string as a backing field for a datetime for whatever reason). + return new Value { StringValue = XmlConvert.ToString(dateTime, XmlDateTimeSerializationMode.Utc) }; + } + return new Value { StringValue = Convert.ToString(value, InvariantCulture) }; + case TypeCode.Int64: + return new Value + { + StringValue = Convert.ToInt64(value, InvariantCulture) + .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) + }; + case TypeCode.Date: + return new Value + { + StringValue = StripTimePart( + XmlConvert.ToString(Convert.ToDateTime(value, InvariantCulture), XmlDateTimeSerializationMode.Utc)) + }; + case TypeCode.Json: + if (value is string stringValue) + { + return new Value { StringValue = stringValue }; + } + throw new ArgumentException("JSON values must be given as string"); + case TypeCode.Array: + if (value is IEnumerable enumerable) + { + return Value.ForList( + enumerable.Cast() + .Select(x => ToProtobufValue(type.ArrayElementType, x)).ToArray()); + } + throw new ArgumentException("The given array instance needs to implement IEnumerable."); + + case TypeCode.Struct: + throw new ArgumentException("Struct values are not supported"); + + case TypeCode.Numeric: + if (value is SpannerNumeric spannerNumeric) + { + return Value.ForString(spannerNumeric.ToString()); + } + if (value is string str) + { + return Value.ForString(str); + } + if (value is float || value is double || value is decimal) + { + // We throw if there's a loss of precision. We could use + // LossOfPrecisionHandling.Truncate but GoogleSQL documentation requests to + // use half-away-from-zero rounding but the SpannerNumeric implementation + // truncates instead. + return Value.ForString(SpannerNumeric.FromDecimal( + Convert.ToDecimal(value, InvariantCulture), LossOfPrecisionHandling.Throw).ToString()); + } + if (value is sbyte || value is short || value is int || value is long) + { + SpannerNumeric numericValue = Convert.ToInt64(value, InvariantCulture); + return Value.ForString(numericValue.ToString()); + } + if (value is byte || value is ushort || value is uint || value is ulong) + { + SpannerNumeric numericValue = Convert.ToUInt64(value, InvariantCulture); + 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); + } + } + + private static string StripTimePart(string rfc3339String) + { + if (!string.IsNullOrEmpty(rfc3339String)) + { + int timeIndex = rfc3339String.IndexOf('T'); + if (timeIndex != -1) + { + return rfc3339String.Substring(0, timeIndex); + } + } + return rfc3339String; + } +} \ No newline at end of file diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/SpannerMockServerFixture.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/SpannerMockServerFixture.cs new file mode 100644 index 00000000..c9d21e6a --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/SpannerMockServerFixture.cs @@ -0,0 +1,80 @@ +// 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.Net; +using Microsoft.AspNetCore; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Hosting.Server.Features; +using Microsoft.AspNetCore.Server.Kestrel.Core; +using Microsoft.Extensions.Configuration; + +namespace Google.Cloud.SpannerLib.MockServer; + +public class SpannerMockServerFixture : IDisposable +{ + private readonly Random _random = new (); + + private readonly IWebHost _host; + + public MockSpannerService SpannerMock { get; } + public MockDatabaseAdminService DatabaseAdminMock { get; } + public string Endpoint => $"localhost:{Port}"; + public string Host => "localhost"; + public int Port { get; } + + public SpannerMockServerFixture() + { + SpannerMock = new MockSpannerService(); + SpannerMock.AddOrUpdateStatementResult( + "select option_value from information_schema.database_options where option_name='database_dialect'", + StatementResult.CreateResultSet( + new List> + { + Tuple.Create(Spanner.V1.TypeCode.String, "option_value"), + }, + new List + { + new object[] { "GOOGLE_STANDARD_SQL" }, + })); + DatabaseAdminMock = new MockDatabaseAdminService(); + + var endpoint = IPEndPoint.Parse("127.0.0.1:0"); + var builder = WebHost.CreateDefaultBuilder(); + builder.ConfigureAppConfiguration(configurationBuilder => configurationBuilder.AddJsonFile("appsettings.json", true)); + builder.UseStartup(_ => new MockServerStartup(SpannerMock, DatabaseAdminMock)); + builder.ConfigureKestrel(options => + { + // Setup a HTTP/2 endpoint without TLS. + options.Listen(endpoint, o => o.Protocols = HttpProtocols.Http2); + }); + _host = builder.Build(); + _host.Start(); + var address = _host.ServerFeatures.Get()!.Addresses.First(); + var uri = new Uri(address); + Port = uri.Port; + } + + public void Dispose() + { + _host.StopAsync().Wait(); + } + + public long RandomLong(long min = 0, long max = long.MaxValue) + { + var buf = new byte[8]; + _random.NextBytes(buf); + var longRand = BitConverter.ToInt64(buf, 0); + return (Math.Abs(longRand % (max - min)) + min); + } +} diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/spannerlib-dotnet-mockserver.csproj b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/spannerlib-dotnet-mockserver.csproj new file mode 100644 index 00000000..fef76447 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/spannerlib-dotnet-mockserver.csproj @@ -0,0 +1,20 @@ + + + + net8.0 + Google.Cloud.SpannerLib.MockServer + enable + enable + Alpha.Google.Cloud.SpannerLib.MockServer + 1.0.0-alpha.20251009140944 + Google + default + + + + + + + + + diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native-impl/README.md b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native-impl/README.md new file mode 100644 index 00000000..dd1b5421 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native-impl/README.md @@ -0,0 +1,4 @@ +# SpannerLib .NET Native Wrapper Library + +This is a .NET wrapper around the native SpannerLib shared library that is safe to add as a project reference to other +projects. diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native-impl/SharedLibSpanner.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native-impl/SharedLibSpanner.cs new file mode 100644 index 00000000..dfa9c2dd --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native-impl/SharedLibSpanner.cs @@ -0,0 +1,237 @@ +// 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.Threading; +using System.Threading.Tasks; +using Google.Cloud.Spanner.V1; +using Google.Protobuf; +using Google.Protobuf.WellKnownTypes; +using Google.Rpc; + +namespace Google.Cloud.SpannerLib.Native.Impl; + +/// +/// An implementation of the generic ISpannerLib interface that loads SpannerLib as a native library into this process. +/// +public class SharedLibSpanner : ISpannerLib +{ + private MessageHandler ExecuteLibraryFunction(Func func) + { + var handler = new MessageHandler(func()); + if (handler.HasError()) + { + try + { + throw CreateException(handler); + } + finally + { + handler.Dispose(); + } + } + return handler; + } + + private SpannerException CreateException(MessageHandler handler) + { + if (handler.Length > 0) + { + var status = Status.Parser.ParseFrom(handler.Value()); + return new SpannerException(status); + } + return new SpannerException(new Status {Code = handler.Code(), Message = "Unknown error"}); + } + + private void ExecuteAndReleaseLibraryFunction(Func func) + { + using var handler = new MessageHandler(func()); + if (handler.HasError()) + { + throw CreateException(handler); + } + } + + public Pool CreatePool(string connectionString) + { + using var handler = ExecuteLibraryFunction(() => + { + using var goDsn = new GoString(connectionString); + return SpannerLib.CreatePool(goDsn); + }); + return new Pool(this, handler.ObjectId()); + } + + public void ClosePool(Pool pool) + { + ExecuteAndReleaseLibraryFunction(() => SpannerLib.ClosePool(pool.Id)); + } + + public Connection CreateConnection(Pool pool) + { + using var handler = ExecuteLibraryFunction(() => SpannerLib.CreateConnection(pool.Id)); + return new Connection(pool, handler.ObjectId()); + } + + public void CloseConnection(Connection connection) + { + ExecuteAndReleaseLibraryFunction(() => SpannerLib.CloseConnection(connection.Pool.Id, connection.Id)); + } + + public CommitResponse? WriteMutations(Connection connection, + BatchWriteRequest.Types.MutationGroup mutations) + { + using var handler = ExecuteLibraryFunction(() => + { + var mutationsBytes = mutations.ToByteArray(); + using var goMutations = DisposableGoSlice.Create(mutationsBytes); + return SpannerLib.WriteMutations(connection.Pool.Id, connection.Id, goMutations.GoSlice); + }); + if (handler.Length == 0) + { + return null; + } + return CommitResponse.Parser.ParseFrom(handler.Value()); + } + + public Task WriteMutationsAsync(Connection connection, + BatchWriteRequest.Types.MutationGroup mutations, CancellationToken cancellationToken = default) + { + return Task.Run(() => WriteMutations(connection, mutations), cancellationToken); + } + + public Rows Execute(Connection connection, ExecuteSqlRequest statement) + { + using var handler = ExecuteLibraryFunction(() => + { + var statementBytes = statement.ToByteArray(); + using var goStatement = DisposableGoSlice.Create(statementBytes); + return SpannerLib.Execute(connection.Pool.Id, connection.Id, goStatement.GoSlice); + }); + return new Rows(connection, handler.ObjectId()); + } + + public Task ExecuteAsync(Connection connection, ExecuteSqlRequest statement, CancellationToken cancellationToken) + { + return Task.Run(() => Execute(connection, statement), cancellationToken); + } + + public long[] ExecuteBatch(Connection connection, ExecuteBatchDmlRequest statements) + { + using var handler = ExecuteLibraryFunction(() => + { + var statementsBytes = statements.ToByteArray(); + using var goStatements = DisposableGoSlice.Create(statementsBytes); + return SpannerLib.ExecuteBatch(connection.Pool.Id, connection.Id, goStatements.GoSlice); + }); + if (handler.Length == 0) + { + return []; + } + + var response = ExecuteBatchDmlResponse.Parser.ParseFrom(handler.Value()); + 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 Task ExecuteBatchAsync(Connection connection, ExecuteBatchDmlRequest statements, CancellationToken cancellationToken = default) + { + return Task.Run(() => ExecuteBatch(connection, statements), cancellationToken); + } + + public ResultSetMetadata? Metadata(Rows rows) + { + using var handler = ExecuteLibraryFunction(() => SpannerLib.Metadata(rows.SpannerConnection.Pool.Id, rows.SpannerConnection.Id, rows.Id)); + return handler.Length == 0 ? null : ResultSetMetadata.Parser.ParseFrom(handler.Value()); + } + + public async Task MetadataAsync(Rows rows, CancellationToken cancellationToken = default) + { + return await Task.Run(() => Metadata(rows), cancellationToken); + } + + public ResultSetStats? Stats(Rows rows) + { + using var handler = ExecuteLibraryFunction(() => SpannerLib.ResultSetStats(rows.SpannerConnection.Pool.Id, rows.SpannerConnection.Id, rows.Id)); + return handler.Length == 0 ? null : ResultSetStats.Parser.ParseFrom(handler.Value()); + } + + public ListValue? Next(Rows rows, int numRows, ISpannerLib.RowEncoding encoding) + { + using var handler = ExecuteLibraryFunction(() => SpannerLib.Next(rows.SpannerConnection.Pool.Id, rows.SpannerConnection.Id, rows.Id, numRows, (int) encoding)); + return handler.Length == 0 ? null : ListValue.Parser.ParseFrom(handler.Value()); + } + + public async Task NextAsync(Rows rows, int numRows, ISpannerLib.RowEncoding encoding, CancellationToken cancellationToken = default) + { + return await Task.Run(() => Next(rows, numRows, encoding), cancellationToken); + } + + 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(() => + { + var optionsBytes = transactionOptions.ToByteArray(); + using var goOptions = DisposableGoSlice.Create(optionsBytes); + return SpannerLib.BeginTransaction(connection.Pool.Id, connection.Id, goOptions.GoSlice); + }); + } + + public CommitResponse? Commit(Connection connection) + { + using var handler = ExecuteLibraryFunction(() => SpannerLib.Commit(connection.Pool.Id, connection.Id)); + 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-native-impl/spannerlib-dotnet-native-impl.csproj b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native-impl/spannerlib-dotnet-native-impl.csproj new file mode 100644 index 00000000..f7b95396 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native-impl/spannerlib-dotnet-native-impl.csproj @@ -0,0 +1,21 @@ + + + + netstandard2.1 + Google.Cloud.SpannerLib.Native.Impl + enable + default + Alpha.Google.Cloud.SpannerLib.NativeImpl + 1.0.0-alpha.20251009140944 + Google + + + + + + + + + + + diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native/.gitignore b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native/.gitignore new file mode 100644 index 00000000..1aa3ee1c --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native/.gitignore @@ -0,0 +1 @@ +libraries diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native/GoSlice.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native/GoSlice.cs new file mode 100644 index 00000000..d8e3004b --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native/GoSlice.cs @@ -0,0 +1,76 @@ +// 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.Runtime.InteropServices; + +namespace Google.Cloud.SpannerLib.Native; + +/// +/// Wraps a GoSlice and implements the IDisposable interface. +/// +public class DisposableGoSlice : IDisposable +{ + private readonly GCHandle? _handle; + public GoSlice GoSlice { get; } + + public static DisposableGoSlice Create(byte[]? value) + { + var (handle, length, capacity) = Pin(value); + return new DisposableGoSlice(handle, + new GoSlice(handle?.AddrOfPinnedObject() ?? IntPtr.Zero, length, capacity)); + } + + private DisposableGoSlice(GCHandle? handle, GoSlice goSlice) + { + _handle = handle; + GoSlice = goSlice; + } + + private static (GCHandle?, int, int) Pin(byte[]? value) + { + if (value is null) + { + return (null, 0, 0); + } + + var length = value.Length; + var handle = GCHandle.Alloc(value, GCHandleType.Pinned); + return (handle, length, length); + } + + public void Dispose() + { + _handle?.Free(); + } + +} + +/// +/// GoSlice is the .NET equivalent of a Go []byte slice. +/// +public struct GoSlice +{ + public IntPtr Pointer; + public long Length; + public long Capacity; + + public GoSlice(IntPtr pointer, long length, long capacity) + { + Pointer = pointer; + Length = length; + Capacity = capacity; + } + +} \ No newline at end of file diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native/GoString.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native/GoString.cs new file mode 100644 index 00000000..44e1c7fc --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native/GoString.cs @@ -0,0 +1,54 @@ +// 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.Runtime.InteropServices; +using System.Text; + +namespace Google.Cloud.SpannerLib.Native; + +/// +/// GoString is the .NET equivalent of a Go string. +/// +public unsafe struct GoString : IDisposable +{ + IntPtr Pointer { get; } + internal long Length; + + public GoString(string value) + { + (Pointer, Length) = StringToHGlobalUtf8(value); + } + + private static (IntPtr, int) StringToHGlobalUtf8(string? s) + { + if (s is null) + { + return (IntPtr.Zero, 0); + } + + var nb = Encoding.UTF8.GetMaxByteCount(s.Length); + var ptr = Marshal.AllocHGlobal(nb); + + var pbMem = (byte*)ptr; + var nbWritten = Encoding.UTF8.GetBytes(s, new Span(pbMem, nb)); + + return (ptr, nbWritten); + } + + public void Dispose() + { + Marshal.FreeHGlobal(Pointer); + } +} \ No newline at end of file diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native/Message.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native/Message.cs new file mode 100644 index 00000000..89235e08 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native/Message.cs @@ -0,0 +1,45 @@ +// 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. + +namespace Google.Cloud.SpannerLib.Native; + +/// +/// Message is the .NET implementation of the generic Message structure that is returned by all functions in SpannerLib. +/// +public unsafe struct Message +{ +#pragma warning disable CS0649 // Field is never assigned to, and will always have its default value + /// + /// The memory pinner identifier. If non-zero, the caller must call Release(Pinner) to release the memory that was + /// held by this message. + /// + public long Pinner; + /// + /// The result code of the function call. A non-zero value indicates an error. + /// + public int Code; + /// + /// The ID of the object that was created. Zero for functions that do not create an object. + /// + public long ObjectId; + /// + /// The length of the returned data. Zero for functions that do not return data. + /// + public int Length; + /// + /// A pointer to the returned data. Null for functions that do not return data. + /// + public void* Pointer; +#pragma warning restore CS0649 // Field is never assigned to, and will always have its default value +} \ No newline at end of file diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native/MessageHandler.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native/MessageHandler.cs new file mode 100644 index 00000000..c565ba58 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native/MessageHandler.cs @@ -0,0 +1,73 @@ +// 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.Data; +using System.Text; + +namespace Google.Cloud.SpannerLib.Native; + +/// +/// MessageHandler is a wrapper class around Message that implements the IDisposable interface. +/// +/// The message that should be wrapped +public class MessageHandler(Message message) : IDisposable +{ + private Message Message { get; } = message; + + public long Length => Message.Length; + + /// The result code of the function call + public int Code() + { + return Message.Code; + } + + /// The ID of the object that was created, or zero if no object was created. + public long ObjectId() + { + return Message.ObjectId; + } + + /// True if the result code is non-zero, and otherwise false. + public bool HasError() + { + return Message.Code != 0; + } + + /// The data in this message as a .NET string + internal string ValueAsString() + { + unsafe + { + Span tmp = new(Message.Pointer, Message.Length); + return Encoding.UTF8.GetString(tmp); + } + } + + /// A view of the underlying data + public unsafe ReadOnlySpan Value() + { + return new(Message.Pointer, Message.Length); + } + + public void Dispose() + { + var code = SpannerLib.Release(Message.Pinner); + if (code != 0) + { + throw new Exception("Failed to release message"); + } + } +} \ No newline at end of file diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native/README.md b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native/README.md new file mode 100644 index 00000000..a3f322fd --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native/README.md @@ -0,0 +1,7 @@ +# SpannerLib .NET Native Wrapper + +This is a .NET wrapper around the native SpannerLib shared library. + +Note that this project should not be added as a project reference to any other projects due to how .NET loads +native libraries. Instead, use the build.sh file in this folder to build and install the library to a local nuget +repository, and add a reference to that library instead. diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native/SpannerLib.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native/SpannerLib.cs new file mode 100644 index 00000000..2346c96d --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native/SpannerLib.cs @@ -0,0 +1,85 @@ +// 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.Runtime.InteropServices; + +namespace Google.Cloud.SpannerLib.Native; + +/// +/// This class contains the mapping of functions in SpannerLib to .NET code. +/// +public static class SpannerLib +{ + private const string SpannerLibName = "spannerlib"; + + [DllImport(SpannerLibName, EntryPoint = "Release")] + [DefaultDllImportSearchPaths(DllImportSearchPath.AssemblyDirectory)] + public static extern int Release(long pinner); + + [DllImport(SpannerLibName, EntryPoint = "CreatePool")] + [DefaultDllImportSearchPaths(DllImportSearchPath.AssemblyDirectory)] + public static extern Message CreatePool(GoString dsn); + + [DllImport(SpannerLibName, EntryPoint = "ClosePool")] + [DefaultDllImportSearchPaths(DllImportSearchPath.AssemblyDirectory)] + public static extern Message ClosePool(long poolId); + + [DllImport(SpannerLibName, EntryPoint = "CreateConnection")] + [DefaultDllImportSearchPaths(DllImportSearchPath.AssemblyDirectory)] + public static extern Message CreateConnection(long poolId); + + [DllImport(SpannerLibName, EntryPoint = "CloseConnection")] + [DefaultDllImportSearchPaths(DllImportSearchPath.AssemblyDirectory)] + public static extern Message CloseConnection(long poolId, long connectionId); + + [DllImport(SpannerLibName, EntryPoint = "WriteMutations")] + [DefaultDllImportSearchPaths(DllImportSearchPath.AssemblyDirectory)] + public static extern Message WriteMutations(long poolId, long connectionId, GoSlice mutations); + + [DllImport(SpannerLibName, EntryPoint = "Execute")] + [DefaultDllImportSearchPaths(DllImportSearchPath.AssemblyDirectory)] + public static extern Message Execute(long poolId, long connectionId, GoSlice statement); + + [DllImport(SpannerLibName, EntryPoint = "ExecuteBatch")] + [DefaultDllImportSearchPaths(DllImportSearchPath.AssemblyDirectory)] + public static extern Message ExecuteBatch(long poolId, long connectionId, GoSlice statements); + + [DllImport(SpannerLibName, EntryPoint = "Metadata")] + [DefaultDllImportSearchPaths(DllImportSearchPath.AssemblyDirectory)] + public static extern Message Metadata(long poolId, long connectionId, long rowsId); + + [DllImport(SpannerLibName, EntryPoint = "ResultSetStats")] + [DefaultDllImportSearchPaths(DllImportSearchPath.AssemblyDirectory)] + public static extern Message ResultSetStats(long poolId, long connectionId, long rowsId); + + [DllImport(SpannerLibName, EntryPoint = "Next")] + [DefaultDllImportSearchPaths(DllImportSearchPath.AssemblyDirectory)] + public static extern Message Next(long poolId, long connectionId, long rowsId, int numRows, int encodeRowOption); + + [DllImport(SpannerLibName, EntryPoint = "CloseRows")] + [DefaultDllImportSearchPaths(DllImportSearchPath.AssemblyDirectory)] + public static extern Message CloseRows(long poolId, long connectionId, long rowsId); + + [DllImport(SpannerLibName, EntryPoint = "BeginTransaction")] + [DefaultDllImportSearchPaths(DllImportSearchPath.AssemblyDirectory)] + public static extern Message BeginTransaction(long poolId, long connectionId, GoSlice transactionOptions); + + [DllImport(SpannerLibName, EntryPoint = "Commit")] + [DefaultDllImportSearchPaths(DllImportSearchPath.AssemblyDirectory)] + public static extern Message Commit(long poolId, long connectionId); + + [DllImport(SpannerLibName, EntryPoint = "Rollback")] + [DefaultDllImportSearchPaths(DllImportSearchPath.AssemblyDirectory)] + public static extern Message Rollback(long poolId, long connectionId); +} \ No newline at end of file diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native/build.sh b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native/build.sh new file mode 100755 index 00000000..a09dc658 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native/build.sh @@ -0,0 +1,14 @@ +# Builds the shared library and the native .NET wrapper and install the latter in a local nuget repository. + +# Determine OS + Arch +export DEST=libraries/any/spannerlib +mkdir -p libraries/any + +# Clear all local nuget cache +dotnet nuget locals --clear all +go build -o ../../../shared/spannerlib.so -buildmode=c-shared ../../../shared/shared_lib.go +cp ../../../shared/spannerlib.so $DEST +dotnet pack +dotnet nuget remove source local 2>/dev/null +dotnet nuget add source "$PWD"/bin/Release --name local +dotnet restore ../spannerlib-dotnet-native-impl diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native/spannerlib-dotnet-native.csproj b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native/spannerlib-dotnet-native.csproj new file mode 100644 index 00000000..1681b056 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native/spannerlib-dotnet-native.csproj @@ -0,0 +1,21 @@ + + + + netstandard2.1 + Google.Cloud.SpannerLib.Native + enable + true + default + Alpha.Google.Cloud.SpannerLib.Native + .NET wrapper for the native SpannerLib shared library + Google + 1.0.0-alpha.20251009140944 + + + + + + + + + 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 new file mode 100644 index 00000000..81358026 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/BasicTests.cs @@ -0,0 +1,290 @@ +// 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.V1; +using Google.Cloud.SpannerLib.MockServer; +using Google.Cloud.SpannerLib.Native.Impl; +using Google.Protobuf.WellKnownTypes; +using Google.Rpc; +using Grpc.Core; +using Status = Grpc.Core.Status; +using TypeCode = Google.Cloud.Spanner.V1.TypeCode; + +namespace Google.Cloud.SpannerLib.Tests; + +public class BasicTests : AbstractMockServerTests +{ + + [Test] + public void TestCreatePool([Values] LibType libType) + { + var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); + pool.Close(); + } + + [Test] + public void TestCreateConnection([Values] LibType libType) + { + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); + var connection = pool.CreateConnection(); + connection.Close(); + } + + [Test] + public void TestExecuteQuery([Values] LibType libType) + { + 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()) + { + Assert.That(row.Values.Count, Is.EqualTo(1)); + Assert.That(row.Values[0].HasStringValue); + Assert.That(row.Values[0].StringValue, Is.EqualTo("1")); + } + } + + [Test] + 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")))); + + 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)); + Assert.That(exception.Message, Is.EqualTo("Table not found")); + } + + [Test] + public void TestExecuteParameterizedQuery([Values] LibType libType) + { + var sql = "select col_varchar from all_types where col_bigint=$1::bigint"; + Fixture.SpannerMock.AddOrUpdateStatementResult(sql, + StatementResult.CreateSingleColumnResultSet( + new Spanner.V1.Type { Code = TypeCode.String }, + "col_varchar", "some-value")); + + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); + using var connection = pool.CreateConnection(); + var parameters = new Struct + { + Fields = + { + ["p1"] = Value.ForString("1") + } + }; + using var rows = connection.Execute(new ExecuteSqlRequest + { + Sql = sql, + Params = parameters, + }); + for (var row = rows.Next(); row != null; row = rows.Next()) + { + Assert.That(row.Values.Count, Is.EqualTo(1)); + Assert.That(row.Values[0].HasStringValue); + Assert.That(row.Values[0].StringValue, Is.EqualTo("some-value")); + } + } + + [Test] + public void TestQueryParameterStartingWithUnderscore([Values] LibType libType) + { + var sql = "select col_string from all_types where col_int64=@__id"; + Fixture.SpannerMock.AddOrUpdateStatementResult(sql, + StatementResult.CreateSingleColumnResultSet( + new Spanner.V1.Type { Code = TypeCode.String }, + "col_string", "some-value")); + + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); + using var connection = pool.CreateConnection(); + var parameters = new Struct + { + Fields = + { + ["__id"] = Value.ForString("1") + } + }; + using var rows = connection.Execute(new ExecuteSqlRequest + { + Sql = sql, + Params = parameters, + }); + for (var row = rows.Next(); row != null; row = rows.Next()) + { + Assert.That(row.Values.Count, Is.EqualTo(1)); + Assert.That(row.Values[0].HasStringValue); + Assert.That(row.Values[0].StringValue, Is.EqualTo("some-value")); + } + } + + [Test] + [Ignore("execute async disabled for now")] + public async Task TestExecuteQueryAsync([Values] LibType libType) + { + 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; + Assert.That(metadata!.RowType.Fields.Count, Is.EqualTo(1)); + for (var row = await rows.NextAsync(); row != null; row = await rows.NextAsync()) + { + Assert.That(row.Values.Count, Is.EqualTo(1)); + Assert.That(row.Values[0].HasStringValue); + Assert.That(row.Values[0].StringValue, Is.EqualTo("1")); + } + } + + [Test] + public void TestReadOnlyTransaction([Values] LibType libType) + { + 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" }); + for (var row = rows.Next(); row != null; row = rows.Next()) + { + Assert.That(row.Values.Count, Is.EqualTo(1)); + Assert.That(row.Values[0].HasStringValue); + Assert.That(row.Values[0].StringValue, Is.EqualTo("1")); + } + var commitResponse = connection.Commit(); + Assert.That(commitResponse, Is.Null); + } + + [Test] + 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(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 }); + Assert.That(rows.UpdateCount, Is.EqualTo(1)); + var commitResponse = connection.Commit(); + Assert.That(commitResponse, Is.Not.Null); + } + + [Test] + [Ignore("for local testing")] + public void TestBenchmarkNativeSpannerLib() + { + var totalRowCount = 1000000; + Fixture.SpannerMock.AddOrUpdateStatementResult( + "select * from all_types", + StatementResult.CreateResultSet( + new List> + { + Tuple.Create(TypeCode.String, "col1"), + Tuple.Create(TypeCode.String, "col2"), + Tuple.Create(TypeCode.String, "col3"), + Tuple.Create(TypeCode.String, "col4"), + Tuple.Create(TypeCode.String, "col5"), + }, + GenerateRandomValues(totalRowCount))); + + var spanner = new SharedLibSpanner(); + using var pool = Pool.Create(spanner, ConnectionString); + using var connection = pool.CreateConnection(); + + var stopwatch = Stopwatch.StartNew(); + using var rows = connection.Execute(new ExecuteSqlRequest { Sql = "select * from all_types" }); + var rowCount = 0; + for (var row = rows.Next(); row != null; row = rows.Next()) + { + rowCount++; + } + Assert.That(rowCount, Is.EqualTo(totalRowCount)); + stopwatch.Stop(); + Console.WriteLine(stopwatch.Elapsed); + } + + [Test] + [Ignore("for local testing")] + public void TestBenchmarkDotnetGrpcClient() + { + var totalRowCount = 1000000; + Fixture.SpannerMock.AddOrUpdateStatementResult( + "select * from all_types", + StatementResult.CreateResultSet( + new List> + { + Tuple.Create(TypeCode.String, "col1"), + Tuple.Create(TypeCode.String, "col2"), + Tuple.Create(TypeCode.String, "col3"), + Tuple.Create(TypeCode.String, "col4"), + Tuple.Create(TypeCode.String, "col5"), + }, + GenerateRandomValues(totalRowCount))); + var totalValueCount = totalRowCount * 5; + var builder = new SpannerClientBuilder + { + Endpoint = $"http://{Fixture.Endpoint}", + ChannelCredentials = ChannelCredentials.Insecure + }; + SpannerClient client = builder.Build(); + var request = new CreateSessionRequest + { + Database = "projects/p1/instances/i1/databases/d1", + Session = new Session() + }; + var session = client.CreateSession(request); + Assert.That(session, Is.Not.Null); + + var stopwatch = Stopwatch.StartNew(); + var executeRequest = new ExecuteSqlRequest + { + Sql = "select * from all_types", + Session = session.Name, + }; + var stream = client.ExecuteStreamingSql(executeRequest); + var valueCount = 0; + foreach (var result in stream.GetResponseStream().ToBlockingEnumerable()) + { + Assert.That(result, Is.Not.Null); + valueCount += result.Values.Count; + if (result.ChunkedValue) + { + valueCount--; + } + } + Assert.That(valueCount, Is.EqualTo(totalValueCount)); + stopwatch.Stop(); + Console.WriteLine(stopwatch.Elapsed); + } + + private List GenerateRandomValues(int count) + { + var result = new List(count); + for (var i = 0; i < count; i++) + { + result.Add([ + GenerateRandomString(), + GenerateRandomString(), + GenerateRandomString(), + GenerateRandomString(), + GenerateRandomString(), + ]); + } + return result; + } + + private string GenerateRandomString() + { + return Guid.NewGuid().ToString(); + } +} diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/BatchTests.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/BatchTests.cs new file mode 100644 index 00000000..8428e941 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/BatchTests.cs @@ -0,0 +1,70 @@ +// 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.Spanner.Admin.Database.V1; +using Google.Cloud.Spanner.V1; +using Google.Cloud.SpannerLib.MockServer; +using Google.Protobuf.WellKnownTypes; + +namespace Google.Cloud.SpannerLib.Tests; + +public class BatchTests : AbstractMockServerTests +{ + [Test] + public void TestBatchDml([Values] LibType libType) + { + var insert = "insert into test (id, value) values (@id, @value)"; + Fixture.SpannerMock.AddOrUpdateStatementResult(insert, StatementResult.CreateUpdateCount(1)); + + 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 + { + Fields = + { + ["id"] = Value.ForString("1"), + ["value"] = Value.ForString("One"), + }, + }}, + new ExecuteBatchDmlRequest.Types.Statement {Sql = insert, Params = new Struct + { + Fields = + { + ["id"] = Value.ForString("2"), + ["value"] = Value.ForString("Two"), + }, + }}, + ]); + Assert.That(updateCounts, Is.EqualTo(new long[]{1,1})); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + } + + [Test] + 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(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([ + new ExecuteBatchDmlRequest.Types.Statement {Sql = "create table my_table (id int64 primary key, value string(max))"}, + 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)); + } + +} \ 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 new file mode 100644 index 00000000..b6bc88ad --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/ConnectionTests.cs @@ -0,0 +1,152 @@ +// 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.Spanner.V1; +using Google.Protobuf.WellKnownTypes; +using Google.Rpc; + +namespace Google.Cloud.SpannerLib.Tests; + +public class ConnectionTests : AbstractMockServerTests +{ + [Test] + public void TestCreateConnection([Values] LibType libType) + { + 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)); + } + + [Test] + public void TestCreateTwoConnections([Values] LibType libType) + { + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); + using var connection1 = pool.CreateConnection(); + using var connection2 = pool.CreateConnection(); + Assert.That(connection1, Is.Not.Null); + Assert.That(connection2, Is.Not.Null); + 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)); + } + + [Test] + public void TestWriteMutations([Values] LibType libType) + { + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); + using var connection = pool.CreateConnection(); + var insertMutation = new Mutation + { + Insert = new Mutation.Types.Write + { + Table = "my_table", + Columns = { new[] { "id", "value" } }, + } + }; + insertMutation.Insert.Values.AddRange([ + new ListValue{Values = { Value.ForString("1"), Value.ForString("One") }}, + new ListValue{Values = { Value.ForString("2"), Value.ForString("Two") }} + ]); + var insertOrUpdateMutation = new Mutation + { + InsertOrUpdate = new Mutation.Types.Write + { + Table = "my_table", + Columns = { new[] { "id", "value" } }, + } + }; + insertOrUpdateMutation.InsertOrUpdate.Values.AddRange([ + new ListValue{Values = { Value.ForString("0"), Value.ForString("Zero") }} + ]); + + var response = connection.WriteMutations(new BatchWriteRequest.Types.MutationGroup + { + Mutations = { new []{insertMutation, insertOrUpdateMutation}} + }); + 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(commit, Is.Not.Null); + Assert.That(commit.Mutations.Count, Is.EqualTo(2)); + Assert.That(commit.Mutations[0].Insert.Values.Count, Is.EqualTo(2)); + Assert.That(commit.Mutations[1].InsertOrUpdate.Values.Count, Is.EqualTo(1)); + } + + [Test] + public void TestWriteMutationsInTransaction([Values] LibType libType) + { + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); + using var connection = pool.CreateConnection(); + connection.BeginTransaction(new TransactionOptions()); + + var insertMutation = new Mutation + { + Insert = new Mutation.Types.Write + { + Table = "my_table", + Columns = { new[] { "id", "value" } }, + } + }; + insertMutation.Insert.Values.AddRange([ + new ListValue{Values = { Value.ForString("1"), Value.ForString("One") }} + ]); + var response = connection.WriteMutations(new BatchWriteRequest.Types.MutationGroup + { + Mutations = { new []{insertMutation}} + }); + // The response should be null, as the mutations are only buffered in the current transaction. + Assert.That(response, Is.Null); + // Committing the transaction should send the mutations to Spanner. + 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(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([Values] LibType libType) + { + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); + using var connection = pool.CreateConnection(); + connection.BeginTransaction(new TransactionOptions{ReadOnly = new TransactionOptions.Types.ReadOnly()}); + + var insertMutation = new Mutation + { + Insert = new Mutation.Types.Write + { + Table = "my_table", + Columns = { new[] { "id", "value" } }, + } + }; + insertMutation.Insert.Values.AddRange([ + new ListValue{Values = { Value.ForString("1"), Value.ForString("One") }} + ]); + var exception = Assert.Throws(() => connection.WriteMutations( + new BatchWriteRequest.Types.MutationGroup + { + Mutations = { new[] { insertMutation } } + })); + Assert.That(exception.Code, Is.EqualTo(Code.FailedPrecondition)); + } +} \ No newline at end of file diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/PoolTests.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/PoolTests.cs new file mode 100644 index 00000000..c33ffdbb --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/PoolTests.cs @@ -0,0 +1,43 @@ +// 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.Spanner.V1; +using Google.Cloud.SpannerLib.MockServer; +using Google.Rpc; +using Grpc.Core; + +namespace Google.Cloud.SpannerLib.Tests; + +public class PoolTests : AbstractMockServerTests +{ + [Test] + public void TestCreatePool([Values] LibType libType) + { + 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)); + } + + [Test] + public void TestCreatePoolFails([Values] LibType libType) + { + Fixture.SpannerMock.AddOrUpdateExecutionTime(nameof(Fixture.SpannerMock.CreateSession), ExecutionTime.CreateException(StatusCode.PermissionDenied, "Not allowed")); + + SpannerException exception = Assert.Throws(() => Pool.Create(SpannerLibDictionary[libType], ConnectionString)); + Assert.That(exception.Code, Is.EqualTo(Code.PermissionDenied)); + } + +} \ No newline at end of file diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/README.md b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/README.md new file mode 100644 index 00000000..acbdfb3c --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/README.md @@ -0,0 +1,3 @@ +# .NET SpannerLib Tests + +This project contains tests for the .NET wrapper of SpannerLib. diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/RowsTests.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/RowsTests.cs new file mode 100644 index 00000000..a4d0d253 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/RowsTests.cs @@ -0,0 +1,212 @@ +// 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.Spanner.Admin.Database.V1; +using Google.Cloud.Spanner.V1; +using Google.Cloud.SpannerLib.MockServer; +using Google.Rpc; +using TypeCode = Google.Cloud.Spanner.V1.TypeCode; + +namespace Google.Cloud.SpannerLib.Tests; + +public class RowsTests : AbstractMockServerTests +{ + [Test] + public void TestExecuteSelect1([Values] LibType libType) + { + 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; + while (rows.Next() is { } row) + { + numRows++; + Assert.That(row.Values.Count, Is.EqualTo(1)); + Assert.That(row.Values[0].HasStringValue); + Assert.That(row.Values[0].StringValue, Is.EqualTo("1")); + } + Assert.That(numRows, Is.EqualTo(1)); + } + + [Test] + 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)); + + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); + using var connection = pool.CreateConnection(); + using var rows = connection.Execute(new ExecuteSqlRequest { Sql = "select * from random" }); + + var rowCount = 0; + while (rows.Next() is { } row) + { + rowCount++; + Assert.That(row.Values.Count, Is.EqualTo(rowType.Fields.Count)); + } + 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(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 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)); + + 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(request.Transaction?.Begin?.ReadWrite, Is.Not.Null); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + } + + [Test] + 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(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)); + } + + [Test] + public void TestExecuteClientSideStatement([Values] LibType libType) + { + 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" })) + { + var row = rows.Next(); + Assert.That(row, Is.Not.Null); + Assert.That(row.Values.Count, Is.EqualTo(1)); + Assert.That(row.Values[0].HasBoolValue); + Assert.That(row.Values[0].BoolValue, Is.True); + // There should be only one row. + Assert.That(rows.Next(), Is.Null); + } + // Change the value of the variable and re-read it. + using (var rows = connection.Execute(new ExecuteSqlRequest { Sql = "set retry_aborts_internally = false" })) + { + Assert.That(rows.Next(), Is.Null); + } + using (var rows = connection.Execute(new ExecuteSqlRequest { Sql = "show variable retry_aborts_internally" })) + { + var row = rows.Next(); + Assert.That(row!.Values[0].BoolValue, Is.False); + Assert.That(rows.Next(), Is.Null); + } + } + +} \ No newline at end of file diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/TransactionTests.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/TransactionTests.cs new file mode 100644 index 00000000..010fe5bd --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/TransactionTests.cs @@ -0,0 +1,137 @@ +// 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.Spanner.V1; +using Google.Cloud.SpannerLib.MockServer; +using Google.Protobuf.WellKnownTypes; +using Google.Rpc; + +namespace Google.Cloud.SpannerLib.Tests; + +public class TransactionTests : AbstractMockServerTests +{ + [Test] + public void TestBeginAndCommit([Values] LibType libType) + { + 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)); + } + + [Test] + public void TestBeginAndRollback([Values] LibType libType) + { + 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)); + } + + [Test] + public void TestReadWriteTransaction([Values] LibType libType) + { + var updateSql = "update my_table set value=@value where id=@id"; + Fixture.SpannerMock.AddOrUpdateStatementResult(updateSql, StatementResult.CreateUpdateCount(1)); + + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); + using var connection = pool.CreateConnection(); + connection.BeginTransaction(new TransactionOptions()); + + using var rows = connection.Execute(new ExecuteSqlRequest + { + Sql = updateSql, + Params = new Struct + { + Fields = + { + ["value"] = Value.ForString("test-value"), + ["id"] = Value.ForString("1") + }, + } + }); + Assert.That(rows.Next(), Is.Null); + Assert.That(rows.UpdateCount, Is.EqualTo(1)); + + var commitResponse = connection.Commit(); + Assert.That(commitResponse, Is.Not.Null); + Assert.That(commitResponse.CommitTimestamp, Is.Not.Null); + + // 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)); + + var request = Fixture.SpannerMock.Requests.OfType().Single(); + Assert.That(request.Transaction?.Begin?.ReadWrite, Is.Not.Null); + } + + [Test] + public void TestReadOnlyTransaction([Values] LibType libType) + { + var numRows = 5; + var sql = "select * from random"; + Fixture.SpannerMock.AddOrUpdateStatementResult(sql, StatementResult.CreateQuery(RandomResultSetGenerator.Generate(numRows))); + + 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 = sql }); + var rowCount = 0; + while (rows.Next() != null) + { + rowCount++; + } + Assert.That(rowCount, Is.EqualTo(numRows)); + + // Read-only transactions must also be committed or rolled back, although this is a no-op on Spanner. + // There is no CommitResponse for read-only transactions. + var commitResponse = connection.Commit(); + Assert.That(commitResponse, Is.Null); + + // 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)); + + var request = Fixture.SpannerMock.Requests.OfType().Single(); + Assert.That(request.Transaction?.Begin?.ReadOnly, Is.Not.Null); + } + + [Test] + public void TestBeginTwice([Values] LibType libType) + { + 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()); + var exception = Assert.Throws(() => connection.BeginTransaction(new TransactionOptions())); + Assert.That(exception.Code, Is.EqualTo(Code.FailedPrecondition)); + } +} \ No newline at end of file diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/appsettings.json b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/appsettings.json new file mode 100644 index 00000000..2a8537d3 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/appsettings.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "IncludeScopes": false, + "LogLevel": { + "Microsoft": "Warning" + } + } +} 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 new file mode 100644 index 00000000..e75e32ae --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/spannerlib-dotnet-tests.csproj @@ -0,0 +1,33 @@ + + + + net8.0 + Google.Cloud.SpannerLib.Tests + latest + enable + enable + false + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet.sln b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet.sln new file mode 100644 index 00000000..c12c60ca --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet.sln @@ -0,0 +1,64 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "spannerlib-dotnet-native", "spannerlib-dotnet-native\spannerlib-dotnet-native.csproj", "{16CCAF2C-89EF-4B60-987A-50C456BB01D5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "spannerlib-dotnet", "spannerlib-dotnet\spannerlib-dotnet.csproj", "{95CD116F-7F04-43BE-813C-94235F2C8D22}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "spannerlib-dotnet-native-impl", "spannerlib-dotnet-native-impl\spannerlib-dotnet-native-impl.csproj", "{EA3659EC-9850-4CEF-8FE6-D349811CC3F4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "spannerlib-dotnet-tests", "spannerlib-dotnet-tests\spannerlib-dotnet-tests.csproj", "{F3A854DE-43F9-423B-9D4A-FC60265818CE}" +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 + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {16CCAF2C-89EF-4B60-987A-50C456BB01D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {16CCAF2C-89EF-4B60-987A-50C456BB01D5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {16CCAF2C-89EF-4B60-987A-50C456BB01D5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {16CCAF2C-89EF-4B60-987A-50C456BB01D5}.Release|Any CPU.Build.0 = Release|Any CPU + {95CD116F-7F04-43BE-813C-94235F2C8D22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {95CD116F-7F04-43BE-813C-94235F2C8D22}.Debug|Any CPU.Build.0 = Debug|Any CPU + {95CD116F-7F04-43BE-813C-94235F2C8D22}.Release|Any CPU.ActiveCfg = Release|Any CPU + {95CD116F-7F04-43BE-813C-94235F2C8D22}.Release|Any CPU.Build.0 = Release|Any CPU + {EA3659EC-9850-4CEF-8FE6-D349811CC3F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EA3659EC-9850-4CEF-8FE6-D349811CC3F4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EA3659EC-9850-4CEF-8FE6-D349811CC3F4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EA3659EC-9850-4CEF-8FE6-D349811CC3F4}.Release|Any CPU.Build.0 = Release|Any CPU + {F3A854DE-43F9-423B-9D4A-FC60265818CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F3A854DE-43F9-423B-9D4A-FC60265818CE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F3A854DE-43F9-423B-9D4A-FC60265818CE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F3A854DE-43F9-423B-9D4A-FC60265818CE}.Release|Any CPU.Build.0 = Release|Any CPU + {218C7FF7-84C7-4415-ABF8-69C5D7FCB6D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {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 new file mode 100644 index 00000000..7de9a28d --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/AbstractLibObject.cs @@ -0,0 +1,122 @@ +// 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.Threading.Tasks; + +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, IAsyncDisposable +{ + internal ISpannerLib Spanner { get; } + public long Id { get; } + + private bool _disposed; + + protected void CheckDisposed() + { + if (_disposed) + { + throw new ObjectDisposedException(GetType().Name); + } + } + + internal AbstractLibObject(ISpannerLib spanner, long id) + { + Spanner = spanner; + Id = id; + } + + ~AbstractLibObject() + { + Dispose(false); + } + + protected void MarkDisposed() + { + _disposed = true; + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + public async ValueTask DisposeAsync() + { + await DisposeAsyncCore().ConfigureAwait(false); + GC.SuppressFinalize(this); + } + + public void Close() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (_disposed) + { + return; + } + try + { + if (Id > 0) + { + CloseLibObject(); + } + } + finally + { + _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 new file mode 100644 index 00000000..eec51d60 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/Connection.cs @@ -0,0 +1,176 @@ +// 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.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using Google.Cloud.Spanner.V1; + +namespace Google.Cloud.SpannerLib; + +/// +/// A Connection in a Pool that has been created by SpannerLib. +/// +/// The pool that created and owns this connection +/// The id of this connection +public class Connection(Pool pool, long id) : AbstractLibObject(pool.Spanner, id) +{ + public Pool Pool { get; } = pool; + + /// + /// Begins a new transaction on this connection. A connection can have at most one active transaction at any time. + /// Calling this method does not immediately start the transaction on Spanner. Instead, the transaction is only + /// registered on the connection, and the BeginTransaction option will be inlined with the first statement in the + /// transaction. + /// + /// + /// The transaction options that will be used to create the transaction. The default is a read/write transaction. + /// Explicitly set the ReadOnly transaction option to start a read-only transaction. + /// + public void BeginTransaction(TransactionOptions transactionOptions) + { + Spanner.BeginTransaction(this, transactionOptions); + } + + /// + /// Commits the current transaction on this connection and returns the CommitResponse (if any). Both read/write and + /// read-only transactions must be either committed or rolled back. Committing or rolling back a read-only + /// transaction is a no-op on Spanner, and this method does not return a CommitResponse when a read-only transaction + /// is committed. + /// + /// The CommitResponse for this transaction, or null for read-only transactions + public CommitResponse? Commit() + { + return Spanner.Commit(this); + } + + public Task CommitAsync(CancellationToken cancellationToken = default) + { + return Spanner.CommitAsync(this, cancellationToken); + } + + /// + /// Rollbacks the current transaction. + /// + 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. + /// If the connection does not have a transaction, then the mutations are sent to Spanner directly in a new + /// read/write transaction. + /// + /// The mutations to write to Spanner + /// + /// The CommitResponse that is returned by Spanner, or null if the mutations were only buffered in the current + /// transaction. + /// + public CommitResponse? WriteMutations(BatchWriteRequest.Types.MutationGroup mutations) + { + return Spanner.WriteMutations(this, mutations); + } + + /// + /// 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. + /// If the connection does not have a transaction, then the mutations are sent to Spanner directly in a new + /// read/write transaction. + /// + /// The mutations to write to Spanner + /// The cancellation token + /// + /// The CommitResponse that is returned by Spanner, or null if the mutations were only buffered in the current + /// transaction. + /// + public Task WriteMutationsAsync(BatchWriteRequest.Types.MutationGroup mutations, + CancellationToken cancellationToken) + { + return Spanner.WriteMutationsAsync(this, mutations, cancellationToken); + } + + /// + /// Executes any type of SQL statement on this connection. The SQL statement will use the current transaction of the + /// connection. The contents of the returned Rows object depends on the type of SQL statement. + /// + /// The SQL statement that should be executed + /// A Rows object with the statement result + public Rows Execute(ExecuteSqlRequest statement) + { + return Spanner.Execute(this, statement); + } + + /// + /// Executes any type of SQL statement on this connection. The SQL statement will use the current transaction of the + /// connection. The contents of the returned Rows object depends on the type of SQL statement. + /// + /// The SQL statement that should be executed + /// A Rows object with the statement result + public Task ExecuteAsync(ExecuteSqlRequest statement) + { + return Spanner.ExecuteAsync(this, statement); + } + + /// + /// Executes a batch of DML or DDL statements on Spanner. The batch may not contain a mix of DML and DDL statements. + /// The batch will use the current transaction of the connection (if any). Executing a batch of DDL statements in a + /// transaction is not supported. + /// + /// The DML or DDL statements to execute + /// The update count per statement. The update count for a DDL statement is -1. + public long[] ExecuteBatch(IEnumerable statements) + { + var request = new ExecuteBatchDmlRequest + { + Statements = { statements } + }; + return Spanner.ExecuteBatch(this, request); + } + + /// + /// Executes a batch of DML or DDL statements on Spanner. The batch may not contain a mix of DML and DDL statements. + /// The batch will use the current transaction of the connection (if any). Executing a batch of DDL statements in a + /// transaction is not supported. + /// + /// The DML or DDL statements to execute + /// The update count per statement. The update count for a DDL statement is -1. + public Task ExecuteBatchAsync(List statements) + { + var request = new ExecuteBatchDmlRequest + { + Statements = { statements } + }; + return Spanner.ExecuteBatchAsync(this, request); + } + + /// + /// Closes this connection. + /// + 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 new file mode 100644 index 00000000..516604e7 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/ISpannerLib.cs @@ -0,0 +1,255 @@ +// 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.Threading; +using System.Threading.Tasks; +using Google.Cloud.Spanner.V1; +using Google.Protobuf.WellKnownTypes; + +namespace Google.Cloud.SpannerLib; + +/// +/// This is the generic interface of SpannerLib. It could have multiple different implementations that use different +/// methods for communicating with the library, for example by loading the library as a native library, or by starting +/// 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 : IDisposable +{ + /// + /// RowEncoding is used to specify the format that SpannerLib should use to return row data. + /// + public enum RowEncoding + { + /// + /// Return rows as encoded protobuf ListValue objects. + /// + Proto, + } + + /// + /// Creates a pool of connections using the given connection string. Creating a pool is a relatively expensive + /// operation. All connections in a pool share the same underlying Spanner client and gRPC channel pool. + /// + /// The connection string for this pool of connections + /// A Pool object that can be used to create connections + public Pool CreatePool(string connectionString); + + /// + /// Closes a Pool object. This also closes any open connections in the pool. + /// + /// The pool that should be closed + public void ClosePool(Pool pool); + + /// + /// Creates a new connection in the given pool. This is a relatively cheap operation. Connections do not have their + /// own physical connection with Spanner. Instead, all connections in a pool share the same underlying Spanner + /// client and gRPC channel pool. + /// + /// The pool that should be used to create the connection + /// A new connection + public Connection CreateConnection(Pool pool); + + /// + /// 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 + 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 + /// connection (if any). Otherwise, the mutations are written directly to Spanner using a new read/write + /// transaction and the CommitResponse of that transaction is returned. The returned value is null if the mutations + /// were only buffered in an active transaction. + /// + /// The connection to use to write the mutations + /// The mutations to write + /// + /// The CommitResponse of the read/write transaction that was created to write the mutations, or null if the + /// mutations were buffered in an active transaction on the connection. + /// + public CommitResponse? WriteMutations(Connection connection, BatchWriteRequest.Types.MutationGroup mutations); + + /// + /// Writes an array of mutations to Spanner. The mutations are buffered in the current transaction of the given + /// connection (if any). Otherwise, the mutations are written directly to Spanner using a new read/write + /// transaction and the CommitResponse of that transaction is returned. The returned value is null if the mutations + /// were only buffered in an active transaction. + /// + /// The connection to use to write the mutations + /// The mutations to write + /// The cancellation token + /// + /// The CommitResponse of the read/write transaction that was created to write the mutations, or null if the + /// mutations were buffered in an active transaction on the connection. + /// + public Task WriteMutationsAsync(Connection connection, BatchWriteRequest.Types.MutationGroup mutations, CancellationToken cancellationToken = default); + + /// + /// Executes a SQL statement of any type on the given connection. + /// + /// The connection to use to execute the SQL statement + /// The statement to execute + /// + /// A Rows object with the results of the statement. The contents of the Rows object depends on the type of SQL + /// statement. + /// + public Rows Execute(Connection connection, ExecuteSqlRequest statement); + + /// + /// Executes a SQL statement of any type on the given connection. + /// + /// 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, 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. + /// + /// The connection to use to execute the batch + /// The DML or DDL statements to execute + /// The update count per statement. The update count for a DDL statement is -1. + public long[] ExecuteBatch(Connection connection, ExecuteBatchDmlRequest statements); + + /// + /// Executes a batch of DML or DDL statements on Spanner. The batch may not contain a mix of DML and DDL statements. + /// + /// 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, CancellationToken cancellationToken = default); + + /// + /// Returns the ResultSetMetadata of a Rows object. This can be used to inspect the type of data that a Rows object + /// contains. + /// + /// The Rows object to get the metadata of + /// The ResultSetMetadata of the given Rows object + public ResultSetMetadata? Metadata(Rows rows); + + /// + /// Returns the ResultSetMetadata of a Rows object. This can be used to inspect the type of data that a Rows object + /// contains. + /// + /// The Rows object to get the metadata of + /// The cancellation token + /// The ResultSetMetadata of the given Rows object + 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 + /// executed. This method can only be called once all data rows in the Rows object have been returned. That is; the + /// Next method must have returned null for this Rows object (or the caller must know beforehand that the statement + /// did not return any rows). + /// + /// The Rows object to get the stats for + /// The ResultSetStats for the given Rows object + public ResultSetStats? Stats(Rows rows); + + /// + /// Returns the next numRows data rows from the given Rows object. The data is encoded using the specified + /// RowEncoding. The default is an encoded protobuf ListValue containing as many values as there are columns in the + /// query result, multiplied by the number of rows that were returned. + /// + /// 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 + /// A ListValue with the actual row data, or null if there are no more rows + public ListValue? Next(Rows rows, int numRows, RowEncoding encoding); + + /// + /// Returns the next numRows data rows from the given Rows object. The data is encoded using the specified + /// RowEncoding. The default is an encoded protobuf ListValue containing as many values as there are columns in the + /// query result, multiplied by the number of rows that were returned. + /// + /// 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, CancellationToken cancellationToken = default); + + /// + /// Closes the given Rows object. This releases all resources associated with this statement result. + /// + /// 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. + /// + /// The connection to use to start the transaction + /// + /// The options for the new transaction. The default is to create a read/write transaction. Set the ReadOnly option + /// to create a read-only transaction. + /// + public void BeginTransaction(Connection connection, TransactionOptions transactionOptions); + + /// + /// 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 + 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/Pool.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/Pool.cs new file mode 100644 index 00000000..b5ab70e5 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/Pool.cs @@ -0,0 +1,57 @@ +// 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. + +namespace Google.Cloud.SpannerLib; + +/// +/// A pool of connections to Spanner. All connections that are created by a pool share the same underlying Spanner +/// client and gRPC channel pool. +/// +/// The SpannerLib instance that was used to create this pool. +/// The id of the pool. This value is generated and returned by SpannerLib. +public class Pool(ISpannerLib spanner, long id) : AbstractLibObject(spanner, id) +{ + + /// + /// Create a new Pool using the given SpannerLib instance. This is a relatively expensive operation. + /// + /// + /// The SpannerLib instance to use to create the pool, and that will be used for all subsequent function calls for + /// objects that have been created from this pool. + /// + /// The connectionString to use to connect to Spanner + /// A new pool + public static Pool Create(ISpannerLib spanner, string connectionString) + { + return spanner.CreatePool(connectionString); + } + + /// + /// Create a new connection in this pool. This is a relatively cheap operation. + /// + /// A new connection in this pool + public Connection CreateConnection() + { + CheckDisposed(); + return Spanner.CreateConnection(this); + } + + /// + /// Closes this pool and any open connections in the pool. + /// + protected override void CloseLibObject() + { + Spanner.ClosePool(this); + } +} diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/README.md b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/README.md new file mode 100644 index 00000000..28276818 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/README.md @@ -0,0 +1,9 @@ +# .NET SpannerLib API + +This project contains the .NET API definition of SpannerLib. Drivers and frameworks that use SpannerLib, should depend +on this API, and not on the lower-level native library. + +This project only defines the API of the library. In order to use it, you must also include an actual implementation. +This could be: +* `spannerlib-dotnet-native-impl`: This loads SpannerLib as a native library into the current process. +* `spannerlib-dotnet-grpc`: This starts SpannerLib as a child process and communicates with SpannerLib through a gRPC interface. (TODO: Implement) diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/Rows.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/Rows.cs new file mode 100644 index 00000000..8e18b2da --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/Rows.cs @@ -0,0 +1,113 @@ +// 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.Threading; +using System.Threading.Tasks; +using Google.Cloud.Spanner.V1; +using Google.Protobuf.WellKnownTypes; + +namespace Google.Cloud.SpannerLib; + +/// +/// Rows is the result that is returned for all SQL statements that are executed on a connection. The contents of a Rows +/// object depends on the type of SQL statement that was returned. +/// +public class Rows : AbstractLibObject +{ + public Connection SpannerConnection { get; private set; } + + private ResultSetMetadata? _metadata; + + 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. + /// + protected virtual ResultSetStats? Stats => _stats.Value; + + /// + /// The update count of the SQL statement. This is only available once all data rows have been read. + /// + public long UpdateCount + { + get + { + var stats = Stats; + if (stats == null) + { + return -1; + } + if (stats.HasRowCountExact) + { + return (int)stats.RowCountExact; + } + if (stats.HasRowCountLowerBound) + { + return (int)stats.RowCountLowerBound; + } + return -1; + } + } + + public Rows(Connection connection, long id, bool initMetadata = true) : base(connection.Spanner, id) + { + SpannerConnection = connection; + if (initMetadata) + { + _metadata = Spanner.Metadata(this); + } + _stats = new(() => Spanner.Stats(this)); + } + + /// + /// Returns the next data row from this Rows object. + /// + /// The next data row or null if there are no more data + public virtual ListValue? Next() + { + var res = Spanner.Next(this, 1, ISpannerLib.RowEncoding.Proto); + if (res == null && !_stats.IsValueCreated) + { + // initialize stats. + _ = _stats.Value; + } + return res; + } + + /// + /// Returns the next data row from this Rows object. + /// + /// The next data row or null if there are no more data + public virtual async Task NextAsync(CancellationToken cancellationToken = default) + { + return await Spanner.NextAsync(this, 1, ISpannerLib.RowEncoding.Proto, cancellationToken); + } + + /// + /// Closes this Rows object. + /// + 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 new file mode 100644 index 00000000..bb87ddb3 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/SpannerException.cs @@ -0,0 +1,37 @@ +// 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 Google.Rpc; +using Grpc.Core; +using Status = Google.Rpc.Status; + +namespace Google.Cloud.SpannerLib; + +/// +/// SpannerLib returns errors as protobuf Status instances. These are translated to this SpannerException class if a +/// function in SpannerLib returns a non-zero status code. +/// +/// 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; +} \ No newline at end of file diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/spannerlib-dotnet.csproj b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/spannerlib-dotnet.csproj new file mode 100644 index 00000000..a49da331 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/spannerlib-dotnet.csproj @@ -0,0 +1,17 @@ + + + + netstandard2.1 + Google.Cloud.SpannerLib + enable + default + Alpha.Google.Cloud.SpannerLib + 1.0.0-alpha.20251009140944 + Google + + + + + + + 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..705ccffe --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/GrpcSpannerLibraryImpl.java @@ -0,0 +1,311 @@ +/* + * 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; +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 { + private final Channel channel; + 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) { + 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.channels != null) { + for (Channel channel : channels) { + if (channel instanceof ManagedChannel) { + ((ManagedChannel) channel).shutdown(); + } + } + } + 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) { + SpannerLibBlockingV2Stub stub = this.stub; + if (stubs != null) { + stub = stubs.get(ThreadLocalRandom.current().nextInt(stubs.size())); + } + 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/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/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..643b7cf2 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/SpannerLibGrpc.java @@ -0,0 +1,1787 @@ +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.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; + + @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 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, + 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 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, + 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.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 { + 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.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) { + 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< + 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) { + 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_INFO = 0; + private static final int METHODID_CREATE_POOL = 1; + private static final int METHODID_CLOSE_POOL = 2; + private static final int METHODID_CREATE_CONNECTION = 3; + private static final int METHODID_CLOSE_CONNECTION = 4; + private static final int METHODID_EXECUTE = 5; + private static final int METHODID_EXECUTE_STREAMING = 6; + private static final int METHODID_EXECUTE_BATCH = 7; + private static final int METHODID_METADATA = 8; + private static final int METHODID_NEXT = 9; + private static final int METHODID_RESULT_SET_STATS = 10; + private static final int METHODID_CLOSE_ROWS = 11; + private static final int METHODID_BEGIN_TRANSACTION = 12; + private static final int METHODID_COMMIT = 13; + private static final int METHODID_ROLLBACK = 14; + private static final int METHODID_WRITE_MUTATIONS = 15; + private static final int METHODID_CONNECTION_STREAM = 16; + + 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_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, + (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( + 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( + 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(getInfoMethod()) + .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..37ae2f12 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/main/java/com/google/cloud/spannerlib/v1/SpannerLibProto.java @@ -0,0 +1,355 @@ +// 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_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 + 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\"\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( + 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_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, + new java.lang.String[] { + "ConnectionString", + }); + internal_static_google_spannerlib_v1_CreateConnectionRequest_descriptor = + getDescriptor().getMessageTypes().get(3); + 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(4); + 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(5); + 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(6); + 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(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(8); + 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(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(10); + 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(11); + 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(12); + 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(13); + 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(14); + 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(15); + 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(16); + 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..4ecea7b3 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-java/src/test/java/com/google/cloud/spannerlib/AbstractSpannerLibTest.java @@ -0,0 +1,107 @@ +/* + * 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.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; +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) { + 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 { + 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/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(); + } + } +} 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()); diff --git a/transaction.go b/transaction.go index a2db9634..70189f9d 100644 --- a/transaction.go +++ b/transaction.go @@ -613,7 +613,7 @@ func (tx *readWriteTransaction) runDmlBatch(ctx context.Context) (*result, error if !tx.retryAborts() { affected, err := tx.rwTx.BatchUpdateWithOptions(ctx, statements, options.QueryOptions) - return &result{rowsAffected: sum(affected)}, err + return &result{rowsAffected: sum(affected), batchUpdateCounts: affected}, err } var affected []int64