diff --git a/.github/workflows/integration-tests-on-emulator.yml b/.github/workflows/integration-tests-on-emulator.yml index acecd5fa..1e75c3cf 100644 --- a/.github/workflows/integration-tests-on-emulator.yml +++ b/.github/workflows/integration-tests-on-emulator.yml @@ -22,7 +22,7 @@ jobs: with: go-version: 1.25.x - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Run Go integration tests on emulator run: go test -race env: diff --git a/.github/workflows/spanner-lib-tests.yml b/.github/workflows/spanner-lib-tests.yml index 4ffc674f..915d9030 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 @@ -89,6 +97,8 @@ jobs: go-version: ${{ matrix.go-version }} - name: Checkout code uses: actions/checkout@v4 + with: + submodules: 'true' - name: Build shared library working-directory: spannerlib/shared run: go build -o spannerlib.so -buildmode=c-shared shared_lib.go @@ -116,6 +126,34 @@ jobs: fi working-directory: spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native shell: bash + - name: Build gRPC server + working-directory: spannerlib/grpc-server + run: | + go build -o grpc_server server.go + chmod +x grpc_server + - name: Copy gRPC server to .NET wrapper + working-directory: spannerlib + run: | + mkdir -p wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/binaries/any + if [ "$RUNNER_OS" == "Windows" ]; then + cp grpc-server/grpc_server wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/binaries/any/grpc_server.exe + else + cp grpc-server/grpc_server wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/binaries/any/grpc_server + fi + shell: bash + - name: Build .NET gRPC server package + run: dotnet pack + working-directory: spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server + shell: bash + - name: Add .NET package source + run: | + if [ "$RUNNER_OS" == "Windows" ]; then + dotnet nuget add source ${GITHUB_WORKSPACE}"\spannerlib\wrappers\spannerlib-dotnet\spannerlib-dotnet-grpc-server\bin\Release" --name local-grpc-server + else + dotnet nuget add source "$PWD"/bin/Release --name local-grpc-server + fi + working-directory: spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server + shell: bash - name: Restore dependencies run: dotnet restore working-directory: spannerlib/wrappers/spannerlib-dotnet diff --git a/.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/aborted_transactions_test.go b/aborted_transactions_test.go index 6962e96f..835f971d 100644 --- a/aborted_transactions_test.go +++ b/aborted_transactions_test.go @@ -41,6 +41,9 @@ func TestCommitAborted(t *testing.T) { if err != nil { t.Fatalf("begin failed: %v", err) } + if _, err := tx.ExecContext(ctx, testutil.UpdateBarSetFoo); err != nil { + t.Fatal(err) + } server.TestSpanner.PutExecutionTime(testutil.MethodCommitTransaction, testutil.SimulatedExecutionTime{ Errors: []error{status.Error(codes.Aborted, "Aborted")}, }) @@ -51,7 +54,7 @@ func TestCommitAborted(t *testing.T) { reqs := server.TestSpanner.DrainRequestsFromServer() commitReqs := testutil.RequestsOfType(reqs, reflect.TypeOf(&sppb.CommitRequest{})) if g, w := len(commitReqs), 2; g != w { - t.Fatalf("commit request count mismatch\nGot: %v\nWant: %v", g, w) + t.Fatalf("commit request count mismatch\n Got: %v\nWant: %v", g, w) } // Verify that the db is still usable. @@ -117,6 +120,9 @@ func TestCommitAbortedWithInternalRetriesDisabled(t *testing.T) { if err != nil { t.Fatalf("begin failed: %v", err) } + if _, err := tx.ExecContext(ctx, testutil.UpdateBarSetFoo); err != nil { + t.Fatal(err) + } server.TestSpanner.PutExecutionTime(testutil.MethodCommitTransaction, testutil.SimulatedExecutionTime{ Errors: []error{status.Error(codes.Aborted, "Aborted")}, }) diff --git a/benchmarks/go.mod b/benchmarks/go.mod index 78dcf556..8d462f66 100644 --- a/benchmarks/go.mod +++ b/benchmarks/go.mod @@ -2,7 +2,7 @@ module github.com/googleapis/go-sql-spanner/benchmarks go 1.24.0 -toolchain go1.25.1 +toolchain go1.25.2 replace github.com/googleapis/go-sql-spanner => ../ @@ -10,15 +10,15 @@ require ( cloud.google.com/go v0.123.0 cloud.google.com/go/spanner v1.86.0 github.com/google/uuid v1.6.0 - github.com/googleapis/go-sql-spanner v1.18.1 - google.golang.org/api v0.251.0 - google.golang.org/grpc v1.75.1 + github.com/googleapis/go-sql-spanner v1.19.0 + google.golang.org/api v0.252.0 + google.golang.org/grpc v1.76.0 google.golang.org/protobuf v1.36.10 ) require ( cel.dev/expr v0.24.0 // indirect - cloud.google.com/go/auth v0.16.5 // indirect + cloud.google.com/go/auth v0.17.0 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect cloud.google.com/go/compute/metadata v0.9.0 // indirect cloud.google.com/go/iam v1.5.2 // indirect @@ -61,5 +61,5 @@ require ( golang.org/x/time v0.13.0 // indirect google.golang.org/genproto v0.0.0-20250804133106-a7a43d27e69b // indirect google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff // indirect ) diff --git a/benchmarks/go.sum b/benchmarks/go.sum index 37cdcdc0..4c175de9 100644 --- a/benchmarks/go.sum +++ b/benchmarks/go.sum @@ -101,8 +101,8 @@ cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVo cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= -cloud.google.com/go/auth v0.16.5 h1:mFWNQ2FEVWAliEQWpAdH80omXFokmrnbDhUS9cBywsI= -cloud.google.com/go/auth v0.16.5/go.mod h1:utzRfHMP+Vv0mpOkTRQoWD2q3BatTOoWbA7gCc2dUhQ= +cloud.google.com/go/auth v0.17.0 h1:74yCm7hCj2rUyyAocqnFzsAYXgJhrG26XCFimrc/Kz4= +cloud.google.com/go/auth v0.17.0/go.mod h1:6wv/t5/6rOPAX4fJiRjKkJCvswLwdet7G8+UGXt7nCQ= cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= @@ -1371,8 +1371,8 @@ google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/ google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= -google.golang.org/api v0.251.0 h1:6lea5nHRT8RUmpy9kkC2PJYnhnDAB13LqrLSVQlMIE8= -google.golang.org/api v0.251.0/go.mod h1:Rwy0lPf/TD7+T2VhYcffCHhyyInyuxGjICxdfLqT7KI= +google.golang.org/api v0.252.0 h1:xfKJeAJaMwb8OC9fesr369rjciQ704AjU/psjkKURSI= +google.golang.org/api v0.252.0/go.mod h1:dnHOv81x5RAmumZ7BWLShB/u7JZNeyalImxHmtTHxqw= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1516,8 +1516,8 @@ google.golang.org/genproto v0.0.0-20250804133106-a7a43d27e69b h1:eZTgydvqZO44zyT google.golang.org/genproto v0.0.0-20250804133106-a7a43d27e69b/go.mod h1:suyz2QBHQKlGIF92HEEsCfO1SwxXdk7PFLz+Zd9Uah4= google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c h1:AtEkQdl5b6zsybXcbz00j1LwNodDuH6hVifIaNqk7NQ= google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c/go.mod h1:ea2MjsO70ssTfCjiwHgI0ZFqcw45Ksuk2ckf9G468GA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797 h1:CirRxTOwnRWVLKzDNrs0CXAaVozJoR4G9xvdRecrdpk= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797/go.mod h1:HSkG/KdJWusxU1F6CNrwNDjBMgisKxGnc5dAZfT0mjQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff h1:A90eA31Wq6HOMIQlLfzFwzqGKBTuaVztYu/g8sn+8Zc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1559,8 +1559,8 @@ google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5v google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= -google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI= -google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= +google.golang.org/grpc v1.76.0 h1:UnVkv1+uMLYXoIz6o7chp59WfQUYA2ex/BXQ9rHZu7A= +google.golang.org/grpc v1.76.0/go.mod h1:Ju12QI8M6iQJtbcsV+awF5a4hfJMLi4X0JLo94ULZ6c= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= diff --git a/client_side_statement_test.go b/client_side_statement_test.go index 8d7130d1..45bc1d7a 100644 --- a/client_side_statement_test.go +++ b/client_side_statement_test.go @@ -65,7 +65,7 @@ func TestStatementExecutor_StartBatchDdl(t *testing.T) { } // Starting a DDL batch while the connection is in a transaction is not allowed. - c.tx = &readWriteTransaction{} + c.tx = &delegatingTransaction{conn: c, ctx: ctx} if _, err := c.ExecContext(ctx, "start batch ddl", []driver.NamedValue{}); spanner.ErrCode(err) != codes.FailedPrecondition { t.Fatalf("error mismatch for starting a DDL batch while in a transaction\nGot: %v\nWant: %v", spanner.ErrCode(err), codes.FailedPrecondition) } @@ -102,13 +102,13 @@ func TestStatementExecutor_StartBatchDml(t *testing.T) { } // Starting a DML batch while the connection is in a read-only transaction is not allowed. - c.tx = &readOnlyTransaction{logger: noopLogger} + c.tx = &delegatingTransaction{conn: c, contextTransaction: &readOnlyTransaction{logger: noopLogger}} if _, err := c.ExecContext(ctx, "start batch dml", []driver.NamedValue{}); spanner.ErrCode(err) != codes.FailedPrecondition { t.Fatalf("error mismatch for starting a DML batch while in a read-only transaction\nGot: %v\nWant: %v", spanner.ErrCode(err), codes.FailedPrecondition) } // Starting a DML batch while the connection is in a read/write transaction is allowed. - c.tx = &readWriteTransaction{logger: noopLogger} + c.tx = &delegatingTransaction{conn: c, contextTransaction: &readWriteTransaction{logger: noopLogger}} if _, err := c.ExecContext(ctx, "start batch dml", []driver.NamedValue{}); err != nil { t.Fatalf("could not start a DML batch while in a read/write transaction: %v", err) } diff --git a/conn.go b/conn.go index d35b238d..278cff0c 100644 --- a/conn.go +++ b/conn.go @@ -231,20 +231,25 @@ type SpannerConn interface { // returned. resetTransactionForRetry(ctx context.Context, errDuringCommit bool) error - // withTempTransactionOptions sets the TransactionOptions that should be used - // for the next read/write transaction. This method should only be called - // directly before starting a new read/write transaction. - withTempTransactionOptions(options *ReadWriteTransactionOptions) + // withTransactionCloseFunc sets the close function that should be registered + // on the next transaction on this connection. This method should only be called + // directly before starting a new transaction. + withTransactionCloseFunc(close func()) - // withTempReadOnlyTransactionOptions sets the options that should be used - // for the next read-only transaction. This method should only be called - // directly before starting a new read-only transaction. - withTempReadOnlyTransactionOptions(options *ReadOnlyTransactionOptions) + // setReadWriteTransactionOptions sets the ReadWriteTransactionOptions that should be + // used for the current read/write transaction. This method should be called right + // after starting a new read/write transaction. + setReadWriteTransactionOptions(options *ReadWriteTransactionOptions) - // withTempBatchReadOnlyTransactionOptions sets the options that should be used - // for the next batch read-only transaction. This method should only be called - // directly before starting a new batch read-only transaction. - withTempBatchReadOnlyTransactionOptions(options *BatchReadOnlyTransactionOptions) + // setReadOnlyTransactionOptions sets the options that should be used + // for the current read-only transaction. This method should be called + // right after starting a new read-only transaction. + setReadOnlyTransactionOptions(options *ReadOnlyTransactionOptions) + + // setBatchReadOnlyTransactionOptions sets the options that should be used + // for the current batch read-only transaction. This method should be called + // right after starting a new batch read-only transaction. + setBatchReadOnlyTransactionOptions(options *BatchReadOnlyTransactionOptions) } var _ SpannerConn = &conn{} @@ -257,8 +262,8 @@ type conn struct { adminClient *adminapi.DatabaseAdminClient connId string logger *slog.Logger - tx contextTransaction - prevTx contextTransaction + tx *delegatingTransaction + prevTx *delegatingTransaction resetForRetry bool database string @@ -536,7 +541,7 @@ func (c *conn) InDDLBatch() bool { } func (c *conn) InDMLBatch() bool { - return (c.batch != nil && c.batch.tp == parser.BatchTypeDml) || (c.inReadWriteTransaction() && c.tx.(*readWriteTransaction).batch != nil) + return (c.batch != nil && c.batch.tp == parser.BatchTypeDml) || (c.inTransaction() && c.tx.IsInBatch()) } func (c *conn) GetBatchedStatements() []spanner.Statement { @@ -572,9 +577,6 @@ func (c *conn) startBatchDML(automatic bool) (driver.Result, error) { if c.batch != nil { return nil, spanner.ToSpannerError(status.Errorf(codes.FailedPrecondition, "This connection already has an active batch.")) } - if c.inReadOnlyTransaction() { - return nil, spanner.ToSpannerError(status.Errorf(codes.FailedPrecondition, "This connection has an active read-only transaction. Read-only transactions cannot execute DML batches.")) - } c.logger.Debug("starting dml batch outside transaction") c.batch = &batch{tp: parser.BatchTypeDml, options: execOptions} return driver.ResultNoRows, nil @@ -660,8 +662,8 @@ func (c *conn) execBatchDML(ctx context.Context, statements []spanner.Statement, var affected []int64 var err error - if c.inTransaction() { - tx, ok := c.tx.(*readWriteTransaction) + if c.inTransaction() && c.tx.contextTransaction != nil { + tx, ok := c.tx.contextTransaction.(*readWriteTransaction) if !ok { return nil, status.Errorf(codes.FailedPrecondition, "connection is in a transaction that is not a read/write transaction") } @@ -949,7 +951,7 @@ func (c *conn) execContext(ctx context.Context, query string, execOptions *ExecO } // Start an automatic DML batch. - if c.AutoBatchDml() && !c.inBatch() && c.inReadWriteTransaction() { + if c.AutoBatchDml() && !c.inBatch() && c.inTransaction() && statementInfo.StatementType == parser.StatementTypeDml { if _, err := c.startBatchDML( /* automatic = */ true); err != nil { return nil, err } @@ -1046,14 +1048,14 @@ func (c *conn) resetTransactionForRetry(ctx context.Context, errDuringCommit boo return c.tx.resetForRetry(ctx) } -func (c *conn) withTempTransactionOptions(options *ReadWriteTransactionOptions) { +func (c *conn) withTransactionCloseFunc(close func()) { + c.tempTransactionCloseFunc = close +} + +func (c *conn) setReadWriteTransactionOptions(options *ReadWriteTransactionOptions) { if options == nil { return } - c.tempTransactionCloseFunc = options.close - // Start a transaction for the connection state, so we can set the transaction options - // as local options in the current transaction. - _ = c.state.Begin() if options.DisableInternalRetries { _ = propertyRetryAbortsInternally.SetLocalValue(c.state, !options.DisableInternalRetries) } @@ -1103,14 +1105,10 @@ func (c *conn) getTransactionOptions(execOptions *ExecOptions) ReadWriteTransact return txOpts } -func (c *conn) withTempReadOnlyTransactionOptions(options *ReadOnlyTransactionOptions) { +func (c *conn) setReadOnlyTransactionOptions(options *ReadOnlyTransactionOptions) { if options == nil { return } - c.tempTransactionCloseFunc = options.close - // Start a transaction for the connection state, so we can set the transaction options - // as local options in the current transaction. - _ = c.state.Begin() if options.BeginTransactionOption != spanner.DefaultBeginTransaction { _ = propertyBeginTransactionOption.SetLocalValue(c.state, options.BeginTransactionOption) } @@ -1123,14 +1121,10 @@ func (c *conn) getReadOnlyTransactionOptions() ReadOnlyTransactionOptions { return ReadOnlyTransactionOptions{TimestampBound: c.ReadOnlyStaleness(), BeginTransactionOption: c.convertDefaultBeginTransactionOption(propertyBeginTransactionOption.GetValueOrDefault(c.state))} } -func (c *conn) withTempBatchReadOnlyTransactionOptions(options *BatchReadOnlyTransactionOptions) { +func (c *conn) setBatchReadOnlyTransactionOptions(options *BatchReadOnlyTransactionOptions) { if options == nil { return } - c.tempTransactionCloseFunc = options.close - // Start a transaction for the connection state, so we can set the transaction options - // as local options in the current transaction. - _ = c.state.Begin() if options.TimestampBound.String() != "(strong)" { _ = propertyReadOnlyStaleness.SetLocalValue(c.state, options.TimestampBound) } @@ -1144,9 +1138,9 @@ func (c *conn) getBatchReadOnlyTransactionOptions() BatchReadOnlyTransactionOpti // It is exported for internal reasons, and may receive breaking changes without prior notice. // // BeginReadOnlyTransaction starts a new read-only transaction on this connection. -func (c *conn) BeginReadOnlyTransaction(ctx context.Context, options *ReadOnlyTransactionOptions) (driver.Tx, error) { - c.withTempReadOnlyTransactionOptions(options) - tx, err := c.BeginTx(ctx, driver.TxOptions{ReadOnly: true}) +func (c *conn) BeginReadOnlyTransaction(ctx context.Context, options *ReadOnlyTransactionOptions, close func()) (driver.Tx, error) { + tx, err := c.beginTx(ctx, driver.TxOptions{ReadOnly: true}, close) + c.setReadOnlyTransactionOptions(options) if err != nil { return nil, err } @@ -1157,9 +1151,9 @@ func (c *conn) BeginReadOnlyTransaction(ctx context.Context, options *ReadOnlyTr // It is exported for internal reasons, and may receive breaking changes without prior notice. // // BeginReadWriteTransaction starts a new read/write transaction on this connection. -func (c *conn) BeginReadWriteTransaction(ctx context.Context, options *ReadWriteTransactionOptions) (driver.Tx, error) { - c.withTempTransactionOptions(options) - tx, err := c.BeginTx(ctx, driver.TxOptions{}) +func (c *conn) BeginReadWriteTransaction(ctx context.Context, options *ReadWriteTransactionOptions, close func()) (driver.Tx, error) { + tx, err := c.beginTx(ctx, driver.TxOptions{}, close) + c.setReadWriteTransactionOptions(options) if err != nil { return nil, err } @@ -1182,21 +1176,6 @@ func (c *conn) beginTx(ctx context.Context, driverOpts driver.TxOptions, closeFu c.resetForRetry = false return c.tx, nil } - // Also start a transaction on the ConnectionState if the BeginTx call was successful. - defer func() { - if c.tx != nil { - _ = c.state.Begin() - } else { - // Rollback in case the connection state transaction was started before this function - // was called, for example if the caller set temporary transaction options. - _ = c.state.Rollback() - } - }() - - // TODO: Delay the actual determination of the transaction type until the first query. - // This is required in order to support SET TRANSACTION READ {ONLY | WRITE} - readOnlyTxOpts := c.getReadOnlyTransactionOptions() - batchReadOnlyTxOpts := c.getBatchReadOnlyTransactionOptions() if c.inTransaction() { return nil, spanner.ToSpannerError(status.Errorf(codes.FailedPrecondition, "already in a transaction")) } @@ -1234,94 +1213,105 @@ func (c *conn) beginTx(ctx context.Context, driverOpts driver.TxOptions, closeFu if closeFunc == nil { closeFunc = func() {} } + if err := c.state.Begin(); err != nil { + return nil, err + } + c.clearCommitResponse() + if isolationLevelFromTxOpts != spannerpb.TransactionOptions_ISOLATION_LEVEL_UNSPECIFIED { + _ = propertyIsolationLevel.SetLocalValue(c.state, sql.IsolationLevel(driverOpts.Isolation)) + } + // TODO: Figure out how to distinguish between 'use the default' and 'use read/write'. if driverOpts.ReadOnly { + _ = propertyTransactionReadOnly.SetLocalValue(c.state, true) + } + if batchReadOnly { + _ = propertyTransactionBatchReadOnly.SetLocalValue(c.state, true) + } + if disableRetryAborts { + _ = propertyRetryAbortsInternally.SetLocalValue(c.state, false) + } + + c.tx = &delegatingTransaction{ + conn: c, + ctx: ctx, + close: func(result txResult) { + closeFunc() + if result == txResultCommit { + _ = c.state.Commit() + } else { + _ = c.state.Rollback() + } + c.tx = nil + }, + } + return c.tx, nil +} + +func (c *conn) activateTransaction() (contextTransaction, error) { + closeFunc := c.tx.close + if propertyTransactionReadOnly.GetValueOrDefault(c.state) { var logger *slog.Logger var ro *spanner.ReadOnlyTransaction var bo *spanner.BatchReadOnlyTransaction - if batchReadOnly { + if propertyTransactionBatchReadOnly.GetValueOrDefault(c.state) { logger = c.logger.With("tx", "batchro") var err error // BatchReadOnly transactions (currently) do not support inline-begin. // This means that the transaction options must be supplied here, and not through a callback. - bo, err = c.client.BatchReadOnlyTransaction(ctx, batchReadOnlyTxOpts.TimestampBound) + bo, err = c.client.BatchReadOnlyTransaction(c.tx.ctx, propertyReadOnlyStaleness.GetValueOrDefault(c.state)) if err != nil { return nil, err } ro = &bo.ReadOnlyTransaction } else { logger = c.logger.With("tx", "ro") - ro = c.client.ReadOnlyTransaction().WithBeginTransactionOption(readOnlyTxOpts.BeginTransactionOption) + beginTxOpt := c.convertDefaultBeginTransactionOption(propertyBeginTransactionOption.GetValueOrDefault(c.state)) + ro = c.client.ReadOnlyTransaction().WithBeginTransactionOption(beginTxOpt) } - c.tx = &readOnlyTransaction{ + return &readOnlyTransaction{ roTx: ro, boTx: bo, logger: logger, - close: func(result txResult) { - closeFunc() - if result == txResultCommit { - _ = c.state.Commit() - } else { - _ = c.state.Rollback() - } - c.tx = nil - }, + close: closeFunc, timestampBoundCallback: func() spanner.TimestampBound { return propertyReadOnlyStaleness.GetValueOrDefault(c.state) }, - } - return c.tx, nil + }, nil } - // These options are only used to determine how to start the transaction. - // All other options are fetched in a callback that is called when the transaction is actually started. - // That callback reads all transaction options from the connection state at that moment. This allows - // applications to execute a series of statement like this: - // BEGIN TRANSACTION; - // SET LOCAL transaction_tag='my_tag'; - // SET LOCAL commit_priority=LOW; - // INSERT INTO my_table ... -- This starts the transaction with the options above included. opts := spanner.TransactionOptions{} opts.BeginTransactionOption = c.convertDefaultBeginTransactionOption(propertyBeginTransactionOption.GetValueOrDefault(c.state)) - tx, err := spanner.NewReadWriteStmtBasedTransactionWithCallbackForOptions(ctx, c.client, opts, func() spanner.TransactionOptions { + tx, err := spanner.NewReadWriteStmtBasedTransactionWithCallbackForOptions(c.tx.ctx, c.client, opts, func() spanner.TransactionOptions { defer func() { // Reset the transaction_tag after starting the transaction. _ = propertyTransactionTag.ResetValue(c.state, connectionstate.ContextUser) }() - return c.effectiveTransactionOptions(isolationLevelFromTxOpts, c.options( /*reset=*/ true)) + return c.effectiveTransactionOptions(spannerpb.TransactionOptions_ISOLATION_LEVEL_UNSPECIFIED, c.options( /*reset=*/ true)) }) if err != nil { return nil, err } logger := c.logger.With("tx", "rw") - c.tx = &readWriteTransaction{ - ctx: ctx, + return &readWriteTransaction{ + ctx: c.tx.ctx, conn: c, logger: logger, rwTx: tx, close: func(result txResult, commitResponse *spanner.CommitResponse, commitErr error) { - closeFunc() c.prevTx = c.tx - c.tx = nil if commitErr == nil { c.setCommitResponse(commitResponse) - if result == txResultCommit { - _ = c.state.Commit() - } else { - _ = c.state.Rollback() - } + closeFunc(result) } else { - _ = c.state.Rollback() + closeFunc(txResultRollback) } }, - // Disable internal retries if any of these options have been set. retryAborts: sync.OnceValue(func() bool { - return c.RetryAbortsInternally() && !disableRetryAborts + return c.RetryAbortsInternally() }), - } - c.clearCommitResponse() - return c.tx, nil + }, nil } func (c *conn) effectiveTransactionOptions(isolationLevelFromTxOpts spannerpb.TransactionOptions_IsolationLevel, execOptions *ExecOptions) spanner.TransactionOptions { @@ -1347,22 +1337,6 @@ func (c *conn) inTransaction() bool { return c.tx != nil } -func (c *conn) inReadOnlyTransaction() bool { - if c.tx != nil { - _, ok := c.tx.(*readOnlyTransaction) - return ok - } - return false -} - -func (c *conn) inReadWriteTransaction() bool { - if c.tx != nil { - _, ok := c.tx.(*readWriteTransaction) - return ok - } - return false -} - // Commit is not part of the public API of the database/sql driver. // It is exported for internal reasons, and may receive breaking changes without prior notice. // diff --git a/conn_with_mockserver_test.go b/conn_with_mockserver_test.go index 5ceba7ed..ffe0df58 100644 --- a/conn_with_mockserver_test.go +++ b/conn_with_mockserver_test.go @@ -20,6 +20,7 @@ import ( "fmt" "reflect" "testing" + "time" "cloud.google.com/go/longrunning/autogen/longrunningpb" "cloud.google.com/go/spanner" @@ -82,6 +83,79 @@ func TestTwoTransactionsOnOneConn(t *testing.T) { } } +func TestEmptyTransaction(t *testing.T) { + t.Parallel() + + db, server, teardown := setupTestDBConnection(t) + defer teardown() + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + db.SetMaxOpenConns(1) + + c, err := db.Conn(ctx) + if err != nil { + t.Fatal(err) + } + defer silentClose(c) + // Run twice to ensure that there is no connection leak. + for range 2 { + tx, err := c.BeginTx(ctx, &sql.TxOptions{}) + if err != nil { + t.Fatal(err) + } + if err := tx.Commit(); err != nil { + t.Fatal(err) + } + + // An empty transaction should be a no-op and not lead to any requests being sent to Spanner. + requests := server.TestSpanner.DrainRequestsFromServer() + beginRequests := testutil.RequestsOfType(requests, reflect.TypeOf(&spannerpb.BeginTransactionRequest{})) + if g, w := len(beginRequests), 0; g != w { + t.Fatalf("begin requests count mismatch\n Got: %v\nWant: %v", g, w) + } + commitRequests := testutil.RequestsOfType(requests, reflect.TypeOf(&spannerpb.CommitRequest{})) + if g, w := len(commitRequests), 0; g != w { + t.Fatalf("commit requests count mismatch\n Got: %v\nWant: %v", g, w) + } + } +} + +func TestEmptyTransactionUsingSql(t *testing.T) { + t.Parallel() + + db, server, teardown := setupTestDBConnection(t) + defer teardown() + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + db.SetMaxOpenConns(1) + + c, err := db.Conn(ctx) + if err != nil { + t.Fatal(err) + } + defer silentClose(c) + // Run twice to ensure that there is no connection leak. + for range 2 { + if _, err := c.ExecContext(ctx, "begin"); err != nil { + t.Fatal(err) + } + if _, err := c.ExecContext(ctx, "commit"); err != nil { + t.Fatal(err) + } + + // An empty transaction should be a no-op and not lead to any requests being sent to Spanner. + requests := server.TestSpanner.DrainRequestsFromServer() + beginRequests := testutil.RequestsOfType(requests, reflect.TypeOf(&spannerpb.BeginTransactionRequest{})) + if g, w := len(beginRequests), 0; g != w { + t.Fatalf("begin requests count mismatch\n Got: %v\nWant: %v", g, w) + } + commitRequests := testutil.RequestsOfType(requests, reflect.TypeOf(&spannerpb.CommitRequest{})) + if g, w := len(commitRequests), 0; g != w { + t.Fatalf("commit requests count mismatch\n Got: %v\nWant: %v", g, w) + } + } +} + func TestTwoQueriesOnOneConn(t *testing.T) { t.Parallel() diff --git a/connection_properties.go b/connection_properties.go index 6d65e02e..31218cd7 100644 --- a/connection_properties.go +++ b/connection_properties.go @@ -296,6 +296,15 @@ var propertyReturnCommitStats = createConnectionProperty( connectionstate.ContextUser, connectionstate.ConvertBool, ) +var propertyTransactionBatchReadOnly = createConnectionProperty( + "transaction_batch_read_only", + "transaction_batch_read_only indicates whether read-only transactions on this connection should use a batch read-only transaction.", + false, + false, + nil, + connectionstate.ContextUser, + connectionstate.ConvertBool, +) // ------------------------------------------------------------------------------------------------ // Statement connection properties. diff --git a/driver.go b/driver.go index 7ac7400f..5359f5ab 100644 --- a/driver.go +++ b/driver.go @@ -996,6 +996,7 @@ func runTransactionWithOptions(ctx context.Context, db *sql.DB, opts *sql.TxOpti _ = conn.Close() }() + tx, err := conn.BeginTx(ctx, opts) // We don't need to keep track of a running checksum for retries when using // this method, so we disable internal retries. // Retries will instead be handled by the loop below. @@ -1011,13 +1012,12 @@ func runTransactionWithOptions(ctx context.Context, db *sql.DB, opts *sql.TxOpti // It is not a Spanner connection, so just ignore and continue without any special handling. return nil } - spannerConn.withTempTransactionOptions(transactionOptions) + spannerConn.setReadWriteTransactionOptions(transactionOptions) return nil }); err != nil { return nil, err } - tx, err := conn.BeginTx(ctx, opts) if err != nil { return nil, err } @@ -1130,8 +1130,6 @@ type ReadWriteTransactionOptions struct { // disabled, and any Aborted error from Spanner is propagated to the // application. DisableInternalRetries bool - - close func() } // BeginReadWriteTransaction begins a read/write transaction on a Spanner database. @@ -1146,15 +1144,17 @@ func BeginReadWriteTransaction(ctx context.Context, db *sql.DB, options ReadWrit if err != nil { return nil, err } - options.close = func() { + if err := withTransactionCloseFunc(conn, func() { // Close the connection asynchronously, as the transaction will still // be active when we hit this point. go conn.Close() + }); err != nil { + return nil, err } + tx, err := conn.BeginTx(ctx, &sql.TxOptions{}) if err := withTempReadWriteTransactionOptions(conn, &options); err != nil { return nil, err } - tx, err := conn.BeginTx(ctx, &sql.TxOptions{}) if err != nil { return nil, err } @@ -1168,7 +1168,7 @@ func withTempReadWriteTransactionOptions(conn *sql.Conn, options *ReadWriteTrans // It is not a Spanner connection. return spanner.ToSpannerError(status.Error(codes.FailedPrecondition, "This function can only be used with a Spanner connection")) } - spannerConn.withTempTransactionOptions(options) + spannerConn.setReadWriteTransactionOptions(options) return nil }) } @@ -1178,8 +1178,6 @@ func withTempReadWriteTransactionOptions(conn *sql.Conn, options *ReadWriteTrans type ReadOnlyTransactionOptions struct { TimestampBound spanner.TimestampBound BeginTransactionOption spanner.BeginTransactionOption - - close func() } // BeginReadOnlyTransaction begins a read-only transaction on a Spanner database. @@ -1192,15 +1190,17 @@ func BeginReadOnlyTransaction(ctx context.Context, db *sql.DB, options ReadOnlyT if err != nil { return nil, err } - options.close = func() { + if err := withTransactionCloseFunc(conn, func() { // Close the connection asynchronously, as the transaction will still // be active when we hit this point. go conn.Close() + }); err != nil { + return nil, err } + tx, err := conn.BeginTx(ctx, &sql.TxOptions{ReadOnly: true}) if err := withTempReadOnlyTransactionOptions(conn, &options); err != nil { return nil, err } - tx, err := conn.BeginTx(ctx, &sql.TxOptions{ReadOnly: true}) if err != nil { clearTempReadOnlyTransactionOptions(conn) return nil, err @@ -1208,6 +1208,18 @@ func BeginReadOnlyTransaction(ctx context.Context, db *sql.DB, options ReadOnlyT return tx, nil } +func withTransactionCloseFunc(conn *sql.Conn, close func()) error { + return conn.Raw(func(driverConn any) error { + spannerConn, ok := driverConn.(SpannerConn) + if !ok { + // It is not a Spanner connection. + return spanner.ToSpannerError(status.Error(codes.FailedPrecondition, "This function can only be used with a Spanner connection")) + } + spannerConn.withTransactionCloseFunc(close) + return nil + }) +} + func withTempReadOnlyTransactionOptions(conn *sql.Conn, options *ReadOnlyTransactionOptions) error { return conn.Raw(func(driverConn any) error { spannerConn, ok := driverConn.(SpannerConn) @@ -1215,7 +1227,7 @@ func withTempReadOnlyTransactionOptions(conn *sql.Conn, options *ReadOnlyTransac // It is not a Spanner connection. return spanner.ToSpannerError(status.Error(codes.FailedPrecondition, "This function can only be used with a Spanner connection")) } - spannerConn.withTempReadOnlyTransactionOptions(options) + spannerConn.setReadOnlyTransactionOptions(options) return nil }) } diff --git a/driver_test.go b/driver_test.go index dc09940f..746df7b0 100644 --- a/driver_test.go +++ b/driver_test.go @@ -492,12 +492,12 @@ func TestConnection_Reset(t *testing.T) { propertyCommitResponse.Key(): propertyCommitResponse.CreateTypedInitialValue(nil), }), batch: &batch{tp: parser.BatchTypeDml}, - tx: &readOnlyTransaction{ + tx: &delegatingTransaction{contextTransaction: &readOnlyTransaction{ logger: noopLogger, close: func(_ txResult) { txClosed = true }, - }, + }}, } c.setCommitResponse(&spanner.CommitResponse{}) @@ -525,7 +525,7 @@ func TestConnection_NoNestedTransactions(t *testing.T) { c := conn{ logger: noopLogger, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{}), - tx: &readOnlyTransaction{}, + tx: &delegatingTransaction{}, } _, err := c.BeginTx(context.Background(), driver.TxOptions{}) if err == nil { @@ -571,9 +571,9 @@ func TestConn_StartBatchDdl(t *testing.T) { {"Default", &conn{logger: noopLogger, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{})}, false}, {"In DDL batch", &conn{logger: noopLogger, batch: &batch{tp: parser.BatchTypeDdl}, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{})}, true}, {"In DML batch", &conn{logger: noopLogger, batch: &batch{tp: parser.BatchTypeDml}, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{})}, true}, - {"In read/write transaction", &conn{logger: noopLogger, tx: &readWriteTransaction{}, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{})}, true}, - {"In read-only transaction", &conn{logger: noopLogger, tx: &readOnlyTransaction{}, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{})}, true}, - {"In read/write transaction with a DML batch", &conn{logger: noopLogger, tx: &readWriteTransaction{batch: &batch{tp: parser.BatchTypeDml}}, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{})}, true}, + {"In read/write transaction", &conn{logger: noopLogger, tx: &delegatingTransaction{contextTransaction: &readWriteTransaction{}}, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{})}, true}, + {"In read-only transaction", &conn{logger: noopLogger, tx: &delegatingTransaction{contextTransaction: &readOnlyTransaction{}}, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{})}, true}, + {"In read/write transaction with a DML batch", &conn{logger: noopLogger, tx: &delegatingTransaction{contextTransaction: &readWriteTransaction{batch: &batch{tp: parser.BatchTypeDml}}}, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{})}, true}, } { err := test.c.StartBatchDDL() if test.wantErr { @@ -600,9 +600,9 @@ func TestConn_StartBatchDml(t *testing.T) { {"Default", &conn{logger: noopLogger, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{})}, false}, {"In DDL batch", &conn{logger: noopLogger, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{}), batch: &batch{tp: parser.BatchTypeDdl}}, true}, {"In DML batch", &conn{logger: noopLogger, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{}), batch: &batch{tp: parser.BatchTypeDml}}, true}, - {"In read/write transaction", &conn{logger: noopLogger, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{}), tx: &readWriteTransaction{logger: noopLogger}}, false}, - {"In read-only transaction", &conn{logger: noopLogger, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{}), tx: &readOnlyTransaction{logger: noopLogger}}, true}, - {"In read/write transaction with a DML batch", &conn{logger: noopLogger, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{}), tx: &readWriteTransaction{logger: noopLogger, batch: &batch{tp: parser.BatchTypeDml}}}, true}, + {"In read/write transaction", &conn{logger: noopLogger, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{}), tx: &delegatingTransaction{contextTransaction: &readWriteTransaction{logger: noopLogger}}}, false}, + {"In read-only transaction", &conn{logger: noopLogger, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{}), tx: &delegatingTransaction{contextTransaction: &readOnlyTransaction{logger: noopLogger}}}, true}, + {"In read/write transaction with a DML batch", &conn{logger: noopLogger, state: createInitialConnectionState(connectionstate.TypeTransactional, map[string]connectionstate.ConnectionPropertyValue{}), tx: &delegatingTransaction{contextTransaction: &readWriteTransaction{logger: noopLogger, batch: &batch{tp: parser.BatchTypeDml}}}}, true}, } { err := test.c.StartBatchDML() if test.wantErr { diff --git a/driver_with_mockserver_test.go b/driver_with_mockserver_test.go index 209c1fa1..b059aa63 100644 --- a/driver_with_mockserver_test.go +++ b/driver_with_mockserver_test.go @@ -570,7 +570,7 @@ func TestReadOnlyTransactionWithOptions(t *testing.T) { requests = server.TestSpanner.DrainRequestsFromServer() beginReadOnlyRequests = filterBeginReadOnlyRequests(testutil.RequestsOfType(requests, reflect.TypeOf(&sppb.BeginTransactionRequest{}))) if g, w := len(beginReadOnlyRequests), 0; g != w { - t.Fatalf("begin requests count mismatch\nGot: %v\nWant: %v", g, w) + t.Fatalf("begin requests count mismatch\n Got: %v\nWant: %v", g, w) } executeRequests = testutil.RequestsOfType(requests, reflect.TypeOf(&sppb.ExecuteSqlRequest{})) if g, w := len(executeRequests), 1; g != w { @@ -2723,6 +2723,9 @@ func TestShowAndSetVariableRetryAbortsInternally(t *testing.T) { // Check that the behavior matches the setting. tx, _ := c.BeginTx(ctx, nil) + if _, err := tx.ExecContext(ctx, testutil.UpdateBarSetFoo); err != nil { + t.Fatal(err) + } server.TestSpanner.PutExecutionTime(testutil.MethodCommitTransaction, testutil.SimulatedExecutionTime{ Errors: []error{gstatus.Error(codes.Aborted, "Aborted")}, }) @@ -3242,6 +3245,9 @@ func TestCommitResponse(t *testing.T) { if err != nil { t.Fatalf("failed to start transaction: %v", err) } + if _, err := tx.ExecContext(ctx, testutil.UpdateBarSetFoo); err != nil { + t.Fatal(err) + } if err := tx.Commit(); err != nil { t.Fatalf("commit failed: %v", err) } @@ -3410,6 +3416,9 @@ func TestShowVariableCommitTimestamp(t *testing.T) { t.Fatalf("failed to get a connection: %v", err) } tx, err := conn.BeginTx(ctx, nil) + if _, err := conn.ExecContext(ctx, testutil.UpdateBarSetFoo); err != nil { + t.Fatal(err) + } if err != nil { t.Fatalf("failed to start transaction: %v", err) } @@ -4562,7 +4571,8 @@ func TestRunTransaction(t *testing.T) { defer silentClose(rows) // Verify that internal retries are disabled during RunTransaction txi := reflect.ValueOf(tx).Elem().FieldByName("txi") - rwTx := (*readWriteTransaction)(txi.Elem().UnsafePointer()) + delegatingTx := (*delegatingTransaction)(txi.Elem().UnsafePointer()) + rwTx := delegatingTx.contextTransaction.(*readWriteTransaction) // Verify that getting the transaction through reflection worked. if g, w := rwTx.ctx, ctx; g != w { return fmt.Errorf("getting the transaction through reflection failed") @@ -5023,7 +5033,8 @@ func TestBeginReadWriteTransaction(t *testing.T) { } // Verify that internal retries are disabled during this transaction. txi := reflect.ValueOf(tx).Elem().FieldByName("txi") - rwTx := (*readWriteTransaction)(txi.Elem().UnsafePointer()) + delegatingTx := (*delegatingTransaction)(txi.Elem().UnsafePointer()) + rwTx := delegatingTx.contextTransaction.(*readWriteTransaction) // Verify that getting the transaction through reflection worked. if g, w := rwTx.ctx, ctx; g != w { t.Fatal("getting the transaction through reflection failed") diff --git a/examples/go.mod b/examples/go.mod index c5ed264a..3ea288b6 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -13,12 +13,12 @@ require ( github.com/docker/go-connections v0.5.0 github.com/googleapis/go-sql-spanner v1.16.2 github.com/testcontainers/testcontainers-go v0.38.0 - google.golang.org/api v0.251.0 + google.golang.org/api v0.252.0 ) require ( cel.dev/expr v0.24.0 // indirect - cloud.google.com/go/auth v0.16.5 // indirect + cloud.google.com/go/auth v0.17.0 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect cloud.google.com/go/compute/metadata v0.9.0 // indirect cloud.google.com/go/iam v1.5.2 // indirect @@ -100,8 +100,8 @@ require ( golang.org/x/time v0.13.0 // indirect google.golang.org/genproto v0.0.0-20250804133106-a7a43d27e69b // indirect google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797 // indirect - google.golang.org/grpc v1.75.1 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff // indirect + google.golang.org/grpc v1.76.0 // indirect google.golang.org/protobuf v1.36.10 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/examples/go.sum b/examples/go.sum index f6ba2e7b..5e19c450 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -101,8 +101,8 @@ cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVo cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= -cloud.google.com/go/auth v0.16.5 h1:mFWNQ2FEVWAliEQWpAdH80omXFokmrnbDhUS9cBywsI= -cloud.google.com/go/auth v0.16.5/go.mod h1:utzRfHMP+Vv0mpOkTRQoWD2q3BatTOoWbA7gCc2dUhQ= +cloud.google.com/go/auth v0.17.0 h1:74yCm7hCj2rUyyAocqnFzsAYXgJhrG26XCFimrc/Kz4= +cloud.google.com/go/auth v0.17.0/go.mod h1:6wv/t5/6rOPAX4fJiRjKkJCvswLwdet7G8+UGXt7nCQ= cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= @@ -1476,8 +1476,8 @@ google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/ google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= -google.golang.org/api v0.251.0 h1:6lea5nHRT8RUmpy9kkC2PJYnhnDAB13LqrLSVQlMIE8= -google.golang.org/api v0.251.0/go.mod h1:Rwy0lPf/TD7+T2VhYcffCHhyyInyuxGjICxdfLqT7KI= +google.golang.org/api v0.252.0 h1:xfKJeAJaMwb8OC9fesr369rjciQ704AjU/psjkKURSI= +google.golang.org/api v0.252.0/go.mod h1:dnHOv81x5RAmumZ7BWLShB/u7JZNeyalImxHmtTHxqw= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1621,8 +1621,8 @@ google.golang.org/genproto v0.0.0-20250804133106-a7a43d27e69b h1:eZTgydvqZO44zyT google.golang.org/genproto v0.0.0-20250804133106-a7a43d27e69b/go.mod h1:suyz2QBHQKlGIF92HEEsCfO1SwxXdk7PFLz+Zd9Uah4= google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c h1:AtEkQdl5b6zsybXcbz00j1LwNodDuH6hVifIaNqk7NQ= google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c/go.mod h1:ea2MjsO70ssTfCjiwHgI0ZFqcw45Ksuk2ckf9G468GA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797 h1:CirRxTOwnRWVLKzDNrs0CXAaVozJoR4G9xvdRecrdpk= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797/go.mod h1:HSkG/KdJWusxU1F6CNrwNDjBMgisKxGnc5dAZfT0mjQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff h1:A90eA31Wq6HOMIQlLfzFwzqGKBTuaVztYu/g8sn+8Zc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1664,8 +1664,8 @@ google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5v google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= -google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI= -google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= +google.golang.org/grpc v1.76.0 h1:UnVkv1+uMLYXoIz6o7chp59WfQUYA2ex/BXQ9rHZu7A= +google.golang.org/grpc v1.76.0/go.mod h1:Ju12QI8M6iQJtbcsV+awF5a4hfJMLi4X0JLo94ULZ6c= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= diff --git a/go.mod b/go.mod index 3311c949..55e0714d 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,7 @@ module github.com/googleapis/go-sql-spanner go 1.24.0 -toolchain go1.25.1 +toolchain go1.25.2 require ( cloud.google.com/go v0.123.0 @@ -13,15 +13,15 @@ require ( github.com/google/uuid v1.6.0 github.com/googleapis/gax-go/v2 v2.15.0 github.com/hashicorp/golang-lru/v2 v2.0.7 - google.golang.org/api v0.251.0 - google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797 - google.golang.org/grpc v1.75.1 + google.golang.org/api v0.252.0 + google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff + google.golang.org/grpc v1.76.0 google.golang.org/protobuf v1.36.10 ) require ( cel.dev/expr v0.24.0 // indirect - cloud.google.com/go/auth v0.16.5 // indirect + cloud.google.com/go/auth v0.17.0 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect cloud.google.com/go/compute/metadata v0.9.0 // indirect cloud.google.com/go/iam v1.5.2 // indirect diff --git a/go.sum b/go.sum index 37cdcdc0..4c175de9 100644 --- a/go.sum +++ b/go.sum @@ -101,8 +101,8 @@ cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVo cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= -cloud.google.com/go/auth v0.16.5 h1:mFWNQ2FEVWAliEQWpAdH80omXFokmrnbDhUS9cBywsI= -cloud.google.com/go/auth v0.16.5/go.mod h1:utzRfHMP+Vv0mpOkTRQoWD2q3BatTOoWbA7gCc2dUhQ= +cloud.google.com/go/auth v0.17.0 h1:74yCm7hCj2rUyyAocqnFzsAYXgJhrG26XCFimrc/Kz4= +cloud.google.com/go/auth v0.17.0/go.mod h1:6wv/t5/6rOPAX4fJiRjKkJCvswLwdet7G8+UGXt7nCQ= cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= @@ -1371,8 +1371,8 @@ google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/ google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= -google.golang.org/api v0.251.0 h1:6lea5nHRT8RUmpy9kkC2PJYnhnDAB13LqrLSVQlMIE8= -google.golang.org/api v0.251.0/go.mod h1:Rwy0lPf/TD7+T2VhYcffCHhyyInyuxGjICxdfLqT7KI= +google.golang.org/api v0.252.0 h1:xfKJeAJaMwb8OC9fesr369rjciQ704AjU/psjkKURSI= +google.golang.org/api v0.252.0/go.mod h1:dnHOv81x5RAmumZ7BWLShB/u7JZNeyalImxHmtTHxqw= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1516,8 +1516,8 @@ google.golang.org/genproto v0.0.0-20250804133106-a7a43d27e69b h1:eZTgydvqZO44zyT google.golang.org/genproto v0.0.0-20250804133106-a7a43d27e69b/go.mod h1:suyz2QBHQKlGIF92HEEsCfO1SwxXdk7PFLz+Zd9Uah4= google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c h1:AtEkQdl5b6zsybXcbz00j1LwNodDuH6hVifIaNqk7NQ= google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c/go.mod h1:ea2MjsO70ssTfCjiwHgI0ZFqcw45Ksuk2ckf9G468GA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797 h1:CirRxTOwnRWVLKzDNrs0CXAaVozJoR4G9xvdRecrdpk= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797/go.mod h1:HSkG/KdJWusxU1F6CNrwNDjBMgisKxGnc5dAZfT0mjQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff h1:A90eA31Wq6HOMIQlLfzFwzqGKBTuaVztYu/g8sn+8Zc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1559,8 +1559,8 @@ google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5v google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= -google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI= -google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= +google.golang.org/grpc v1.76.0 h1:UnVkv1+uMLYXoIz6o7chp59WfQUYA2ex/BXQ9rHZu7A= +google.golang.org/grpc v1.76.0/go.mod h1:Ju12QI8M6iQJtbcsV+awF5a4hfJMLi4X0JLo94ULZ6c= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= diff --git a/partitioned_query.go b/partitioned_query.go index 018f7b7d..30c2f6fb 100644 --- a/partitioned_query.go +++ b/partitioned_query.go @@ -29,8 +29,6 @@ import ( type BatchReadOnlyTransactionOptions struct { TimestampBound spanner.TimestampBound - - close func() } // PartitionedQueryOptions are used for queries that use the AutoPartitionQuery @@ -183,15 +181,17 @@ func BeginBatchReadOnlyTransaction(ctx context.Context, db *sql.DB, options Batc if err != nil { return nil, err } - options.close = func() { + if err := withTransactionCloseFunc(conn, func() { // Close the connection asynchronously, as the transaction will still // be active when we hit this point. go conn.Close() + }); err != nil { + return nil, err } + tx, err := conn.BeginTx(ctx, &sql.TxOptions{ReadOnly: true, Isolation: WithBatchReadOnly(sql.LevelDefault)}) if err := withTempBatchReadOnlyTransactionOptions(conn, &options); err != nil { return nil, err } - tx, err := conn.BeginTx(ctx, &sql.TxOptions{ReadOnly: true, Isolation: WithBatchReadOnly(sql.LevelDefault)}) if err != nil { clearTempBatchReadOnlyTransactionOptions(conn) return nil, err @@ -206,7 +206,7 @@ func withTempBatchReadOnlyTransactionOptions(conn *sql.Conn, options *BatchReadO // It is not a Spanner connection. return spanner.ToSpannerError(status.Error(codes.FailedPrecondition, "This function can only be used with a Spanner connection")) } - spannerConn.withTempBatchReadOnlyTransactionOptions(options) + spannerConn.setBatchReadOnlyTransactionOptions(options) return nil }) } diff --git a/snippets/go.mod b/snippets/go.mod index 2dd835ea..7213108e 100644 --- a/snippets/go.mod +++ b/snippets/go.mod @@ -2,21 +2,21 @@ module github.com/googleapis/go-sql-spanner/examples go 1.24.0 -toolchain go1.25.1 +toolchain go1.25.2 replace github.com/googleapis/go-sql-spanner => ../ require ( cloud.google.com/go/spanner v1.86.0 github.com/docker/docker v28.5.0+incompatible - github.com/googleapis/go-sql-spanner v1.18.1 + github.com/googleapis/go-sql-spanner v1.19.0 github.com/testcontainers/testcontainers-go v0.39.0 ) require ( cel.dev/expr v0.24.0 // indirect cloud.google.com/go v0.123.0 // indirect - cloud.google.com/go/auth v0.16.5 // indirect + cloud.google.com/go/auth v0.17.0 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect cloud.google.com/go/compute/metadata v0.9.0 // indirect cloud.google.com/go/iam v1.5.2 // indirect @@ -97,11 +97,11 @@ require ( golang.org/x/sys v0.36.0 // indirect golang.org/x/text v0.29.0 // indirect golang.org/x/time v0.13.0 // indirect - google.golang.org/api v0.251.0 // indirect + google.golang.org/api v0.252.0 // indirect google.golang.org/genproto v0.0.0-20250804133106-a7a43d27e69b // indirect google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797 // indirect - google.golang.org/grpc v1.75.1 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff // indirect + google.golang.org/grpc v1.76.0 // indirect google.golang.org/protobuf v1.36.10 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/snippets/go.sum b/snippets/go.sum index 064c23d0..d344f008 100644 --- a/snippets/go.sum +++ b/snippets/go.sum @@ -101,8 +101,8 @@ cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVo cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= -cloud.google.com/go/auth v0.16.5 h1:mFWNQ2FEVWAliEQWpAdH80omXFokmrnbDhUS9cBywsI= -cloud.google.com/go/auth v0.16.5/go.mod h1:utzRfHMP+Vv0mpOkTRQoWD2q3BatTOoWbA7gCc2dUhQ= +cloud.google.com/go/auth v0.17.0 h1:74yCm7hCj2rUyyAocqnFzsAYXgJhrG26XCFimrc/Kz4= +cloud.google.com/go/auth v0.17.0/go.mod h1:6wv/t5/6rOPAX4fJiRjKkJCvswLwdet7G8+UGXt7nCQ= cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= @@ -1470,8 +1470,8 @@ google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/ google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= -google.golang.org/api v0.251.0 h1:6lea5nHRT8RUmpy9kkC2PJYnhnDAB13LqrLSVQlMIE8= -google.golang.org/api v0.251.0/go.mod h1:Rwy0lPf/TD7+T2VhYcffCHhyyInyuxGjICxdfLqT7KI= +google.golang.org/api v0.252.0 h1:xfKJeAJaMwb8OC9fesr369rjciQ704AjU/psjkKURSI= +google.golang.org/api v0.252.0/go.mod h1:dnHOv81x5RAmumZ7BWLShB/u7JZNeyalImxHmtTHxqw= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1615,8 +1615,8 @@ google.golang.org/genproto v0.0.0-20250804133106-a7a43d27e69b h1:eZTgydvqZO44zyT google.golang.org/genproto v0.0.0-20250804133106-a7a43d27e69b/go.mod h1:suyz2QBHQKlGIF92HEEsCfO1SwxXdk7PFLz+Zd9Uah4= google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c h1:AtEkQdl5b6zsybXcbz00j1LwNodDuH6hVifIaNqk7NQ= google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c/go.mod h1:ea2MjsO70ssTfCjiwHgI0ZFqcw45Ksuk2ckf9G468GA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797 h1:CirRxTOwnRWVLKzDNrs0CXAaVozJoR4G9xvdRecrdpk= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797/go.mod h1:HSkG/KdJWusxU1F6CNrwNDjBMgisKxGnc5dAZfT0mjQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff h1:A90eA31Wq6HOMIQlLfzFwzqGKBTuaVztYu/g8sn+8Zc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1658,8 +1658,8 @@ google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5v google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= -google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI= -google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= +google.golang.org/grpc v1.76.0 h1:UnVkv1+uMLYXoIz6o7chp59WfQUYA2ex/BXQ9rHZu7A= +google.golang.org/grpc v1.76.0/go.mod h1:Ju12QI8M6iQJtbcsV+awF5a4hfJMLi4X0JLo94ULZ6c= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= diff --git a/spannerlib/api/connection.go b/spannerlib/api/connection.go index 907212ec..ab256879 100644 --- a/spannerlib/api/connection.go +++ b/spannerlib/api/connection.go @@ -121,8 +121,8 @@ type Connection struct { // It is implemented by the spannerdriver.conn struct. type spannerConn interface { WriteMutations(ctx context.Context, ms []*spanner.Mutation) (*spanner.CommitResponse, error) - BeginReadOnlyTransaction(ctx context.Context, options *spannerdriver.ReadOnlyTransactionOptions) (driver.Tx, error) - BeginReadWriteTransaction(ctx context.Context, options *spannerdriver.ReadWriteTransactionOptions) (driver.Tx, error) + BeginReadOnlyTransaction(ctx context.Context, options *spannerdriver.ReadOnlyTransactionOptions, close func()) (driver.Tx, error) + BeginReadWriteTransaction(ctx context.Context, options *spannerdriver.ReadWriteTransactionOptions, close func()) (driver.Tx, error) Commit(ctx context.Context) (*spanner.CommitResponse, error) Rollback(ctx context.Context) error } @@ -155,7 +155,10 @@ func (conn *Connection) writeMutations(ctx context.Context, mutation *spannerpb. } var commitResponse *spanner.CommitResponse if err := conn.backend.Raw(func(driverConn any) (err error) { - sc, _ := driverConn.(spannerConn) + sc, ok := driverConn.(spannerConn) + if !ok { + return status.Error(codes.Internal, "spanner driver connection does not implement spannerConn") + } commitResponse, err = sc.WriteMutations(ctx, mutations) return err }); err != nil { @@ -189,16 +192,22 @@ func (conn *Connection) BeginTransaction(ctx context.Context, txOpts *spannerpb. func (conn *Connection) beginReadOnlyTransaction(ctx context.Context, opts *spannerdriver.ReadOnlyTransactionOptions) error { return conn.backend.Raw(func(driverConn any) (err error) { - sc, _ := driverConn.(spannerConn) - _, err = sc.BeginReadOnlyTransaction(ctx, opts) + sc, ok := driverConn.(spannerConn) + if !ok { + return status.Error(codes.Internal, "driver connection does not implement spannerConn") + } + _, err = sc.BeginReadOnlyTransaction(ctx, opts, func() {}) return err }) } func (conn *Connection) beginReadWriteTransaction(ctx context.Context, opts *spannerdriver.ReadWriteTransactionOptions) error { return conn.backend.Raw(func(driverConn any) (err error) { - sc, _ := driverConn.(spannerConn) - _, err = sc.BeginReadWriteTransaction(ctx, opts) + sc, ok := driverConn.(spannerConn) + if !ok { + return status.Error(codes.Internal, "driver connection does not implement spannerConn") + } + _, err = sc.BeginReadWriteTransaction(ctx, opts, func() {}) return err }) } @@ -206,8 +215,11 @@ func (conn *Connection) beginReadWriteTransaction(ctx context.Context, opts *spa func (conn *Connection) commit(ctx context.Context) (*spannerpb.CommitResponse, error) { var response *spanner.CommitResponse if err := conn.backend.Raw(func(driverConn any) (err error) { - spannerConn, _ := driverConn.(spannerConn) - response, err = spannerConn.Commit(ctx) + sc, ok := driverConn.(spannerConn) + if !ok { + return status.Error(codes.Internal, "driver connection does not implement spannerConn") + } + response, err = sc.Commit(ctx) if err != nil { return err } @@ -226,8 +238,11 @@ func (conn *Connection) commit(ctx context.Context) (*spannerpb.CommitResponse, func (conn *Connection) rollback(ctx context.Context) error { return conn.backend.Raw(func(driverConn any) (err error) { - spannerConn, _ := driverConn.(spannerConn) - return spannerConn.Rollback(ctx) + sc, ok := driverConn.(spannerConn) + if !ok { + return status.Error(codes.Internal, "driver connection does not implement spannerConn") + } + return sc.Rollback(ctx) }) } diff --git a/spannerlib/go.mod b/spannerlib/go.mod index 668edc15..6194e631 100644 --- a/spannerlib/go.mod +++ b/spannerlib/go.mod @@ -2,7 +2,7 @@ module spannerlib go 1.24.0 -toolchain go1.25.1 +toolchain go1.25.2 replace github.com/googleapis/go-sql-spanner => .. @@ -10,15 +10,17 @@ require ( cloud.google.com/go/longrunning v0.6.7 cloud.google.com/go/spanner v1.86.0 github.com/google/go-cmp v0.7.0 - github.com/googleapis/go-sql-spanner v1.18.1 - google.golang.org/grpc v1.75.1 + github.com/google/uuid v1.6.0 + github.com/googleapis/go-sql-spanner v1.19.0 + google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c + google.golang.org/grpc v1.76.0 google.golang.org/protobuf v1.36.10 ) require ( cel.dev/expr v0.24.0 // indirect cloud.google.com/go v0.123.0 // indirect - cloud.google.com/go/auth v0.16.5 // indirect + cloud.google.com/go/auth v0.17.0 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect cloud.google.com/go/compute/metadata v0.9.0 // indirect cloud.google.com/go/iam v1.5.2 // indirect @@ -36,7 +38,6 @@ require ( github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/google/s2a-go v0.1.9 // indirect - github.com/google/uuid v1.6.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect github.com/googleapis/gax-go/v2 v2.15.0 // indirect github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect @@ -60,8 +61,7 @@ require ( golang.org/x/sys v0.36.0 // indirect golang.org/x/text v0.29.0 // indirect golang.org/x/time v0.13.0 // indirect - google.golang.org/api v0.251.0 // indirect + google.golang.org/api v0.252.0 // indirect google.golang.org/genproto v0.0.0-20250804133106-a7a43d27e69b // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff // indirect ) diff --git a/spannerlib/go.sum b/spannerlib/go.sum index 37cdcdc0..4c175de9 100644 --- a/spannerlib/go.sum +++ b/spannerlib/go.sum @@ -101,8 +101,8 @@ cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVo cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= -cloud.google.com/go/auth v0.16.5 h1:mFWNQ2FEVWAliEQWpAdH80omXFokmrnbDhUS9cBywsI= -cloud.google.com/go/auth v0.16.5/go.mod h1:utzRfHMP+Vv0mpOkTRQoWD2q3BatTOoWbA7gCc2dUhQ= +cloud.google.com/go/auth v0.17.0 h1:74yCm7hCj2rUyyAocqnFzsAYXgJhrG26XCFimrc/Kz4= +cloud.google.com/go/auth v0.17.0/go.mod h1:6wv/t5/6rOPAX4fJiRjKkJCvswLwdet7G8+UGXt7nCQ= cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= @@ -1371,8 +1371,8 @@ google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/ google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= -google.golang.org/api v0.251.0 h1:6lea5nHRT8RUmpy9kkC2PJYnhnDAB13LqrLSVQlMIE8= -google.golang.org/api v0.251.0/go.mod h1:Rwy0lPf/TD7+T2VhYcffCHhyyInyuxGjICxdfLqT7KI= +google.golang.org/api v0.252.0 h1:xfKJeAJaMwb8OC9fesr369rjciQ704AjU/psjkKURSI= +google.golang.org/api v0.252.0/go.mod h1:dnHOv81x5RAmumZ7BWLShB/u7JZNeyalImxHmtTHxqw= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1516,8 +1516,8 @@ google.golang.org/genproto v0.0.0-20250804133106-a7a43d27e69b h1:eZTgydvqZO44zyT google.golang.org/genproto v0.0.0-20250804133106-a7a43d27e69b/go.mod h1:suyz2QBHQKlGIF92HEEsCfO1SwxXdk7PFLz+Zd9Uah4= google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c h1:AtEkQdl5b6zsybXcbz00j1LwNodDuH6hVifIaNqk7NQ= google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c/go.mod h1:ea2MjsO70ssTfCjiwHgI0ZFqcw45Ksuk2ckf9G468GA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797 h1:CirRxTOwnRWVLKzDNrs0CXAaVozJoR4G9xvdRecrdpk= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797/go.mod h1:HSkG/KdJWusxU1F6CNrwNDjBMgisKxGnc5dAZfT0mjQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff h1:A90eA31Wq6HOMIQlLfzFwzqGKBTuaVztYu/g8sn+8Zc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1559,8 +1559,8 @@ google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5v google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= -google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI= -google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= +google.golang.org/grpc v1.76.0 h1:UnVkv1+uMLYXoIz6o7chp59WfQUYA2ex/BXQ9rHZu7A= +google.golang.org/grpc v1.76.0/go.mod h1:Ju12QI8M6iQJtbcsV+awF5a4hfJMLi4X0JLo94ULZ6c= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= diff --git a/spannerlib/grpc-server/build-dotnet-darwin-aarch64.sh b/spannerlib/grpc-server/build-dotnet-darwin-aarch64.sh new file mode 100755 index 00000000..3578601b --- /dev/null +++ b/spannerlib/grpc-server/build-dotnet-darwin-aarch64.sh @@ -0,0 +1,4 @@ +go build -o grpc_server server.go +chmod +x grpc_server +cp grpc_server ../wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc/binaries/any/grpc_server +cp grpc_server ../wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc/binaries/osx-arm64/grpc_server diff --git a/spannerlib/grpc-server/build-java-darwin-aarch64.sh b/spannerlib/grpc-server/build-java-darwin-aarch64.sh 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..8e80a68c --- /dev/null +++ b/spannerlib/grpc-server/server.go @@ -0,0 +1,249 @@ +package main + +import ( + "context" + "log" + "net" + "os" + "os/signal" + "syscall" + + "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) }() + // Set up a channel to listen for OS signals that terminate the process, + // so we can clean up the temp file in those cases as well. + sigs := make(chan os.Signal, 1) + signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM) + go func() { + // Wait for a signal. + <-sigs + // Delete the temp file. + _ = os.Remove(name) + os.Exit(0) + }() + } + + lis, err := net.Listen(tp, name) + if err != nil { + log.Fatalf("failed to listen: %v\n", err) + } + var opts []grpc.ServerOption + grpcServer := grpc.NewServer(opts...) + + server := spannerLibServer{} + pb.RegisterSpannerLibServer(grpcServer, &server) + log.Printf("Starting gRPC server on %s\n", lis.Addr().String()) + err = grpcServer.Serve(lis) + if err != nil { + log.Printf("failed to serve: %v\n", err) + } +} + +var _ pb.SpannerLibServer = &spannerLibServer{} + +type spannerLibServer struct { + pb.UnimplementedSpannerLibServer +} + +func (s *spannerLibServer) 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..8be4e51c --- /dev/null +++ b/spannerlib/grpc-server/server_test.go @@ -0,0 +1,503 @@ +package main + +import ( + "context" + "fmt" + "net" + "os" + "path/filepath" + "runtime" + "testing" + + "cloud.google.com/go/spanner/admin/database/apiv1/databasepb" + sppb "cloud.google.com/go/spanner/apiv1/spannerpb" + "github.com/google/uuid" + "github.com/googleapis/go-sql-spanner/testutil" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" + "google.golang.org/protobuf/types/known/structpb" + pb "spannerlib/grpc-server/google/spannerlib/v1" +) + +func TestCreatePool(t *testing.T) { + t.Parallel() + ctx := context.Background() + + server, teardown := setupMockSpannerServer(t) + defer teardown() + dsn := fmt.Sprintf("%s/projects/p/instances/i/databases/d?useplaintext=true", server.Address) + + client, cleanup := startTestSpannerLibServer(t) + defer cleanup() + + pool, err := client.CreatePool(ctx, &pb.CreatePoolRequest{ConnectionString: dsn}) + if err != nil { + t.Fatalf("failed to create pool: %v", err) + } + if pool.Id <= 0 { + t.Fatalf("pool id should be greater than zero") + } + + if _, err := client.ClosePool(ctx, pool); err != nil { + t.Fatalf("failed to close pool: %v", err) + } +} + +func TestCreateConnection(t *testing.T) { + t.Parallel() + ctx := context.Background() + + server, teardown := setupMockSpannerServer(t) + defer teardown() + dsn := fmt.Sprintf("%s/projects/p/instances/i/databases/d?useplaintext=true", server.Address) + + client, cleanup := startTestSpannerLibServer(t) + defer cleanup() + + pool, err := client.CreatePool(ctx, &pb.CreatePoolRequest{ConnectionString: dsn}) + if err != nil { + t.Fatalf("failed to create pool: %v", err) + } + connection, err := client.CreateConnection(ctx, &pb.CreateConnectionRequest{Pool: pool}) + if err != nil { + t.Fatalf("failed to create connection: %v", err) + } + if connection.Id <= 0 { + t.Fatalf("connection id should be greater than zero") + } + + if _, err := client.CloseConnection(ctx, connection); err != nil { + t.Fatalf("failed to close connection: %v", err) + } + if _, err := client.ClosePool(ctx, pool); err != nil { + t.Fatalf("failed to close pool: %v", err) + } +} + +func TestExecute(t *testing.T) { + t.Parallel() + ctx := context.Background() + + server, teardown := setupMockSpannerServer(t) + defer teardown() + dsn := fmt.Sprintf("%s/projects/p/instances/i/databases/d?useplaintext=true", server.Address) + + client, cleanup := startTestSpannerLibServer(t) + defer cleanup() + + pool, err := client.CreatePool(ctx, &pb.CreatePoolRequest{ConnectionString: dsn}) + if err != nil { + t.Fatalf("failed to create pool: %v", err) + } + connection, err := client.CreateConnection(ctx, &pb.CreateConnectionRequest{Pool: pool}) + if err != nil { + t.Fatalf("failed to create connection: %v", err) + } + rows, err := client.Execute(ctx, &pb.ExecuteRequest{ + Connection: connection, + ExecuteSqlRequest: &sppb.ExecuteSqlRequest{Sql: testutil.SelectFooFromBar}, + }) + if err != nil { + t.Fatalf("failed to execute: %v", err) + } + metadata, err := client.Metadata(ctx, rows) + if err != nil { + t.Fatalf("failed to get metadata: %v", err) + } + if g, w := len(metadata.RowType.Fields), 1; g != w { + t.Fatalf("num fields mismatch\n Got: %d\nWant: %d", g, w) + } + + numRows := 0 + for { + row, err := client.Next(ctx, &pb.NextRequest{Rows: rows, NumRows: 1}) + if err != nil { + t.Fatalf("failed to fetch next row: %v", err) + } + if row.Values == nil { + break + } + if g, w := len(row.Values), 1; g != w { + t.Fatalf("num values mismatch\n Got: %v\nWant: %v", g, w) + } + numRows++ + } + if g, w := numRows, 2; g != w { + t.Fatalf("num rows mismatch\n Got: %v\nWant: %v", g, w) + } + stats, err := client.ResultSetStats(ctx, rows) + if err != nil { + t.Fatalf("failed to get stats: %v", err) + } + if g, w := stats.GetRowCountExact(), int64(0); g != w { + t.Fatalf("row count mismatch\n Got: %v\nWant: %v", g, w) + } + if _, err := client.CloseRows(ctx, rows); err != nil { + t.Fatalf("failed to close rows: %v", err) + } + + if _, err := client.ClosePool(ctx, pool); err != nil { + t.Fatalf("failed to close pool: %v", err) + } +} + +func TestExecuteStreaming(t *testing.T) { + t.Parallel() + ctx := context.Background() + + server, teardown := setupMockSpannerServer(t) + defer teardown() + dsn := fmt.Sprintf("%s/projects/p/instances/i/databases/d?useplaintext=true", server.Address) + + client, cleanup := startTestSpannerLibServer(t) + defer cleanup() + + pool, err := client.CreatePool(ctx, &pb.CreatePoolRequest{ConnectionString: dsn}) + if err != nil { + t.Fatalf("failed to create pool: %v", err) + } + connection, err := client.CreateConnection(ctx, &pb.CreateConnectionRequest{Pool: pool}) + if err != nil { + t.Fatalf("failed to create connection: %v", err) + } + stream, err := client.ExecuteStreaming(ctx, &pb.ExecuteRequest{ + Connection: connection, + ExecuteSqlRequest: &sppb.ExecuteSqlRequest{Sql: testutil.SelectFooFromBar}, + }) + if err != nil { + t.Fatalf("failed to execute: %v", err) + } + numRows := 0 + for { + row, err := stream.Recv() + if err != nil { + t.Fatalf("failed to receive row: %v", err) + } + if len(row.Data) == 0 { + break + } + if g, w := len(row.Data), 1; g != w { + t.Fatalf("num rows mismatch\n Got: %v\nWant: %v", g, w) + } + if g, w := len(row.Data[0].Values), 1; g != w { + t.Fatalf("num values mismatch\n Got: %v\nWant: %v", g, w) + } + numRows++ + } + if g, w := numRows, 2; g != w { + t.Fatalf("num rows mismatch\n Got: %v\nWant: %v", g, w) + } + + if _, err := client.ClosePool(ctx, pool); err != nil { + t.Fatalf("failed to close pool: %v", err) + } +} + +func TestExecuteStreamingClientSideStatement(t *testing.T) { + t.Parallel() + ctx := context.Background() + + server, teardown := setupMockSpannerServer(t) + defer teardown() + dsn := fmt.Sprintf("%s/projects/p/instances/i/databases/d?useplaintext=true", server.Address) + + client, cleanup := startTestSpannerLibServer(t) + defer cleanup() + + pool, err := client.CreatePool(ctx, &pb.CreatePoolRequest{ConnectionString: dsn}) + if err != nil { + t.Fatalf("failed to create pool: %v", err) + } + connection, err := client.CreateConnection(ctx, &pb.CreateConnectionRequest{Pool: pool}) + if err != nil { + t.Fatalf("failed to create connection: %v", err) + } + stream, err := client.ExecuteStreaming(ctx, &pb.ExecuteRequest{ + Connection: connection, + ExecuteSqlRequest: &sppb.ExecuteSqlRequest{Sql: "begin"}, + }) + if err != nil { + t.Fatalf("failed to execute: %v", err) + } + for { + row, err := stream.Recv() + if err != nil { + t.Fatalf("failed to receive row: %v", err) + } + if len(row.Data) == 0 { + break + } + } + stream, err = client.ExecuteStreaming(context.Background(), &pb.ExecuteRequest{ + Connection: connection, + ExecuteSqlRequest: &sppb.ExecuteSqlRequest{Sql: "commit"}, + }) + if err != nil { + t.Fatalf("failed to execute: %v", err) + } + for { + row, err := stream.Recv() + if err != nil { + t.Fatalf("failed to receive row: %v", err) + } + if len(row.Data) == 0 { + break + } + } + + if _, err := client.ClosePool(ctx, pool); err != nil { + t.Fatalf("failed to close pool: %v", err) + } +} + +func TestExecuteBatch(t *testing.T) { + t.Parallel() + ctx := context.Background() + + server, teardown := setupMockSpannerServer(t) + defer teardown() + dsn := fmt.Sprintf("%s/projects/p/instances/i/databases/d?useplaintext=true", server.Address) + + client, cleanup := startTestSpannerLibServer(t) + defer cleanup() + + pool, err := client.CreatePool(ctx, &pb.CreatePoolRequest{ConnectionString: dsn}) + if err != nil { + t.Fatalf("failed to create pool: %v", err) + } + connection, err := client.CreateConnection(ctx, &pb.CreateConnectionRequest{Pool: pool}) + if err != nil { + t.Fatalf("failed to create connection: %v", err) + } + + resp, err := client.ExecuteBatch(ctx, &pb.ExecuteBatchRequest{ + Connection: connection, + ExecuteBatchDmlRequest: &sppb.ExecuteBatchDmlRequest{ + Statements: []*sppb.ExecuteBatchDmlRequest_Statement{ + {Sql: testutil.UpdateBarSetFoo}, + {Sql: testutil.UpdateBarSetFoo}, + }, + }, + }) + if err != nil { + t.Fatalf("failed to execute batch: %v", err) + } + if g, w := len(resp.ResultSets), 2; g != w { + t.Fatalf("num results mismatch\n Got: %v\nWant: %v", g, w) + } + + if _, err := client.ClosePool(ctx, pool); err != nil { + t.Fatalf("failed to close pool: %v", err) + } +} + +func TestTransaction(t *testing.T) { + t.Parallel() + ctx := context.Background() + + server, teardown := setupMockSpannerServer(t) + defer teardown() + dsn := fmt.Sprintf("%s/projects/p/instances/i/databases/d?useplaintext=true", server.Address) + + client, cleanup := startTestSpannerLibServer(t) + defer cleanup() + + pool, err := client.CreatePool(ctx, &pb.CreatePoolRequest{ConnectionString: dsn}) + if err != nil { + t.Fatalf("failed to create pool: %v", err) + } + connection, err := client.CreateConnection(ctx, &pb.CreateConnectionRequest{Pool: pool}) + if err != nil { + t.Fatalf("failed to create connection: %v", err) + } + if _, err := client.BeginTransaction(ctx, &pb.BeginTransactionRequest{ + Connection: connection, + TransactionOptions: &sppb.TransactionOptions{}, + }); err != nil { + t.Fatalf("failed to begin transaction: %v", err) + } + rows, err := client.Execute(ctx, &pb.ExecuteRequest{ + Connection: connection, + ExecuteSqlRequest: &sppb.ExecuteSqlRequest{Sql: testutil.UpdateBarSetFoo}, + }) + if err != nil { + t.Fatalf("failed to execute: %v", err) + } + row, err := client.Next(ctx, &pb.NextRequest{Rows: rows, NumRows: 1}) + if err != nil { + t.Fatalf("failed to fetch next row: %v", err) + } + if row.Values != nil { + t.Fatalf("row values should be nil: %v", row.Values) + } + stats, err := client.ResultSetStats(ctx, rows) + if err != nil { + t.Fatalf("failed to get stats: %v", err) + } + if g, w := stats.GetRowCountExact(), int64(testutil.UpdateBarSetFooRowCount); g != w { + t.Fatalf("row count mismatch\n Got: %v\nWant: %v", g, w) + } + if _, err := client.CloseRows(ctx, rows); err != nil { + t.Fatalf("failed to close rows: %v", err) + } + if _, err := client.Commit(ctx, connection); err != nil { + t.Fatalf("failed to commit: %v", err) + } + + if _, err := client.ClosePool(ctx, pool); err != nil { + t.Fatalf("failed to close pool: %v", err) + } +} + +func TestRollback(t *testing.T) { + t.Parallel() + ctx := context.Background() + + server, teardown := setupMockSpannerServer(t) + defer teardown() + dsn := fmt.Sprintf("%s/projects/p/instances/i/databases/d?useplaintext=true", server.Address) + + client, cleanup := startTestSpannerLibServer(t) + defer cleanup() + + pool, err := client.CreatePool(ctx, &pb.CreatePoolRequest{ConnectionString: dsn}) + if err != nil { + t.Fatalf("failed to create pool: %v", err) + } + connection, err := client.CreateConnection(ctx, &pb.CreateConnectionRequest{Pool: pool}) + if err != nil { + t.Fatalf("failed to create connection: %v", err) + } + if _, err := client.BeginTransaction(ctx, &pb.BeginTransactionRequest{ + Connection: connection, + TransactionOptions: &sppb.TransactionOptions{}, + }); err != nil { + t.Fatalf("failed to begin transaction: %v", err) + } + rows, err := client.Execute(ctx, &pb.ExecuteRequest{ + Connection: connection, + ExecuteSqlRequest: &sppb.ExecuteSqlRequest{Sql: testutil.UpdateBarSetFoo}, + }) + if err != nil { + t.Fatalf("failed to execute: %v", err) + } + if _, err := client.CloseRows(ctx, rows); err != nil { + t.Fatalf("failed to close rows: %v", err) + } + if _, err := client.Rollback(ctx, connection); err != nil { + t.Fatalf("failed to rollback: %v", err) + } + + if _, err := client.ClosePool(ctx, pool); err != nil { + t.Fatalf("failed to close pool: %v", err) + } +} + +func TestWriteMutations(t *testing.T) { + t.Parallel() + ctx := context.Background() + + server, teardown := setupMockSpannerServer(t) + defer teardown() + dsn := fmt.Sprintf("%s/projects/p/instances/i/databases/d?useplaintext=true", server.Address) + + client, cleanup := startTestSpannerLibServer(t) + defer cleanup() + + pool, err := client.CreatePool(ctx, &pb.CreatePoolRequest{ConnectionString: dsn}) + if err != nil { + t.Fatalf("failed to create pool: %v", err) + } + connection, err := client.CreateConnection(ctx, &pb.CreateConnectionRequest{Pool: pool}) + if err != nil { + t.Fatalf("failed to create connection: %v", err) + } + resp, err := client.WriteMutations(ctx, &pb.WriteMutationsRequest{ + Connection: connection, + Mutations: &sppb.BatchWriteRequest_MutationGroup{ + Mutations: []*sppb.Mutation{ + {Operation: &sppb.Mutation_Update{ + Update: &sppb.Mutation_Write{ + Table: "my_table", + Columns: []string{"id", "value"}, + Values: []*structpb.ListValue{ + {Values: []*structpb.Value{ + {Kind: &structpb.Value_StringValue{StringValue: "1"}}, + {Kind: &structpb.Value_StringValue{StringValue: "One"}}, + }}, + {Values: []*structpb.Value{ + {Kind: &structpb.Value_StringValue{StringValue: "2"}}, + {Kind: &structpb.Value_StringValue{StringValue: "Two"}}, + }}, + }, + }, + }}, + }, + }, + }) + if err != nil { + t.Fatalf("failed to write mutations: %v", err) + } + if resp == nil { + t.Fatalf("response should not be nil") + } + if resp.CommitTimestamp == nil { + t.Fatalf("commit timestamp should not be nil") + } + + if _, err := client.ClosePool(ctx, pool); err != nil { + t.Fatalf("failed to close pool: %v", err) + } +} + +func startTestSpannerLibServer(t *testing.T) (client pb.SpannerLibClient, cleanup func()) { + var tp string + var name string + var protocol string + if runtime.GOOS == "windows" { + tp = "tcp" + name = "localhost:0" + protocol = "" + } else { + tp = "unix" + protocol = "unix://" + name = filepath.Join(os.TempDir(), fmt.Sprintf("spannerlib-%s", uuid.NewString())) + } + lis, err := net.Listen(tp, name) + if err != nil { + t.Fatalf("failed to listen: %v\n", err) + } + addr := lis.Addr().String() + var opts []grpc.ServerOption + grpcServer := grpc.NewServer(opts...) + + server := spannerLibServer{} + pb.RegisterSpannerLibServer(grpcServer, &server) + go func() { _ = grpcServer.Serve(lis) }() + + conn, err := grpc.NewClient( + fmt.Sprintf("%s%s", protocol, addr), + grpc.WithTransportCredentials(insecure.NewCredentials())) + if err != nil { + t.Fatalf("failed to create client connection: %v", err) + } + client = pb.NewSpannerLibClient(conn) + + cleanup = func() { + _ = conn.Close() + grpcServer.GracefulStop() + _ = os.Remove(name) + } + + return +} + +func setupMockSpannerServer(t *testing.T) (server *testutil.MockedSpannerInMemTestServer, teardown func()) { + return setupMockSpannerServerWithDialect(t, databasepb.DatabaseDialect_GOOGLE_STANDARD_SQL) +} + +func setupMockSpannerServerWithDialect(t *testing.T, dialect databasepb.DatabaseDialect) (server *testutil.MockedSpannerInMemTestServer, teardown func()) { + server, _, serverTeardown := testutil.NewMockedSpannerInMemTestServer(t) + server.SetupSelectDialectResult(dialect) + return server, serverTeardown +} diff --git a/spannerlib/lib/connection_test.go b/spannerlib/lib/connection_test.go index 193e3fd9..c9ccac88 100644 --- a/spannerlib/lib/connection_test.go +++ b/spannerlib/lib/connection_test.go @@ -196,12 +196,8 @@ func TestBeginAndCommit(t *testing.T) { if g, w := commitMsg.Code, int32(0); g != w { t.Fatalf("Commit result mismatch\n Got: %v\nWant: %v", g, w) } - if commitMsg.Length() == 0 { - t.Fatal("Commit return zero length") - } - resp := &spannerpb.CommitResponse{} - if err := proto.Unmarshal(commitMsg.Res, resp); err != nil { - t.Fatalf("Failed to unmarshal commit response: %v", err) + if commitMsg.Length() != 0 { + t.Fatal("Commit returned non-zero length") } closeMsg := CloseConnection(ctx, poolMsg.ObjectId, connMsg.ObjectId) diff --git a/spannerlib/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/spannerlib-dotnet-grpc-impl/GrpcLibSpanner.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/GrpcLibSpanner.cs new file mode 100644 index 00000000..3b65f917 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/GrpcLibSpanner.cs @@ -0,0 +1,403 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using System; +using System.Net.Http; +using System.Net.Sockets; +using System.Threading; +using System.Threading.Tasks; +using Google.Cloud.Spanner.V1; +using Google.Cloud.SpannerLib.V1; +using Google.Protobuf.WellKnownTypes; +using Grpc.Core; +using Grpc.Net.Client; +using BeginTransactionRequest = Google.Cloud.SpannerLib.V1.BeginTransactionRequest; +using Status = Google.Rpc.Status; + +namespace Google.Cloud.SpannerLib.Grpc; + +public class GrpcLibSpanner : ISpannerLib +{ + public static GrpcChannel ForUnixSocket(string fileName) + { + var endpoint = new UnixDomainSocketEndPoint(fileName); + return GrpcChannel.ForAddress("http://localhost", new GrpcChannelOptions { + HttpHandler = new SocketsHttpHandler { + EnableMultipleHttp2Connections = true, + ConnectCallback = async (_, cancellationToken) => { + var socket = new Socket(AddressFamily.Unix, SocketType.Stream, ProtocolType.Unspecified); + try { + await socket.ConnectAsync(endpoint, cancellationToken).ConfigureAwait(false); + return new NetworkStream(socket, true); + } catch { + socket.Dispose(); + throw; + } + } + } + }); + } + + public static GrpcChannel ForTcpSocket(string address) + { + return GrpcChannel.ForAddress($"http://{address}", new GrpcChannelOptions + { + HttpHandler = new SocketsHttpHandler + { + EnableMultipleHttp2Connections = true, + } + }); + } + + private readonly Server _server; + private readonly V1.SpannerLib.SpannerLibClient _client; + private readonly GrpcChannel _channel; + private readonly V1.SpannerLib.SpannerLibClient[] _clients; + private readonly GrpcChannel[] _channels; + private readonly bool _useStreamingRows; + private bool _disposed; + + public GrpcLibSpanner(bool useStreamingRows = true, Server.AddressType addressType = Server.AddressType.UnixDomainSocket) + { + _server = new Server(); + var file = _server.Start(addressType: addressType); + _channel = addressType == Server.AddressType.Tcp ? ForTcpSocket(file) : ForUnixSocket(file); + _client = new V1.SpannerLib.SpannerLibClient(_channel); + _useStreamingRows = useStreamingRows; + + var numChannels = 1; + _channels = new GrpcChannel[numChannels]; + _clients = new V1.SpannerLib.SpannerLibClient[numChannels]; + for (var i = 0; i < numChannels; i++) + { + _channels[i] = addressType == Server.AddressType.Tcp ? ForTcpSocket(file) : ForUnixSocket(file); + _clients[i] = new V1.SpannerLib.SpannerLibClient(_channels[i]); + } + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (_disposed) + { + return; + } + try + { + _channel.Dispose(); + foreach (var channel in _channels) + { + channel.Dispose(); + } + _server.Dispose(); + } + finally + { + _disposed = true; + } + } + + T TranslateException(Func f) + { + try + { + return f.Invoke(); + } + catch (RpcException exception) + { + throw SpannerException.ToSpannerException(exception); + } + } + + public Pool CreatePool(string connectionString) + { + return FromProto(TranslateException(() => _client.CreatePool(new CreatePoolRequest + { + ConnectionString = connectionString, + }))); + } + + public void ClosePool(Pool pool) + { + TranslateException(() => _client.ClosePool(ToProto(pool))); + } + + public Connection CreateConnection(Pool pool) + { + return FromProto(pool, TranslateException(() => _client.CreateConnection(new CreateConnectionRequest + { + Pool = ToProto(pool), + }))); + } + + public void CloseConnection(Connection connection) + { + TranslateException(() => _client.CloseConnection(ToProto(connection))); + } + + public async Task CloseConnectionAsync(Connection connection, CancellationToken cancellationToken = default) + { + try + { + await _client.CloseConnectionAsync(ToProto(connection), cancellationToken: cancellationToken); + } + catch (RpcException exception) + { + throw SpannerException.ToSpannerException(exception); + } + } + + public CommitResponse? WriteMutations(Connection connection, BatchWriteRequest.Types.MutationGroup mutations) + { + var response = TranslateException(() => _client.WriteMutations(new WriteMutationsRequest + { + Connection = ToProto(connection), + Mutations = mutations, + })); + return response.CommitTimestamp == null ? null : response; + } + + public Rows Execute(Connection connection, ExecuteSqlRequest statement) + { + if (_useStreamingRows) + { + return ExecuteStreaming(connection, statement); + } + return FromProto(connection, TranslateException(() => _client.Execute(new ExecuteRequest + { + Connection = ToProto(connection), + ExecuteSqlRequest = statement, + }))); + } + + private StreamingRows ExecuteStreaming(Connection connection, ExecuteSqlRequest statement) + { + var client = _clients[Random.Shared.Next(_clients.Length)]; + var stream = TranslateException(() => client.ExecuteStreaming(new ExecuteRequest + { + Connection = ToProto(connection), + ExecuteSqlRequest = statement, + })); + return StreamingRows.Create(connection, stream); + } + + public async Task ExecuteAsync(Connection connection, ExecuteSqlRequest statement, CancellationToken cancellationToken = default) + { + try + { + if (_useStreamingRows) + { + return await ExecuteStreamingAsync(connection, statement, cancellationToken); + } + var rows = await _client.ExecuteAsync(new ExecuteRequest + { + Connection = ToProto(connection), + ExecuteSqlRequest = statement, + }, cancellationToken: cancellationToken); + return FromProto(connection, rows); + } + catch (RpcException exception) + { + throw SpannerException.ToSpannerException(exception); + } + } + + private async Task ExecuteStreamingAsync(Connection connection, ExecuteSqlRequest statement, CancellationToken cancellationToken = default) + { + var client = _clients[Random.Shared.Next(_clients.Length)]; + var stream = TranslateException(() => client.ExecuteStreaming(new ExecuteRequest + { + Connection = ToProto(connection), + ExecuteSqlRequest = statement, + })); + return await StreamingRows.CreateAsync(connection, stream, cancellationToken); + } + + public long[] ExecuteBatch(Connection connection, ExecuteBatchDmlRequest statements) + { + var response = TranslateException(() => _client.ExecuteBatch(new ExecuteBatchRequest + { + Connection = ToProto(connection), + ExecuteBatchDmlRequest = statements, + })); + var result = new long[response.ResultSets.Count]; + for (var i = 0; i < result.Length; i++) + { + if (response.ResultSets[i].Stats.HasRowCountExact) + { + result[i] = response.ResultSets[i].Stats.RowCountExact; + } + else if (response.ResultSets[i].Stats.HasRowCountLowerBound) + { + result[i] = response.ResultSets[i].Stats.RowCountLowerBound; + } + else + { + result[i] = -1; + } + } + return result; + } + + public async Task ExecuteBatchAsync(Connection connection, ExecuteBatchDmlRequest statements, CancellationToken cancellationToken = default) + { + try + { + var stats = await _client.ExecuteBatchAsync(new ExecuteBatchRequest + { + Connection = ToProto(connection), + ExecuteBatchDmlRequest = statements, + }, cancellationToken: cancellationToken); + var result = new long[stats.ResultSets.Count]; + for (var i = 0; i < result.Length; i++) + { + result[i] = stats.ResultSets[i].Stats.RowCountExact; + } + return result; + } + catch (RpcException exception) + { + throw SpannerException.ToSpannerException(exception); + } + } + + public ResultSetMetadata? Metadata(Rows rows) + { + return TranslateException(() => _client.Metadata(ToProto(rows))); + } + + public async Task MetadataAsync(Rows rows, CancellationToken cancellationToken = default) + { + try + { + return await _client.MetadataAsync(ToProto(rows), cancellationToken: cancellationToken); + } + catch (RpcException exception) + { + throw SpannerException.ToSpannerException(exception); + } + } + + public ResultSetStats? Stats(Rows rows) + { + return TranslateException(() => _client.ResultSetStats(ToProto(rows))); + } + + public ListValue? Next(Rows rows, int numRows, ISpannerLib.RowEncoding encoding) + { + var row = TranslateException(() =>_client.Next(new NextRequest + { + Rows = ToProto(rows), + NumRows = numRows, + Encoding = (long) encoding, + })); + return row.Values.Count == 0 ? null : row; + } + + public async Task NextAsync(Rows rows, int numRows, ISpannerLib.RowEncoding encoding, CancellationToken cancellationToken = default) + { + try + { + return await _client.NextAsync(new NextRequest + { + Rows = ToProto(rows), + NumRows = numRows, + Encoding = (long)encoding, + }, cancellationToken: cancellationToken); + } + catch (RpcException exception) + { + throw SpannerException.ToSpannerException(exception); + } + } + + public void CloseRows(Rows rows) + { + TranslateException(() => _client.CloseRows(ToProto(rows))); + } + + public async Task CloseRowsAsync(Rows rows, CancellationToken cancellationToken = default) + { + try + { + await _client.CloseRowsAsync(ToProto(rows), cancellationToken: cancellationToken); + } + catch (RpcException exception) + { + throw SpannerException.ToSpannerException(exception); + } + } + + public void BeginTransaction(Connection connection, TransactionOptions transactionOptions) + { + TranslateException(() => _client.BeginTransaction(new BeginTransactionRequest + { + Connection = ToProto(connection), + TransactionOptions = transactionOptions, + })); + } + + public CommitResponse? Commit(Connection connection) + { + var response = TranslateException(() => _client.Commit(ToProto(connection))); + return response.CommitTimestamp == null ? null : response; + } + + public async Task CommitAsync(Connection connection, CancellationToken cancellationToken = default) + { + try + { + var response = await _client.CommitAsync(ToProto(connection), cancellationToken: cancellationToken); + return response.CommitTimestamp == null ? null : response; + } + catch (RpcException exception) + { + throw new SpannerException(new Status { Code = (int) exception.Status.StatusCode, Message = exception.Status.Detail }); + } + } + + public void Rollback(Connection connection) + { + TranslateException(() => _client.Rollback(ToProto(connection))); + } + + public async Task RollbackAsync(Connection connection, CancellationToken cancellationToken = default) + { + try + { + await _client.RollbackAsync(ToProto(connection), cancellationToken: cancellationToken); + } + catch (RpcException exception) + { + throw SpannerException.ToSpannerException(exception); + } + } + + Pool FromProto(V1.Pool pool) => new(this, pool.Id); + + V1.Pool ToProto(Pool pool) => new() { Id = pool.Id }; + + Connection FromProto(Pool pool, V1.Connection proto) => new(pool, proto.Id); + + V1.Connection ToProto(Connection connection) => new() { Id = connection.Id, Pool = ToProto(connection.Pool), }; + + Rows FromProto(Connection connection, V1.Rows proto) => new(connection, proto.Id); + + V1.Rows ToProto(Rows rows) => new() { Id = rows.Id, Connection = ToProto(rows.SpannerConnection), }; +} \ No newline at end of file diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/StreamingRows.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/StreamingRows.cs new file mode 100644 index 00000000..1d0c21bf --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/StreamingRows.cs @@ -0,0 +1,131 @@ +using System.Threading; +using System.Threading.Tasks; +using Google.Api.Gax; +using Google.Cloud.Spanner.V1; +using Google.Cloud.SpannerLib.V1; +using Google.Protobuf.WellKnownTypes; +using Grpc.Core; +using Status = Google.Rpc.Status; + +namespace Google.Cloud.SpannerLib.Grpc; + +public class StreamingRows : Rows +{ + private readonly AsyncServerStreamingCall _stream; + private ListValue? _pendingRow; + private ResultSetMetadata? _metadata; + private ResultSetStats? _stats; + private bool _done; + + protected override ResultSetStats? Stats => _stats; + + public override ResultSetMetadata? Metadata => _metadata; + + public static StreamingRows Create(Connection connection, AsyncServerStreamingCall stream) + { + var rows = new StreamingRows(connection, stream); + rows._pendingRow = rows.Next(); + return rows; + } + + public static async Task CreateAsync(Connection connection, AsyncServerStreamingCall stream, CancellationToken cancellationToken = default) + { + var rows = new StreamingRows(connection, stream); + rows._pendingRow = await rows.NextAsync(cancellationToken); + return rows; + } + + private StreamingRows(Connection connection, AsyncServerStreamingCall stream) : base(connection, 0, initMetadata: false) + { + _stream = stream; + } + + protected override void Dispose(bool disposing) + { + if (!_done) + { + MarkDone(); + } + _stream.Dispose(); + base.Dispose(disposing); + } + + private void MarkDone() + { + _done = true; + } + + public override ListValue? Next() + { + if (_pendingRow != null) { + var row = _pendingRow; + _pendingRow = null; + return row; + } + try + { + var hasNext = Task.Run(() => _stream.ResponseStream.MoveNext()).ResultWithUnwrappedExceptions(); + if (!hasNext) + { + MarkDone(); + return null; + } + var rowData = _stream.ResponseStream.Current; + if (rowData.Metadata != null) + { + _metadata = rowData.Metadata; + } + if (rowData.Stats != null) + { + _stats = rowData.Stats; + } + if (rowData.Data.Count == 0) + { + MarkDone(); + return null; + } + return rowData.Data[0]; + } + catch (RpcException exception) + { + throw new SpannerException(new Status { Code = (int) exception.Status.StatusCode, Message = exception.Status.Detail }); + } + } + + public override async Task NextAsync(CancellationToken cancellationToken = default) + { + if (_pendingRow != null) { + var row = _pendingRow; + _pendingRow = null; + return row; + } + try + { + var hasNext = await _stream.ResponseStream.MoveNext(cancellationToken); + if (!hasNext) + { + MarkDone(); + return null; + } + var rowData = _stream.ResponseStream.Current; + if (rowData.Metadata != null) + { + _metadata = rowData.Metadata; + } + if (rowData.Stats != null) + { + _stats = rowData.Stats; + } + if (rowData.Data.Count == 0) + { + MarkDone(); + return null; + } + return rowData.Data[0]; + } + catch (RpcException exception) + { + throw SpannerException.ToSpannerException(exception); + } + } +} \ No newline at end of file diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/spannerlib-dotnet-grpc-impl.csproj b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/spannerlib-dotnet-grpc-impl.csproj new file mode 100644 index 00000000..d892dd9b --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-impl/spannerlib-dotnet-grpc-impl.csproj @@ -0,0 +1,19 @@ + + + + net8.0 + Google.Cloud.SpannerLib.Grpc + enable + default + + + + + + + + + + + + diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/Server.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/Server.cs new file mode 100644 index 00000000..1235d086 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/Server.cs @@ -0,0 +1,196 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using System; +using System.Diagnostics; +using System.IO; +using System.Runtime.InteropServices; +using System.Threading; + +namespace Google.Cloud.SpannerLib.Grpc; + +public class Server : IDisposable +{ + public enum AddressType + { + UnixDomainSocket, + Tcp, + } + + private Process? _process; + private string? _host; + private bool _disposed; + + public bool IsRunning => _process is { HasExited: false }; + + public Server() + { + } + + public string Start(AddressType addressType = AddressType.UnixDomainSocket) + { + if (_disposed) + { + throw new ObjectDisposedException(nameof(Server)); + } + if (IsRunning) + { + throw new InvalidOperationException("The server is already started."); + } + (_host, _process) = StartGrpcServer(addressType, TimeSpan.FromSeconds(5)); + return _host; + } + + private static Tuple StartGrpcServer(AddressType addressType, TimeSpan timeout) + { + string arguments; + if (addressType == AddressType.UnixDomainSocket) + { + // Generate a random temp file name that will be used for the Unix domain socket communication. + arguments = Path.GetTempPath() + Guid.NewGuid(); + } + else if (addressType == AddressType.Tcp) + { + arguments = "localhost:0 tcp"; + } + else + { + arguments = "localhost:0 tcp"; + } + + var binaryFileName = GetBinaryFileName().Replace('/', Path.DirectorySeparatorChar); + var info = new ProcessStartInfo + { + Arguments = arguments, + UseShellExecute = false, + FileName = binaryFileName, + RedirectStandardOutput = true, + RedirectStandardError = true, + }; + // Start the process as a child process. The process will automatically stop when the + // parent process stops. + var process = Process.Start(info); + if (process == null) + { + throw new InvalidOperationException("Failed to start spanner"); + } + if (addressType == AddressType.UnixDomainSocket) + { + var watch = new Stopwatch(); + while (!File.Exists(arguments)) + { + if (watch.Elapsed > timeout) + { + throw new TimeoutException($"Attempt to start gRPC server timed out after {timeout}"); + } + Thread.Sleep(1); + } + } + if (addressType == AddressType.UnixDomainSocket) + { + // Return the name of the Unix domain socket. + return Tuple.Create(arguments, process); + } + // Read the dynamically assigned port. + var address = process.StandardError.ReadLine(); + if (address?.Contains("Starting gRPC server on") ?? false) + { + var lastSpace = address.LastIndexOf(" ", StringComparison.Ordinal); + return Tuple.Create(address.Substring(lastSpace + 1), process); + } + throw new InvalidOperationException("Failed to read gRPC address"); + } + + private static string GetBinaryFileName() + { + string? fileName = null; + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + switch (RuntimeInformation.OSArchitecture) + { + case Architecture.X64: + fileName = "runtimes/win-x64/native/grpc_server.exe"; + break; + } + } + else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + { + switch (RuntimeInformation.OSArchitecture) + { + case Architecture.X64: + fileName = "runtimes/linux-x64/native/grpc_server"; + break; + } + } + else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + { + switch (RuntimeInformation.ProcessArchitecture) + { + case Architecture.Arm64: + fileName = "runtimes/osx-arm64/native/grpc_server"; + break; + } + } + if (fileName != null && File.Exists(fileName)) + { + return fileName; + } + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + if (File.Exists("runtimes/any/native/grpc_server.exe")) + { + return "runtimes/any/native/grpc_server.exe"; + } + } + if (File.Exists("runtimes/any/native/grpc_server")) + { + return "runtimes/any/native/grpc_server"; + } + + throw new PlatformNotSupportedException(); + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + public void Stop() + { + if (_process == null || _process.HasExited) + { + return; + } + _process.Kill(); + _process.WaitForExit(); + } + + protected virtual void Dispose(bool disposing) + { + if (_disposed) + { + return; + } + try + { + Stop(); + _process?.Dispose(); + } + finally + { + _disposed = true; + } + } +} \ No newline at end of file diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/build.sh b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/build.sh new file mode 100755 index 00000000..308e2328 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/build.sh @@ -0,0 +1,16 @@ +# Builds the gRPC server and the binary .NET wrapper and install the latter in a local nuget repository. + +# Determine OS + Arch +export DEST=binaries/any/grpc_server +mkdir -p binaries/any +mkdir -p binaries/osx-arm64 + +# Clear all local nuget cache +dotnet nuget locals --clear all +go build -o ../../../grpc-server/grpc_server ../../../grpc-server/server.go +cp ../../../grpc-server/grpc_server $DEST +cp ../../../grpc-server/grpc_server binaries/osx-arm64/grpc_server +dotnet pack +dotnet nuget remove source local_grpc_server 2>/dev/null +dotnet nuget add source "$PWD"/bin/Release --name local_grpc_server +dotnet restore ../spannerlib-dotnet-grpc-impl diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/spannerlib-dotnet-grpc-server.csproj b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/spannerlib-dotnet-grpc-server.csproj new file mode 100644 index 00000000..644c78f9 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/spannerlib-dotnet-grpc-server.csproj @@ -0,0 +1,19 @@ + + + + netstandard2.1 + Google.Cloud.SpannerLib.Grpc + enable + default + Google.Cloud.SpannerLib.GrpcServer + SpannerLib Grpc Server + Google + + + + + + + + + diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-tests/ServerTests.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-tests/ServerTests.cs new file mode 100644 index 00000000..ff243f47 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-tests/ServerTests.cs @@ -0,0 +1,50 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using Google.Cloud.SpannerLib.V1; + +namespace Google.Cloud.SpannerLib.Grpc; + +public class Tests +{ + private Server _server; + + [SetUp] + public void Setup() + { + _server = new Server(); + } + + [TearDown] + public void TearDown() + { + _server.Dispose(); + } + + [Test] + public void TestStartStop() + { + Assert.That(_server.IsRunning, Is.False); + var file = _server.Start(); + Assert.That(_server.IsRunning, Is.True); + + using var channel = GrpcLibSpanner.ForUnixSocket(file); + var client = new V1.SpannerLib.SpannerLibClient(channel); + var info = client.Info(new InfoRequest()); + Assert.That(info, Is.Not.Null); + + _server.Stop(); + Assert.That(_server.IsRunning, Is.False); + } +} \ No newline at end of file diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-tests/spannerlib-dotnet-grpc-tests.csproj b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-tests/spannerlib-dotnet-grpc-tests.csproj new file mode 100644 index 00000000..eaca43e4 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-tests/spannerlib-dotnet-grpc-tests.csproj @@ -0,0 +1,28 @@ + + + + net9.0 + Google.Cloud.SpannerLib.Grpc + latest + enable + enable + false + + + + + + + + + + + + + + + + + + + diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-v1/Spannerlib.g.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-v1/Spannerlib.g.cs new file mode 100644 index 00000000..14132a1d --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-v1/Spannerlib.g.cs @@ -0,0 +1,4102 @@ +// +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: google/spannerlib/v1/spannerlib.proto +// +#pragma warning disable 1591, 0612, 3021, 8981 +#region Designer generated code + +using pb = global::Google.Protobuf; +using pbc = global::Google.Protobuf.Collections; +using pbr = global::Google.Protobuf.Reflection; +using scg = global::System.Collections.Generic; +namespace Google.Cloud.SpannerLib.V1 { + + /// Holder for reflection information generated from google/spannerlib/v1/spannerlib.proto + public static partial class SpannerlibReflection { + + #region Descriptor + /// File descriptor for google/spannerlib/v1/spannerlib.proto + public static pbr::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbr::FileDescriptor descriptor; + + static SpannerlibReflection() { + byte[] descriptorData = global::System.Convert.FromBase64String( + string.Concat( + "CiVnb29nbGUvc3Bhbm5lcmxpYi92MS9zcGFubmVybGliLnByb3RvEhRnb29n", + "bGUuc3Bhbm5lcmxpYi52MRofZ29vZ2xlL2FwaS9maWVsZF9iZWhhdmlvci5w", + "cm90bxobZ29vZ2xlL3Byb3RvYnVmL2VtcHR5LnByb3RvGhxnb29nbGUvcHJv", + "dG9idWYvc3RydWN0LnByb3RvGiJnb29nbGUvc3Bhbm5lci92MS9yZXN1bHRf", + "c2V0LnByb3RvGh9nb29nbGUvc3Bhbm5lci92MS9zcGFubmVyLnByb3RvGiNn", + "b29nbGUvc3Bhbm5lci92MS90cmFuc2FjdGlvbi5wcm90byINCgtJbmZvUmVx", + "dWVzdCIfCgxJbmZvUmVzcG9uc2USDwoHdmVyc2lvbhgBIAEoCSIzChFDcmVh", + "dGVQb29sUmVxdWVzdBIeChFjb25uZWN0aW9uX3N0cmluZxgBIAEoCUID4EEC", + "IkgKF0NyZWF0ZUNvbm5lY3Rpb25SZXF1ZXN0Ei0KBHBvb2wYASABKAsyGi5n", + "b29nbGUuc3Bhbm5lcmxpYi52MS5Qb29sQgPgQQIikwEKDkV4ZWN1dGVSZXF1", + "ZXN0EjkKCmNvbm5lY3Rpb24YASABKAsyIC5nb29nbGUuc3Bhbm5lcmxpYi52", + "MS5Db25uZWN0aW9uQgPgQQISRgoTZXhlY3V0ZV9zcWxfcmVxdWVzdBgCIAEo", + "CzIkLmdvb2dsZS5zcGFubmVyLnYxLkV4ZWN1dGVTcWxSZXF1ZXN0QgPgQQIi", + "owEKE0V4ZWN1dGVCYXRjaFJlcXVlc3QSOQoKY29ubmVjdGlvbhgBIAEoCzIg", + "Lmdvb2dsZS5zcGFubmVybGliLnYxLkNvbm5lY3Rpb25CA+BBAhJRChlleGVj", + "dXRlX2JhdGNoX2RtbF9yZXF1ZXN0GAIgASgLMikuZ29vZ2xlLnNwYW5uZXIu", + "djEuRXhlY3V0ZUJhdGNoRG1sUmVxdWVzdEID4EECIp0BChdCZWdpblRyYW5z", + "YWN0aW9uUmVxdWVzdBI5Cgpjb25uZWN0aW9uGAEgASgLMiAuZ29vZ2xlLnNw", + "YW5uZXJsaWIudjEuQ29ubmVjdGlvbkID4EECEkcKE3RyYW5zYWN0aW9uX29w", + "dGlvbnMYAiABKAsyJS5nb29nbGUuc3Bhbm5lci52MS5UcmFuc2FjdGlvbk9w", + "dGlvbnNCA+BBAiKeAQoVV3JpdGVNdXRhdGlvbnNSZXF1ZXN0EjkKCmNvbm5l", + "Y3Rpb24YASABKAsyIC5nb29nbGUuc3Bhbm5lcmxpYi52MS5Db25uZWN0aW9u", + "QgPgQQISSgoJbXV0YXRpb25zGAIgASgLMjIuZ29vZ2xlLnNwYW5uZXIudjEu", + "QmF0Y2hXcml0ZVJlcXVlc3QuTXV0YXRpb25Hcm91cEID4EECIhcKBFBvb2wS", + "DwoCaWQYASABKANCA+BBAiJMCgpDb25uZWN0aW9uEi0KBHBvb2wYASABKAsy", + "Gi5nb29nbGUuc3Bhbm5lcmxpYi52MS5Qb29sQgPgQQISDwoCaWQYAiABKANC", + "A+BBAiJSCgRSb3dzEjkKCmNvbm5lY3Rpb24YASABKAsyIC5nb29nbGUuc3Bh", + "bm5lcmxpYi52MS5Db25uZWN0aW9uQgPgQQISDwoCaWQYAiABKANCA+BBAiJq", + "CgtOZXh0UmVxdWVzdBItCgRyb3dzGAEgASgLMhouZ29vZ2xlLnNwYW5uZXJs", + "aWIudjEuUm93c0ID4EECEhUKCG51bV9yb3dzGAIgASgDQgPgQQISFQoIZW5j", + "b2RpbmcYAyABKANCA+BBAiLRAQoHUm93RGF0YRItCgRyb3dzGAEgASgLMhou", + "Z29vZ2xlLnNwYW5uZXJsaWIudjEuUm93c0ID4EECEjYKCG1ldGFkYXRhGAIg", + "ASgLMiQuZ29vZ2xlLnNwYW5uZXIudjEuUmVzdWx0U2V0TWV0YWRhdGESLQoE", + "ZGF0YRgDIAMoCzIaLmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWVCA+BBAhIw", + "CgVzdGF0cxgEIAEoCzIhLmdvb2dsZS5zcGFubmVyLnYxLlJlc3VsdFNldFN0", + "YXRzIkAKD01ldGFkYXRhUmVxdWVzdBItCgRyb3dzGAEgASgLMhouZ29vZ2xl", + "LnNwYW5uZXJsaWIudjEuUm93c0ID4EECIkYKFVJlc3VsdFNldFN0YXRzUmVx", + "dWVzdBItCgRyb3dzGAEgASgLMhouZ29vZ2xlLnNwYW5uZXJsaWIudjEuUm93", + "c0ID4EECImUKF0Nvbm5lY3Rpb25TdHJlYW1SZXF1ZXN0Ej8KD2V4ZWN1dGVf", + "cmVxdWVzdBgBIAEoCzIkLmdvb2dsZS5zcGFubmVybGliLnYxLkV4ZWN1dGVS", + "ZXF1ZXN0SABCCQoHcmVxdWVzdCJaChhDb25uZWN0aW9uU3RyZWFtUmVzcG9u", + "c2USMgoDcm93GAEgASgLMiMuZ29vZ2xlLnNwYW5uZXIudjEuUGFydGlhbFJl", + "c3VsdFNldEgAQgoKCHJlc3BvbnNlMsILCgpTcGFubmVyTGliEk8KBEluZm8S", + "IS5nb29nbGUuc3Bhbm5lcmxpYi52MS5JbmZvUmVxdWVzdBoiLmdvb2dsZS5z", + "cGFubmVybGliLnYxLkluZm9SZXNwb25zZSIAElMKCkNyZWF0ZVBvb2wSJy5n", + "b29nbGUuc3Bhbm5lcmxpYi52MS5DcmVhdGVQb29sUmVxdWVzdBoaLmdvb2ds", + "ZS5zcGFubmVybGliLnYxLlBvb2wiABJBCglDbG9zZVBvb2wSGi5nb29nbGUu", + "c3Bhbm5lcmxpYi52MS5Qb29sGhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IgAS", + "ZQoQQ3JlYXRlQ29ubmVjdGlvbhItLmdvb2dsZS5zcGFubmVybGliLnYxLkNy", + "ZWF0ZUNvbm5lY3Rpb25SZXF1ZXN0GiAuZ29vZ2xlLnNwYW5uZXJsaWIudjEu", + "Q29ubmVjdGlvbiIAEk0KD0Nsb3NlQ29ubmVjdGlvbhIgLmdvb2dsZS5zcGFu", + "bmVybGliLnYxLkNvbm5lY3Rpb24aFi5nb29nbGUucHJvdG9idWYuRW1wdHki", + "ABJNCgdFeGVjdXRlEiQuZ29vZ2xlLnNwYW5uZXJsaWIudjEuRXhlY3V0ZVJl", + "cXVlc3QaGi5nb29nbGUuc3Bhbm5lcmxpYi52MS5Sb3dzIgASWwoQRXhlY3V0", + "ZVN0cmVhbWluZxIkLmdvb2dsZS5zcGFubmVybGliLnYxLkV4ZWN1dGVSZXF1", + "ZXN0Gh0uZ29vZ2xlLnNwYW5uZXJsaWIudjEuUm93RGF0YSIAMAESZwoMRXhl", + "Y3V0ZUJhdGNoEikuZ29vZ2xlLnNwYW5uZXJsaWIudjEuRXhlY3V0ZUJhdGNo", + "UmVxdWVzdBoqLmdvb2dsZS5zcGFubmVyLnYxLkV4ZWN1dGVCYXRjaERtbFJl", + "c3BvbnNlIgASTgoITWV0YWRhdGESGi5nb29nbGUuc3Bhbm5lcmxpYi52MS5S", + "b3dzGiQuZ29vZ2xlLnNwYW5uZXIudjEuUmVzdWx0U2V0TWV0YWRhdGEiABJH", + "CgROZXh0EiEuZ29vZ2xlLnNwYW5uZXJsaWIudjEuTmV4dFJlcXVlc3QaGi5n", + "b29nbGUucHJvdG9idWYuTGlzdFZhbHVlIgASUQoOUmVzdWx0U2V0U3RhdHMS", + "Gi5nb29nbGUuc3Bhbm5lcmxpYi52MS5Sb3dzGiEuZ29vZ2xlLnNwYW5uZXIu", + "djEuUmVzdWx0U2V0U3RhdHMiABJBCglDbG9zZVJvd3MSGi5nb29nbGUuc3Bh", + "bm5lcmxpYi52MS5Sb3dzGhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IgASWwoQ", + "QmVnaW5UcmFuc2FjdGlvbhItLmdvb2dsZS5zcGFubmVybGliLnYxLkJlZ2lu", + "VHJhbnNhY3Rpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IgAS", + "TwoGQ29tbWl0EiAuZ29vZ2xlLnNwYW5uZXJsaWIudjEuQ29ubmVjdGlvbhoh", + "Lmdvb2dsZS5zcGFubmVyLnYxLkNvbW1pdFJlc3BvbnNlIgASRgoIUm9sbGJh", + "Y2sSIC5nb29nbGUuc3Bhbm5lcmxpYi52MS5Db25uZWN0aW9uGhYuZ29vZ2xl", + "LnByb3RvYnVmLkVtcHR5IgASYgoOV3JpdGVNdXRhdGlvbnMSKy5nb29nbGUu", + "c3Bhbm5lcmxpYi52MS5Xcml0ZU11dGF0aW9uc1JlcXVlc3QaIS5nb29nbGUu", + "c3Bhbm5lci52MS5Db21taXRSZXNwb25zZSIAEncKEENvbm5lY3Rpb25TdHJl", + "YW0SLS5nb29nbGUuc3Bhbm5lcmxpYi52MS5Db25uZWN0aW9uU3RyZWFtUmVx", + "dWVzdBouLmdvb2dsZS5zcGFubmVybGliLnYxLkNvbm5lY3Rpb25TdHJlYW1S", + "ZXNwb25zZSIAKAEwAULNAQoeY29tLmdvb2dsZS5jbG91ZC5zcGFubmVybGli", + "LnYxQg9TcGFubmVyTGliUHJvdG9QAVo+Y2xvdWQuZ29vZ2xlLmNvbS9nby9z", + "cGFubmVybGliL2FwaXYxL3NwYW5uZXJsaWJwYjtzcGFubmVybGlicGKqAhpH", + "b29nbGUuQ2xvdWQuU3Bhbm5lckxpYi5WMcoCGkdvb2dsZVxDbG91ZFxTcGFu", + "bmVyTGliXFYx6gIdR29vZ2xlOjpDbG91ZDo6U3Bhbm5lckxpYjo6VjFiBnBy", + "b3RvMw==")); + descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, + new pbr::FileDescriptor[] { global::Google.Api.FieldBehaviorReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.EmptyReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.StructReflection.Descriptor, global::Google.Cloud.Spanner.V1.ResultSetReflection.Descriptor, global::Google.Cloud.Spanner.V1.SpannerReflection.Descriptor, global::Google.Cloud.Spanner.V1.TransactionReflection.Descriptor, }, + new pbr::GeneratedClrTypeInfo(null, null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.InfoRequest), global::Google.Cloud.SpannerLib.V1.InfoRequest.Parser, null, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.InfoResponse), global::Google.Cloud.SpannerLib.V1.InfoResponse.Parser, new[]{ "Version" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.CreatePoolRequest), global::Google.Cloud.SpannerLib.V1.CreatePoolRequest.Parser, new[]{ "ConnectionString" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.CreateConnectionRequest), global::Google.Cloud.SpannerLib.V1.CreateConnectionRequest.Parser, new[]{ "Pool" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.ExecuteRequest), global::Google.Cloud.SpannerLib.V1.ExecuteRequest.Parser, new[]{ "Connection", "ExecuteSqlRequest" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.ExecuteBatchRequest), global::Google.Cloud.SpannerLib.V1.ExecuteBatchRequest.Parser, new[]{ "Connection", "ExecuteBatchDmlRequest" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.BeginTransactionRequest), global::Google.Cloud.SpannerLib.V1.BeginTransactionRequest.Parser, new[]{ "Connection", "TransactionOptions" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.WriteMutationsRequest), global::Google.Cloud.SpannerLib.V1.WriteMutationsRequest.Parser, new[]{ "Connection", "Mutations" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.Pool), global::Google.Cloud.SpannerLib.V1.Pool.Parser, new[]{ "Id" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.Connection), global::Google.Cloud.SpannerLib.V1.Connection.Parser, new[]{ "Pool", "Id" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.Rows), global::Google.Cloud.SpannerLib.V1.Rows.Parser, new[]{ "Connection", "Id" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.NextRequest), global::Google.Cloud.SpannerLib.V1.NextRequest.Parser, new[]{ "Rows", "NumRows", "Encoding" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.RowData), global::Google.Cloud.SpannerLib.V1.RowData.Parser, new[]{ "Rows", "Metadata", "Data", "Stats" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.MetadataRequest), global::Google.Cloud.SpannerLib.V1.MetadataRequest.Parser, new[]{ "Rows" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.ResultSetStatsRequest), global::Google.Cloud.SpannerLib.V1.ResultSetStatsRequest.Parser, new[]{ "Rows" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.ConnectionStreamRequest), global::Google.Cloud.SpannerLib.V1.ConnectionStreamRequest.Parser, new[]{ "ExecuteRequest" }, new[]{ "Request" }, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.SpannerLib.V1.ConnectionStreamResponse), global::Google.Cloud.SpannerLib.V1.ConnectionStreamResponse.Parser, new[]{ "Row" }, new[]{ "Response" }, null, null, null) + })); + } + #endregion + + } + #region Messages + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class InfoRequest : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new InfoRequest()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[0]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public InfoRequest() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public InfoRequest(InfoRequest other) : this() { + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public InfoRequest Clone() { + return new InfoRequest(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as InfoRequest); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(InfoRequest other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(InfoRequest other) { + if (other == null) { + return; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + } + } + } + #endif + + } + + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class InfoResponse : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new InfoResponse()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[1]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public InfoResponse() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public InfoResponse(InfoResponse other) : this() { + version_ = other.version_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public InfoResponse Clone() { + return new InfoResponse(this); + } + + /// Field number for the "version" field. + public const int VersionFieldNumber = 1; + private string version_ = ""; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public string Version { + get { return version_; } + set { + version_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as InfoResponse); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(InfoResponse other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (Version != other.Version) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (Version.Length != 0) hash ^= Version.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (Version.Length != 0) { + output.WriteRawTag(10); + output.WriteString(Version); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (Version.Length != 0) { + output.WriteRawTag(10); + output.WriteString(Version); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (Version.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(Version); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(InfoResponse other) { + if (other == null) { + return; + } + if (other.Version.Length != 0) { + Version = other.Version; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + Version = input.ReadString(); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + Version = input.ReadString(); + break; + } + } + } + } + #endif + + } + + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class CreatePoolRequest : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new CreatePoolRequest()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[2]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public CreatePoolRequest() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public CreatePoolRequest(CreatePoolRequest other) : this() { + connectionString_ = other.connectionString_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public CreatePoolRequest Clone() { + return new CreatePoolRequest(this); + } + + /// Field number for the "connection_string" field. + public const int ConnectionStringFieldNumber = 1; + private string connectionString_ = ""; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public string ConnectionString { + get { return connectionString_; } + set { + connectionString_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as CreatePoolRequest); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(CreatePoolRequest other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (ConnectionString != other.ConnectionString) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (ConnectionString.Length != 0) hash ^= ConnectionString.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (ConnectionString.Length != 0) { + output.WriteRawTag(10); + output.WriteString(ConnectionString); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (ConnectionString.Length != 0) { + output.WriteRawTag(10); + output.WriteString(ConnectionString); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (ConnectionString.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(ConnectionString); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(CreatePoolRequest other) { + if (other == null) { + return; + } + if (other.ConnectionString.Length != 0) { + ConnectionString = other.ConnectionString; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + ConnectionString = input.ReadString(); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + ConnectionString = input.ReadString(); + break; + } + } + } + } + #endif + + } + + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class CreateConnectionRequest : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new CreateConnectionRequest()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[3]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public CreateConnectionRequest() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public CreateConnectionRequest(CreateConnectionRequest other) : this() { + pool_ = other.pool_ != null ? other.pool_.Clone() : null; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public CreateConnectionRequest Clone() { + return new CreateConnectionRequest(this); + } + + /// Field number for the "pool" field. + public const int PoolFieldNumber = 1; + private global::Google.Cloud.SpannerLib.V1.Pool pool_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.SpannerLib.V1.Pool Pool { + get { return pool_; } + set { + pool_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as CreateConnectionRequest); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(CreateConnectionRequest other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!object.Equals(Pool, other.Pool)) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (pool_ != null) hash ^= Pool.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (pool_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Pool); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (pool_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Pool); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (pool_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Pool); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(CreateConnectionRequest other) { + if (other == null) { + return; + } + if (other.pool_ != null) { + if (pool_ == null) { + Pool = new global::Google.Cloud.SpannerLib.V1.Pool(); + } + Pool.MergeFrom(other.Pool); + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + if (pool_ == null) { + Pool = new global::Google.Cloud.SpannerLib.V1.Pool(); + } + input.ReadMessage(Pool); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + if (pool_ == null) { + Pool = new global::Google.Cloud.SpannerLib.V1.Pool(); + } + input.ReadMessage(Pool); + break; + } + } + } + } + #endif + + } + + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class ExecuteRequest : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new ExecuteRequest()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[4]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ExecuteRequest() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ExecuteRequest(ExecuteRequest other) : this() { + connection_ = other.connection_ != null ? other.connection_.Clone() : null; + executeSqlRequest_ = other.executeSqlRequest_ != null ? other.executeSqlRequest_.Clone() : null; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ExecuteRequest Clone() { + return new ExecuteRequest(this); + } + + /// Field number for the "connection" field. + public const int ConnectionFieldNumber = 1; + private global::Google.Cloud.SpannerLib.V1.Connection connection_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.SpannerLib.V1.Connection Connection { + get { return connection_; } + set { + connection_ = value; + } + } + + /// Field number for the "execute_sql_request" field. + public const int ExecuteSqlRequestFieldNumber = 2; + private global::Google.Cloud.Spanner.V1.ExecuteSqlRequest executeSqlRequest_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.Spanner.V1.ExecuteSqlRequest ExecuteSqlRequest { + get { return executeSqlRequest_; } + set { + executeSqlRequest_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as ExecuteRequest); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(ExecuteRequest other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!object.Equals(Connection, other.Connection)) return false; + if (!object.Equals(ExecuteSqlRequest, other.ExecuteSqlRequest)) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (connection_ != null) hash ^= Connection.GetHashCode(); + if (executeSqlRequest_ != null) hash ^= ExecuteSqlRequest.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (connection_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Connection); + } + if (executeSqlRequest_ != null) { + output.WriteRawTag(18); + output.WriteMessage(ExecuteSqlRequest); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (connection_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Connection); + } + if (executeSqlRequest_ != null) { + output.WriteRawTag(18); + output.WriteMessage(ExecuteSqlRequest); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (connection_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Connection); + } + if (executeSqlRequest_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(ExecuteSqlRequest); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(ExecuteRequest other) { + if (other == null) { + return; + } + if (other.connection_ != null) { + if (connection_ == null) { + Connection = new global::Google.Cloud.SpannerLib.V1.Connection(); + } + Connection.MergeFrom(other.Connection); + } + if (other.executeSqlRequest_ != null) { + if (executeSqlRequest_ == null) { + ExecuteSqlRequest = new global::Google.Cloud.Spanner.V1.ExecuteSqlRequest(); + } + ExecuteSqlRequest.MergeFrom(other.ExecuteSqlRequest); + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + if (connection_ == null) { + Connection = new global::Google.Cloud.SpannerLib.V1.Connection(); + } + input.ReadMessage(Connection); + break; + } + case 18: { + if (executeSqlRequest_ == null) { + ExecuteSqlRequest = new global::Google.Cloud.Spanner.V1.ExecuteSqlRequest(); + } + input.ReadMessage(ExecuteSqlRequest); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + if (connection_ == null) { + Connection = new global::Google.Cloud.SpannerLib.V1.Connection(); + } + input.ReadMessage(Connection); + break; + } + case 18: { + if (executeSqlRequest_ == null) { + ExecuteSqlRequest = new global::Google.Cloud.Spanner.V1.ExecuteSqlRequest(); + } + input.ReadMessage(ExecuteSqlRequest); + break; + } + } + } + } + #endif + + } + + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class ExecuteBatchRequest : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new ExecuteBatchRequest()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[5]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ExecuteBatchRequest() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ExecuteBatchRequest(ExecuteBatchRequest other) : this() { + connection_ = other.connection_ != null ? other.connection_.Clone() : null; + executeBatchDmlRequest_ = other.executeBatchDmlRequest_ != null ? other.executeBatchDmlRequest_.Clone() : null; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ExecuteBatchRequest Clone() { + return new ExecuteBatchRequest(this); + } + + /// Field number for the "connection" field. + public const int ConnectionFieldNumber = 1; + private global::Google.Cloud.SpannerLib.V1.Connection connection_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.SpannerLib.V1.Connection Connection { + get { return connection_; } + set { + connection_ = value; + } + } + + /// Field number for the "execute_batch_dml_request" field. + public const int ExecuteBatchDmlRequestFieldNumber = 2; + private global::Google.Cloud.Spanner.V1.ExecuteBatchDmlRequest executeBatchDmlRequest_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.Spanner.V1.ExecuteBatchDmlRequest ExecuteBatchDmlRequest { + get { return executeBatchDmlRequest_; } + set { + executeBatchDmlRequest_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as ExecuteBatchRequest); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(ExecuteBatchRequest other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!object.Equals(Connection, other.Connection)) return false; + if (!object.Equals(ExecuteBatchDmlRequest, other.ExecuteBatchDmlRequest)) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (connection_ != null) hash ^= Connection.GetHashCode(); + if (executeBatchDmlRequest_ != null) hash ^= ExecuteBatchDmlRequest.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (connection_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Connection); + } + if (executeBatchDmlRequest_ != null) { + output.WriteRawTag(18); + output.WriteMessage(ExecuteBatchDmlRequest); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (connection_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Connection); + } + if (executeBatchDmlRequest_ != null) { + output.WriteRawTag(18); + output.WriteMessage(ExecuteBatchDmlRequest); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (connection_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Connection); + } + if (executeBatchDmlRequest_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(ExecuteBatchDmlRequest); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(ExecuteBatchRequest other) { + if (other == null) { + return; + } + if (other.connection_ != null) { + if (connection_ == null) { + Connection = new global::Google.Cloud.SpannerLib.V1.Connection(); + } + Connection.MergeFrom(other.Connection); + } + if (other.executeBatchDmlRequest_ != null) { + if (executeBatchDmlRequest_ == null) { + ExecuteBatchDmlRequest = new global::Google.Cloud.Spanner.V1.ExecuteBatchDmlRequest(); + } + ExecuteBatchDmlRequest.MergeFrom(other.ExecuteBatchDmlRequest); + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + if (connection_ == null) { + Connection = new global::Google.Cloud.SpannerLib.V1.Connection(); + } + input.ReadMessage(Connection); + break; + } + case 18: { + if (executeBatchDmlRequest_ == null) { + ExecuteBatchDmlRequest = new global::Google.Cloud.Spanner.V1.ExecuteBatchDmlRequest(); + } + input.ReadMessage(ExecuteBatchDmlRequest); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + if (connection_ == null) { + Connection = new global::Google.Cloud.SpannerLib.V1.Connection(); + } + input.ReadMessage(Connection); + break; + } + case 18: { + if (executeBatchDmlRequest_ == null) { + ExecuteBatchDmlRequest = new global::Google.Cloud.Spanner.V1.ExecuteBatchDmlRequest(); + } + input.ReadMessage(ExecuteBatchDmlRequest); + break; + } + } + } + } + #endif + + } + + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class BeginTransactionRequest : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new BeginTransactionRequest()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[6]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public BeginTransactionRequest() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public BeginTransactionRequest(BeginTransactionRequest other) : this() { + connection_ = other.connection_ != null ? other.connection_.Clone() : null; + transactionOptions_ = other.transactionOptions_ != null ? other.transactionOptions_.Clone() : null; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public BeginTransactionRequest Clone() { + return new BeginTransactionRequest(this); + } + + /// Field number for the "connection" field. + public const int ConnectionFieldNumber = 1; + private global::Google.Cloud.SpannerLib.V1.Connection connection_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.SpannerLib.V1.Connection Connection { + get { return connection_; } + set { + connection_ = value; + } + } + + /// Field number for the "transaction_options" field. + public const int TransactionOptionsFieldNumber = 2; + private global::Google.Cloud.Spanner.V1.TransactionOptions transactionOptions_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.Spanner.V1.TransactionOptions TransactionOptions { + get { return transactionOptions_; } + set { + transactionOptions_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as BeginTransactionRequest); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(BeginTransactionRequest other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!object.Equals(Connection, other.Connection)) return false; + if (!object.Equals(TransactionOptions, other.TransactionOptions)) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (connection_ != null) hash ^= Connection.GetHashCode(); + if (transactionOptions_ != null) hash ^= TransactionOptions.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (connection_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Connection); + } + if (transactionOptions_ != null) { + output.WriteRawTag(18); + output.WriteMessage(TransactionOptions); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (connection_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Connection); + } + if (transactionOptions_ != null) { + output.WriteRawTag(18); + output.WriteMessage(TransactionOptions); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (connection_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Connection); + } + if (transactionOptions_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(TransactionOptions); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(BeginTransactionRequest other) { + if (other == null) { + return; + } + if (other.connection_ != null) { + if (connection_ == null) { + Connection = new global::Google.Cloud.SpannerLib.V1.Connection(); + } + Connection.MergeFrom(other.Connection); + } + if (other.transactionOptions_ != null) { + if (transactionOptions_ == null) { + TransactionOptions = new global::Google.Cloud.Spanner.V1.TransactionOptions(); + } + TransactionOptions.MergeFrom(other.TransactionOptions); + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + if (connection_ == null) { + Connection = new global::Google.Cloud.SpannerLib.V1.Connection(); + } + input.ReadMessage(Connection); + break; + } + case 18: { + if (transactionOptions_ == null) { + TransactionOptions = new global::Google.Cloud.Spanner.V1.TransactionOptions(); + } + input.ReadMessage(TransactionOptions); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + if (connection_ == null) { + Connection = new global::Google.Cloud.SpannerLib.V1.Connection(); + } + input.ReadMessage(Connection); + break; + } + case 18: { + if (transactionOptions_ == null) { + TransactionOptions = new global::Google.Cloud.Spanner.V1.TransactionOptions(); + } + input.ReadMessage(TransactionOptions); + break; + } + } + } + } + #endif + + } + + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class WriteMutationsRequest : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new WriteMutationsRequest()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[7]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public WriteMutationsRequest() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public WriteMutationsRequest(WriteMutationsRequest other) : this() { + connection_ = other.connection_ != null ? other.connection_.Clone() : null; + mutations_ = other.mutations_ != null ? other.mutations_.Clone() : null; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public WriteMutationsRequest Clone() { + return new WriteMutationsRequest(this); + } + + /// Field number for the "connection" field. + public const int ConnectionFieldNumber = 1; + private global::Google.Cloud.SpannerLib.V1.Connection connection_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.SpannerLib.V1.Connection Connection { + get { return connection_; } + set { + connection_ = value; + } + } + + /// Field number for the "mutations" field. + public const int MutationsFieldNumber = 2; + private global::Google.Cloud.Spanner.V1.BatchWriteRequest.Types.MutationGroup mutations_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.Spanner.V1.BatchWriteRequest.Types.MutationGroup Mutations { + get { return mutations_; } + set { + mutations_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as WriteMutationsRequest); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(WriteMutationsRequest other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!object.Equals(Connection, other.Connection)) return false; + if (!object.Equals(Mutations, other.Mutations)) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (connection_ != null) hash ^= Connection.GetHashCode(); + if (mutations_ != null) hash ^= Mutations.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (connection_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Connection); + } + if (mutations_ != null) { + output.WriteRawTag(18); + output.WriteMessage(Mutations); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (connection_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Connection); + } + if (mutations_ != null) { + output.WriteRawTag(18); + output.WriteMessage(Mutations); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (connection_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Connection); + } + if (mutations_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Mutations); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(WriteMutationsRequest other) { + if (other == null) { + return; + } + if (other.connection_ != null) { + if (connection_ == null) { + Connection = new global::Google.Cloud.SpannerLib.V1.Connection(); + } + Connection.MergeFrom(other.Connection); + } + if (other.mutations_ != null) { + if (mutations_ == null) { + Mutations = new global::Google.Cloud.Spanner.V1.BatchWriteRequest.Types.MutationGroup(); + } + Mutations.MergeFrom(other.Mutations); + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + if (connection_ == null) { + Connection = new global::Google.Cloud.SpannerLib.V1.Connection(); + } + input.ReadMessage(Connection); + break; + } + case 18: { + if (mutations_ == null) { + Mutations = new global::Google.Cloud.Spanner.V1.BatchWriteRequest.Types.MutationGroup(); + } + input.ReadMessage(Mutations); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + if (connection_ == null) { + Connection = new global::Google.Cloud.SpannerLib.V1.Connection(); + } + input.ReadMessage(Connection); + break; + } + case 18: { + if (mutations_ == null) { + Mutations = new global::Google.Cloud.Spanner.V1.BatchWriteRequest.Types.MutationGroup(); + } + input.ReadMessage(Mutations); + break; + } + } + } + } + #endif + + } + + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class Pool : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new Pool()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[8]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public Pool() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public Pool(Pool other) : this() { + id_ = other.id_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public Pool Clone() { + return new Pool(this); + } + + /// Field number for the "id" field. + public const int IdFieldNumber = 1; + private long id_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public long Id { + get { return id_; } + set { + id_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as Pool); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(Pool other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (Id != other.Id) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (Id != 0L) hash ^= Id.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (Id != 0L) { + output.WriteRawTag(8); + output.WriteInt64(Id); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (Id != 0L) { + output.WriteRawTag(8); + output.WriteInt64(Id); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (Id != 0L) { + size += 1 + pb::CodedOutputStream.ComputeInt64Size(Id); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(Pool other) { + if (other == null) { + return; + } + if (other.Id != 0L) { + Id = other.Id; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 8: { + Id = input.ReadInt64(); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 8: { + Id = input.ReadInt64(); + break; + } + } + } + } + #endif + + } + + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class Connection : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new Connection()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[9]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public Connection() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public Connection(Connection other) : this() { + pool_ = other.pool_ != null ? other.pool_.Clone() : null; + id_ = other.id_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public Connection Clone() { + return new Connection(this); + } + + /// Field number for the "pool" field. + public const int PoolFieldNumber = 1; + private global::Google.Cloud.SpannerLib.V1.Pool pool_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.SpannerLib.V1.Pool Pool { + get { return pool_; } + set { + pool_ = value; + } + } + + /// Field number for the "id" field. + public const int IdFieldNumber = 2; + private long id_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public long Id { + get { return id_; } + set { + id_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as Connection); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(Connection other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!object.Equals(Pool, other.Pool)) return false; + if (Id != other.Id) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (pool_ != null) hash ^= Pool.GetHashCode(); + if (Id != 0L) hash ^= Id.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (pool_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Pool); + } + if (Id != 0L) { + output.WriteRawTag(16); + output.WriteInt64(Id); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (pool_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Pool); + } + if (Id != 0L) { + output.WriteRawTag(16); + output.WriteInt64(Id); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (pool_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Pool); + } + if (Id != 0L) { + size += 1 + pb::CodedOutputStream.ComputeInt64Size(Id); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(Connection other) { + if (other == null) { + return; + } + if (other.pool_ != null) { + if (pool_ == null) { + Pool = new global::Google.Cloud.SpannerLib.V1.Pool(); + } + Pool.MergeFrom(other.Pool); + } + if (other.Id != 0L) { + Id = other.Id; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + if (pool_ == null) { + Pool = new global::Google.Cloud.SpannerLib.V1.Pool(); + } + input.ReadMessage(Pool); + break; + } + case 16: { + Id = input.ReadInt64(); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + if (pool_ == null) { + Pool = new global::Google.Cloud.SpannerLib.V1.Pool(); + } + input.ReadMessage(Pool); + break; + } + case 16: { + Id = input.ReadInt64(); + break; + } + } + } + } + #endif + + } + + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class Rows : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new Rows()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[10]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public Rows() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public Rows(Rows other) : this() { + connection_ = other.connection_ != null ? other.connection_.Clone() : null; + id_ = other.id_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public Rows Clone() { + return new Rows(this); + } + + /// Field number for the "connection" field. + public const int ConnectionFieldNumber = 1; + private global::Google.Cloud.SpannerLib.V1.Connection connection_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.SpannerLib.V1.Connection Connection { + get { return connection_; } + set { + connection_ = value; + } + } + + /// Field number for the "id" field. + public const int IdFieldNumber = 2; + private long id_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public long Id { + get { return id_; } + set { + id_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as Rows); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(Rows other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!object.Equals(Connection, other.Connection)) return false; + if (Id != other.Id) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (connection_ != null) hash ^= Connection.GetHashCode(); + if (Id != 0L) hash ^= Id.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (connection_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Connection); + } + if (Id != 0L) { + output.WriteRawTag(16); + output.WriteInt64(Id); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (connection_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Connection); + } + if (Id != 0L) { + output.WriteRawTag(16); + output.WriteInt64(Id); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (connection_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Connection); + } + if (Id != 0L) { + size += 1 + pb::CodedOutputStream.ComputeInt64Size(Id); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(Rows other) { + if (other == null) { + return; + } + if (other.connection_ != null) { + if (connection_ == null) { + Connection = new global::Google.Cloud.SpannerLib.V1.Connection(); + } + Connection.MergeFrom(other.Connection); + } + if (other.Id != 0L) { + Id = other.Id; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + if (connection_ == null) { + Connection = new global::Google.Cloud.SpannerLib.V1.Connection(); + } + input.ReadMessage(Connection); + break; + } + case 16: { + Id = input.ReadInt64(); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + if (connection_ == null) { + Connection = new global::Google.Cloud.SpannerLib.V1.Connection(); + } + input.ReadMessage(Connection); + break; + } + case 16: { + Id = input.ReadInt64(); + break; + } + } + } + } + #endif + + } + + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class NextRequest : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new NextRequest()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[11]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public NextRequest() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public NextRequest(NextRequest other) : this() { + rows_ = other.rows_ != null ? other.rows_.Clone() : null; + numRows_ = other.numRows_; + encoding_ = other.encoding_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public NextRequest Clone() { + return new NextRequest(this); + } + + /// Field number for the "rows" field. + public const int RowsFieldNumber = 1; + private global::Google.Cloud.SpannerLib.V1.Rows rows_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.SpannerLib.V1.Rows Rows { + get { return rows_; } + set { + rows_ = value; + } + } + + /// Field number for the "num_rows" field. + public const int NumRowsFieldNumber = 2; + private long numRows_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public long NumRows { + get { return numRows_; } + set { + numRows_ = value; + } + } + + /// Field number for the "encoding" field. + public const int EncodingFieldNumber = 3; + private long encoding_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public long Encoding { + get { return encoding_; } + set { + encoding_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as NextRequest); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(NextRequest other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!object.Equals(Rows, other.Rows)) return false; + if (NumRows != other.NumRows) return false; + if (Encoding != other.Encoding) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (rows_ != null) hash ^= Rows.GetHashCode(); + if (NumRows != 0L) hash ^= NumRows.GetHashCode(); + if (Encoding != 0L) hash ^= Encoding.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (rows_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Rows); + } + if (NumRows != 0L) { + output.WriteRawTag(16); + output.WriteInt64(NumRows); + } + if (Encoding != 0L) { + output.WriteRawTag(24); + output.WriteInt64(Encoding); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (rows_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Rows); + } + if (NumRows != 0L) { + output.WriteRawTag(16); + output.WriteInt64(NumRows); + } + if (Encoding != 0L) { + output.WriteRawTag(24); + output.WriteInt64(Encoding); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (rows_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Rows); + } + if (NumRows != 0L) { + size += 1 + pb::CodedOutputStream.ComputeInt64Size(NumRows); + } + if (Encoding != 0L) { + size += 1 + pb::CodedOutputStream.ComputeInt64Size(Encoding); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(NextRequest other) { + if (other == null) { + return; + } + if (other.rows_ != null) { + if (rows_ == null) { + Rows = new global::Google.Cloud.SpannerLib.V1.Rows(); + } + Rows.MergeFrom(other.Rows); + } + if (other.NumRows != 0L) { + NumRows = other.NumRows; + } + if (other.Encoding != 0L) { + Encoding = other.Encoding; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + if (rows_ == null) { + Rows = new global::Google.Cloud.SpannerLib.V1.Rows(); + } + input.ReadMessage(Rows); + break; + } + case 16: { + NumRows = input.ReadInt64(); + break; + } + case 24: { + Encoding = input.ReadInt64(); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + if (rows_ == null) { + Rows = new global::Google.Cloud.SpannerLib.V1.Rows(); + } + input.ReadMessage(Rows); + break; + } + case 16: { + NumRows = input.ReadInt64(); + break; + } + case 24: { + Encoding = input.ReadInt64(); + break; + } + } + } + } + #endif + + } + + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class RowData : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new RowData()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[12]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public RowData() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public RowData(RowData other) : this() { + rows_ = other.rows_ != null ? other.rows_.Clone() : null; + metadata_ = other.metadata_ != null ? other.metadata_.Clone() : null; + data_ = other.data_.Clone(); + stats_ = other.stats_ != null ? other.stats_.Clone() : null; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public RowData Clone() { + return new RowData(this); + } + + /// Field number for the "rows" field. + public const int RowsFieldNumber = 1; + private global::Google.Cloud.SpannerLib.V1.Rows rows_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.SpannerLib.V1.Rows Rows { + get { return rows_; } + set { + rows_ = value; + } + } + + /// Field number for the "metadata" field. + public const int MetadataFieldNumber = 2; + private global::Google.Cloud.Spanner.V1.ResultSetMetadata metadata_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.Spanner.V1.ResultSetMetadata Metadata { + get { return metadata_; } + set { + metadata_ = value; + } + } + + /// Field number for the "data" field. + public const int DataFieldNumber = 3; + private static readonly pb::FieldCodec _repeated_data_codec + = pb::FieldCodec.ForMessage(26, global::Google.Protobuf.WellKnownTypes.ListValue.Parser); + private readonly pbc::RepeatedField data_ = new pbc::RepeatedField(); + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public pbc::RepeatedField Data { + get { return data_; } + } + + /// Field number for the "stats" field. + public const int StatsFieldNumber = 4; + private global::Google.Cloud.Spanner.V1.ResultSetStats stats_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.Spanner.V1.ResultSetStats Stats { + get { return stats_; } + set { + stats_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as RowData); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(RowData other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!object.Equals(Rows, other.Rows)) return false; + if (!object.Equals(Metadata, other.Metadata)) return false; + if(!data_.Equals(other.data_)) return false; + if (!object.Equals(Stats, other.Stats)) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (rows_ != null) hash ^= Rows.GetHashCode(); + if (metadata_ != null) hash ^= Metadata.GetHashCode(); + hash ^= data_.GetHashCode(); + if (stats_ != null) hash ^= Stats.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (rows_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Rows); + } + if (metadata_ != null) { + output.WriteRawTag(18); + output.WriteMessage(Metadata); + } + data_.WriteTo(output, _repeated_data_codec); + if (stats_ != null) { + output.WriteRawTag(34); + output.WriteMessage(Stats); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (rows_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Rows); + } + if (metadata_ != null) { + output.WriteRawTag(18); + output.WriteMessage(Metadata); + } + data_.WriteTo(ref output, _repeated_data_codec); + if (stats_ != null) { + output.WriteRawTag(34); + output.WriteMessage(Stats); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (rows_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Rows); + } + if (metadata_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Metadata); + } + size += data_.CalculateSize(_repeated_data_codec); + if (stats_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Stats); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(RowData other) { + if (other == null) { + return; + } + if (other.rows_ != null) { + if (rows_ == null) { + Rows = new global::Google.Cloud.SpannerLib.V1.Rows(); + } + Rows.MergeFrom(other.Rows); + } + if (other.metadata_ != null) { + if (metadata_ == null) { + Metadata = new global::Google.Cloud.Spanner.V1.ResultSetMetadata(); + } + Metadata.MergeFrom(other.Metadata); + } + data_.Add(other.data_); + if (other.stats_ != null) { + if (stats_ == null) { + Stats = new global::Google.Cloud.Spanner.V1.ResultSetStats(); + } + Stats.MergeFrom(other.Stats); + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + if (rows_ == null) { + Rows = new global::Google.Cloud.SpannerLib.V1.Rows(); + } + input.ReadMessage(Rows); + break; + } + case 18: { + if (metadata_ == null) { + Metadata = new global::Google.Cloud.Spanner.V1.ResultSetMetadata(); + } + input.ReadMessage(Metadata); + break; + } + case 26: { + data_.AddEntriesFrom(input, _repeated_data_codec); + break; + } + case 34: { + if (stats_ == null) { + Stats = new global::Google.Cloud.Spanner.V1.ResultSetStats(); + } + input.ReadMessage(Stats); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + if (rows_ == null) { + Rows = new global::Google.Cloud.SpannerLib.V1.Rows(); + } + input.ReadMessage(Rows); + break; + } + case 18: { + if (metadata_ == null) { + Metadata = new global::Google.Cloud.Spanner.V1.ResultSetMetadata(); + } + input.ReadMessage(Metadata); + break; + } + case 26: { + data_.AddEntriesFrom(ref input, _repeated_data_codec); + break; + } + case 34: { + if (stats_ == null) { + Stats = new global::Google.Cloud.Spanner.V1.ResultSetStats(); + } + input.ReadMessage(Stats); + break; + } + } + } + } + #endif + + } + + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class MetadataRequest : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new MetadataRequest()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[13]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public MetadataRequest() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public MetadataRequest(MetadataRequest other) : this() { + rows_ = other.rows_ != null ? other.rows_.Clone() : null; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public MetadataRequest Clone() { + return new MetadataRequest(this); + } + + /// Field number for the "rows" field. + public const int RowsFieldNumber = 1; + private global::Google.Cloud.SpannerLib.V1.Rows rows_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.SpannerLib.V1.Rows Rows { + get { return rows_; } + set { + rows_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as MetadataRequest); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(MetadataRequest other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!object.Equals(Rows, other.Rows)) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (rows_ != null) hash ^= Rows.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (rows_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Rows); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (rows_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Rows); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (rows_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Rows); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(MetadataRequest other) { + if (other == null) { + return; + } + if (other.rows_ != null) { + if (rows_ == null) { + Rows = new global::Google.Cloud.SpannerLib.V1.Rows(); + } + Rows.MergeFrom(other.Rows); + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + if (rows_ == null) { + Rows = new global::Google.Cloud.SpannerLib.V1.Rows(); + } + input.ReadMessage(Rows); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + if (rows_ == null) { + Rows = new global::Google.Cloud.SpannerLib.V1.Rows(); + } + input.ReadMessage(Rows); + break; + } + } + } + } + #endif + + } + + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class ResultSetStatsRequest : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new ResultSetStatsRequest()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[14]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ResultSetStatsRequest() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ResultSetStatsRequest(ResultSetStatsRequest other) : this() { + rows_ = other.rows_ != null ? other.rows_.Clone() : null; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ResultSetStatsRequest Clone() { + return new ResultSetStatsRequest(this); + } + + /// Field number for the "rows" field. + public const int RowsFieldNumber = 1; + private global::Google.Cloud.SpannerLib.V1.Rows rows_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.SpannerLib.V1.Rows Rows { + get { return rows_; } + set { + rows_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as ResultSetStatsRequest); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(ResultSetStatsRequest other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!object.Equals(Rows, other.Rows)) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (rows_ != null) hash ^= Rows.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (rows_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Rows); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (rows_ != null) { + output.WriteRawTag(10); + output.WriteMessage(Rows); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (rows_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Rows); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(ResultSetStatsRequest other) { + if (other == null) { + return; + } + if (other.rows_ != null) { + if (rows_ == null) { + Rows = new global::Google.Cloud.SpannerLib.V1.Rows(); + } + Rows.MergeFrom(other.Rows); + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + if (rows_ == null) { + Rows = new global::Google.Cloud.SpannerLib.V1.Rows(); + } + input.ReadMessage(Rows); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + if (rows_ == null) { + Rows = new global::Google.Cloud.SpannerLib.V1.Rows(); + } + input.ReadMessage(Rows); + break; + } + } + } + } + #endif + + } + + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class ConnectionStreamRequest : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new ConnectionStreamRequest()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[15]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ConnectionStreamRequest() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ConnectionStreamRequest(ConnectionStreamRequest other) : this() { + switch (other.RequestCase) { + case RequestOneofCase.ExecuteRequest: + ExecuteRequest = other.ExecuteRequest.Clone(); + break; + } + + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ConnectionStreamRequest Clone() { + return new ConnectionStreamRequest(this); + } + + /// Field number for the "execute_request" field. + public const int ExecuteRequestFieldNumber = 1; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.SpannerLib.V1.ExecuteRequest ExecuteRequest { + get { return requestCase_ == RequestOneofCase.ExecuteRequest ? (global::Google.Cloud.SpannerLib.V1.ExecuteRequest) request_ : null; } + set { + request_ = value; + requestCase_ = value == null ? RequestOneofCase.None : RequestOneofCase.ExecuteRequest; + } + } + + private object request_; + /// Enum of possible cases for the "request" oneof. + public enum RequestOneofCase { + None = 0, + ExecuteRequest = 1, + } + private RequestOneofCase requestCase_ = RequestOneofCase.None; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public RequestOneofCase RequestCase { + get { return requestCase_; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void ClearRequest() { + requestCase_ = RequestOneofCase.None; + request_ = null; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as ConnectionStreamRequest); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(ConnectionStreamRequest other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!object.Equals(ExecuteRequest, other.ExecuteRequest)) return false; + if (RequestCase != other.RequestCase) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (requestCase_ == RequestOneofCase.ExecuteRequest) hash ^= ExecuteRequest.GetHashCode(); + hash ^= (int) requestCase_; + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (requestCase_ == RequestOneofCase.ExecuteRequest) { + output.WriteRawTag(10); + output.WriteMessage(ExecuteRequest); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (requestCase_ == RequestOneofCase.ExecuteRequest) { + output.WriteRawTag(10); + output.WriteMessage(ExecuteRequest); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (requestCase_ == RequestOneofCase.ExecuteRequest) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(ExecuteRequest); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(ConnectionStreamRequest other) { + if (other == null) { + return; + } + switch (other.RequestCase) { + case RequestOneofCase.ExecuteRequest: + if (ExecuteRequest == null) { + ExecuteRequest = new global::Google.Cloud.SpannerLib.V1.ExecuteRequest(); + } + ExecuteRequest.MergeFrom(other.ExecuteRequest); + break; + } + + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + global::Google.Cloud.SpannerLib.V1.ExecuteRequest subBuilder = new global::Google.Cloud.SpannerLib.V1.ExecuteRequest(); + if (requestCase_ == RequestOneofCase.ExecuteRequest) { + subBuilder.MergeFrom(ExecuteRequest); + } + input.ReadMessage(subBuilder); + ExecuteRequest = subBuilder; + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + global::Google.Cloud.SpannerLib.V1.ExecuteRequest subBuilder = new global::Google.Cloud.SpannerLib.V1.ExecuteRequest(); + if (requestCase_ == RequestOneofCase.ExecuteRequest) { + subBuilder.MergeFrom(ExecuteRequest); + } + input.ReadMessage(subBuilder); + ExecuteRequest = subBuilder; + break; + } + } + } + } + #endif + + } + + [global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")] + public sealed partial class ConnectionStreamResponse : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new ConnectionStreamResponse()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public static pbr::MessageDescriptor Descriptor { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.MessageTypes[16]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ConnectionStreamResponse() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ConnectionStreamResponse(ConnectionStreamResponse other) : this() { + switch (other.ResponseCase) { + case ResponseOneofCase.Row: + Row = other.Row.Clone(); + break; + } + + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ConnectionStreamResponse Clone() { + return new ConnectionStreamResponse(this); + } + + /// Field number for the "row" field. + public const int RowFieldNumber = 1; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public global::Google.Cloud.Spanner.V1.PartialResultSet Row { + get { return responseCase_ == ResponseOneofCase.Row ? (global::Google.Cloud.Spanner.V1.PartialResultSet) response_ : null; } + set { + response_ = value; + responseCase_ = value == null ? ResponseOneofCase.None : ResponseOneofCase.Row; + } + } + + private object response_; + /// Enum of possible cases for the "response" oneof. + public enum ResponseOneofCase { + None = 0, + Row = 1, + } + private ResponseOneofCase responseCase_ = ResponseOneofCase.None; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public ResponseOneofCase ResponseCase { + get { return responseCase_; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void ClearResponse() { + responseCase_ = ResponseOneofCase.None; + response_ = null; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override bool Equals(object other) { + return Equals(other as ConnectionStreamResponse); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public bool Equals(ConnectionStreamResponse other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!object.Equals(Row, other.Row)) return false; + if (ResponseCase != other.ResponseCase) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override int GetHashCode() { + int hash = 1; + if (responseCase_ == ResponseOneofCase.Row) hash ^= Row.GetHashCode(); + hash ^= (int) responseCase_; + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (responseCase_ == ResponseOneofCase.Row) { + output.WriteRawTag(10); + output.WriteMessage(Row); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (responseCase_ == ResponseOneofCase.Row) { + output.WriteRawTag(10); + output.WriteMessage(Row); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public int CalculateSize() { + int size = 0; + if (responseCase_ == ResponseOneofCase.Row) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(Row); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(ConnectionStreamResponse other) { + if (other == null) { + return; + } + switch (other.ResponseCase) { + case ResponseOneofCase.Row: + if (Row == null) { + Row = new global::Google.Cloud.Spanner.V1.PartialResultSet(); + } + Row.MergeFrom(other.Row); + break; + } + + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + global::Google.Cloud.Spanner.V1.PartialResultSet subBuilder = new global::Google.Cloud.Spanner.V1.PartialResultSet(); + if (responseCase_ == ResponseOneofCase.Row) { + subBuilder.MergeFrom(Row); + } + input.ReadMessage(subBuilder); + Row = subBuilder; + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + if ((tag & 7) == 4) { + // Abort on any end group tag. + return; + } + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + global::Google.Cloud.Spanner.V1.PartialResultSet subBuilder = new global::Google.Cloud.Spanner.V1.PartialResultSet(); + if (responseCase_ == ResponseOneofCase.Row) { + subBuilder.MergeFrom(Row); + } + input.ReadMessage(subBuilder); + Row = subBuilder; + break; + } + } + } + } + #endif + + } + + #endregion + +} + +#endregion Designer generated code diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-v1/SpannerlibGrpc.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-v1/SpannerlibGrpc.cs new file mode 100644 index 00000000..d5e9db94 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-v1/SpannerlibGrpc.cs @@ -0,0 +1,590 @@ +// +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: google/spannerlib/v1/spannerlib.proto +// +#pragma warning disable 0414, 1591, 8981, 0612 +#region Designer generated code + +using grpc = global::Grpc.Core; + +namespace Google.Cloud.SpannerLib.V1 { + public static partial class SpannerLib + { + static readonly string __ServiceName = "google.spannerlib.v1.SpannerLib"; + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static void __Helper_SerializeMessage(global::Google.Protobuf.IMessage message, grpc::SerializationContext context) + { + #if !GRPC_DISABLE_PROTOBUF_BUFFER_SERIALIZATION + if (message is global::Google.Protobuf.IBufferMessage) + { + context.SetPayloadLength(message.CalculateSize()); + global::Google.Protobuf.MessageExtensions.WriteTo(message, context.GetBufferWriter()); + context.Complete(); + return; + } + #endif + context.Complete(global::Google.Protobuf.MessageExtensions.ToByteArray(message)); + } + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static class __Helper_MessageCache + { + public static readonly bool IsBufferMessage = global::System.Reflection.IntrospectionExtensions.GetTypeInfo(typeof(global::Google.Protobuf.IBufferMessage)).IsAssignableFrom(typeof(T)); + } + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static T __Helper_DeserializeMessage(grpc::DeserializationContext context, global::Google.Protobuf.MessageParser parser) where T : global::Google.Protobuf.IMessage + { + #if !GRPC_DISABLE_PROTOBUF_BUFFER_SERIALIZATION + if (__Helper_MessageCache.IsBufferMessage) + { + return parser.ParseFrom(context.PayloadAsReadOnlySequence()); + } + #endif + return parser.ParseFrom(context.PayloadAsNewBuffer()); + } + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spannerlib_v1_InfoRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.SpannerLib.V1.InfoRequest.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spannerlib_v1_InfoResponse = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.SpannerLib.V1.InfoResponse.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spannerlib_v1_CreatePoolRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.SpannerLib.V1.CreatePoolRequest.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spannerlib_v1_Pool = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.SpannerLib.V1.Pool.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_protobuf_Empty = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Protobuf.WellKnownTypes.Empty.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spannerlib_v1_CreateConnectionRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.SpannerLib.V1.CreateConnectionRequest.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spannerlib_v1_Connection = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.SpannerLib.V1.Connection.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spannerlib_v1_ExecuteRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.SpannerLib.V1.ExecuteRequest.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spannerlib_v1_Rows = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.SpannerLib.V1.Rows.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spannerlib_v1_RowData = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.SpannerLib.V1.RowData.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spannerlib_v1_ExecuteBatchRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.SpannerLib.V1.ExecuteBatchRequest.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spanner_v1_ExecuteBatchDmlResponse = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.Spanner.V1.ExecuteBatchDmlResponse.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spanner_v1_ResultSetMetadata = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.Spanner.V1.ResultSetMetadata.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spannerlib_v1_NextRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.SpannerLib.V1.NextRequest.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_protobuf_ListValue = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Protobuf.WellKnownTypes.ListValue.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spanner_v1_ResultSetStats = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.Spanner.V1.ResultSetStats.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spannerlib_v1_BeginTransactionRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.SpannerLib.V1.BeginTransactionRequest.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spanner_v1_CommitResponse = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.Spanner.V1.CommitResponse.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spannerlib_v1_WriteMutationsRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.SpannerLib.V1.WriteMutationsRequest.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spannerlib_v1_ConnectionStreamRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.SpannerLib.V1.ConnectionStreamRequest.Parser)); + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Marshaller __Marshaller_google_spannerlib_v1_ConnectionStreamResponse = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Google.Cloud.SpannerLib.V1.ConnectionStreamResponse.Parser)); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_Info = new grpc::Method( + grpc::MethodType.Unary, + __ServiceName, + "Info", + __Marshaller_google_spannerlib_v1_InfoRequest, + __Marshaller_google_spannerlib_v1_InfoResponse); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_CreatePool = new grpc::Method( + grpc::MethodType.Unary, + __ServiceName, + "CreatePool", + __Marshaller_google_spannerlib_v1_CreatePoolRequest, + __Marshaller_google_spannerlib_v1_Pool); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_ClosePool = new grpc::Method( + grpc::MethodType.Unary, + __ServiceName, + "ClosePool", + __Marshaller_google_spannerlib_v1_Pool, + __Marshaller_google_protobuf_Empty); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_CreateConnection = new grpc::Method( + grpc::MethodType.Unary, + __ServiceName, + "CreateConnection", + __Marshaller_google_spannerlib_v1_CreateConnectionRequest, + __Marshaller_google_spannerlib_v1_Connection); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_CloseConnection = new grpc::Method( + grpc::MethodType.Unary, + __ServiceName, + "CloseConnection", + __Marshaller_google_spannerlib_v1_Connection, + __Marshaller_google_protobuf_Empty); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_Execute = new grpc::Method( + grpc::MethodType.Unary, + __ServiceName, + "Execute", + __Marshaller_google_spannerlib_v1_ExecuteRequest, + __Marshaller_google_spannerlib_v1_Rows); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_ExecuteStreaming = new grpc::Method( + grpc::MethodType.ServerStreaming, + __ServiceName, + "ExecuteStreaming", + __Marshaller_google_spannerlib_v1_ExecuteRequest, + __Marshaller_google_spannerlib_v1_RowData); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_ExecuteBatch = new grpc::Method( + grpc::MethodType.Unary, + __ServiceName, + "ExecuteBatch", + __Marshaller_google_spannerlib_v1_ExecuteBatchRequest, + __Marshaller_google_spanner_v1_ExecuteBatchDmlResponse); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_Metadata = new grpc::Method( + grpc::MethodType.Unary, + __ServiceName, + "Metadata", + __Marshaller_google_spannerlib_v1_Rows, + __Marshaller_google_spanner_v1_ResultSetMetadata); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_Next = new grpc::Method( + grpc::MethodType.Unary, + __ServiceName, + "Next", + __Marshaller_google_spannerlib_v1_NextRequest, + __Marshaller_google_protobuf_ListValue); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_ResultSetStats = new grpc::Method( + grpc::MethodType.Unary, + __ServiceName, + "ResultSetStats", + __Marshaller_google_spannerlib_v1_Rows, + __Marshaller_google_spanner_v1_ResultSetStats); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_CloseRows = new grpc::Method( + grpc::MethodType.Unary, + __ServiceName, + "CloseRows", + __Marshaller_google_spannerlib_v1_Rows, + __Marshaller_google_protobuf_Empty); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_BeginTransaction = new grpc::Method( + grpc::MethodType.Unary, + __ServiceName, + "BeginTransaction", + __Marshaller_google_spannerlib_v1_BeginTransactionRequest, + __Marshaller_google_protobuf_Empty); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_Commit = new grpc::Method( + grpc::MethodType.Unary, + __ServiceName, + "Commit", + __Marshaller_google_spannerlib_v1_Connection, + __Marshaller_google_spanner_v1_CommitResponse); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_Rollback = new grpc::Method( + grpc::MethodType.Unary, + __ServiceName, + "Rollback", + __Marshaller_google_spannerlib_v1_Connection, + __Marshaller_google_protobuf_Empty); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_WriteMutations = new grpc::Method( + grpc::MethodType.Unary, + __ServiceName, + "WriteMutations", + __Marshaller_google_spannerlib_v1_WriteMutationsRequest, + __Marshaller_google_spanner_v1_CommitResponse); + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + static readonly grpc::Method __Method_ConnectionStream = new grpc::Method( + grpc::MethodType.DuplexStreaming, + __ServiceName, + "ConnectionStream", + __Marshaller_google_spannerlib_v1_ConnectionStreamRequest, + __Marshaller_google_spannerlib_v1_ConnectionStreamResponse); + + /// Service descriptor + public static global::Google.Protobuf.Reflection.ServiceDescriptor Descriptor + { + get { return global::Google.Cloud.SpannerLib.V1.SpannerlibReflection.Descriptor.Services[0]; } + } + + /// Client for SpannerLib + public partial class SpannerLibClient : grpc::ClientBase + { + /// Creates a new client for SpannerLib + /// The channel to use to make remote calls. + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public SpannerLibClient(grpc::ChannelBase channel) : base(channel) + { + } + /// Creates a new client for SpannerLib that uses a custom CallInvoker. + /// The callInvoker to use to make remote calls. + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public SpannerLibClient(grpc::CallInvoker callInvoker) : base(callInvoker) + { + } + /// Protected parameterless constructor to allow creation of test doubles. + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + protected SpannerLibClient() : base() + { + } + /// Protected constructor to allow creation of configured clients. + /// The client configuration. + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + protected SpannerLibClient(ClientBaseConfiguration configuration) : base(configuration) + { + } + + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.SpannerLib.V1.InfoResponse Info(global::Google.Cloud.SpannerLib.V1.InfoRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return Info(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.SpannerLib.V1.InfoResponse Info(global::Google.Cloud.SpannerLib.V1.InfoRequest request, grpc::CallOptions options) + { + return CallInvoker.BlockingUnaryCall(__Method_Info, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall InfoAsync(global::Google.Cloud.SpannerLib.V1.InfoRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return InfoAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall InfoAsync(global::Google.Cloud.SpannerLib.V1.InfoRequest request, grpc::CallOptions options) + { + return CallInvoker.AsyncUnaryCall(__Method_Info, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.SpannerLib.V1.Pool CreatePool(global::Google.Cloud.SpannerLib.V1.CreatePoolRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return CreatePool(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.SpannerLib.V1.Pool CreatePool(global::Google.Cloud.SpannerLib.V1.CreatePoolRequest request, grpc::CallOptions options) + { + return CallInvoker.BlockingUnaryCall(__Method_CreatePool, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall CreatePoolAsync(global::Google.Cloud.SpannerLib.V1.CreatePoolRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return CreatePoolAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall CreatePoolAsync(global::Google.Cloud.SpannerLib.V1.CreatePoolRequest request, grpc::CallOptions options) + { + return CallInvoker.AsyncUnaryCall(__Method_CreatePool, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Protobuf.WellKnownTypes.Empty ClosePool(global::Google.Cloud.SpannerLib.V1.Pool request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return ClosePool(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Protobuf.WellKnownTypes.Empty ClosePool(global::Google.Cloud.SpannerLib.V1.Pool request, grpc::CallOptions options) + { + return CallInvoker.BlockingUnaryCall(__Method_ClosePool, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall ClosePoolAsync(global::Google.Cloud.SpannerLib.V1.Pool request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return ClosePoolAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall ClosePoolAsync(global::Google.Cloud.SpannerLib.V1.Pool request, grpc::CallOptions options) + { + return CallInvoker.AsyncUnaryCall(__Method_ClosePool, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.SpannerLib.V1.Connection CreateConnection(global::Google.Cloud.SpannerLib.V1.CreateConnectionRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return CreateConnection(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.SpannerLib.V1.Connection CreateConnection(global::Google.Cloud.SpannerLib.V1.CreateConnectionRequest request, grpc::CallOptions options) + { + return CallInvoker.BlockingUnaryCall(__Method_CreateConnection, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall CreateConnectionAsync(global::Google.Cloud.SpannerLib.V1.CreateConnectionRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return CreateConnectionAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall CreateConnectionAsync(global::Google.Cloud.SpannerLib.V1.CreateConnectionRequest request, grpc::CallOptions options) + { + return CallInvoker.AsyncUnaryCall(__Method_CreateConnection, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Protobuf.WellKnownTypes.Empty CloseConnection(global::Google.Cloud.SpannerLib.V1.Connection request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return CloseConnection(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Protobuf.WellKnownTypes.Empty CloseConnection(global::Google.Cloud.SpannerLib.V1.Connection request, grpc::CallOptions options) + { + return CallInvoker.BlockingUnaryCall(__Method_CloseConnection, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall CloseConnectionAsync(global::Google.Cloud.SpannerLib.V1.Connection request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return CloseConnectionAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall CloseConnectionAsync(global::Google.Cloud.SpannerLib.V1.Connection request, grpc::CallOptions options) + { + return CallInvoker.AsyncUnaryCall(__Method_CloseConnection, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.SpannerLib.V1.Rows Execute(global::Google.Cloud.SpannerLib.V1.ExecuteRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return Execute(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.SpannerLib.V1.Rows Execute(global::Google.Cloud.SpannerLib.V1.ExecuteRequest request, grpc::CallOptions options) + { + return CallInvoker.BlockingUnaryCall(__Method_Execute, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall ExecuteAsync(global::Google.Cloud.SpannerLib.V1.ExecuteRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return ExecuteAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall ExecuteAsync(global::Google.Cloud.SpannerLib.V1.ExecuteRequest request, grpc::CallOptions options) + { + return CallInvoker.AsyncUnaryCall(__Method_Execute, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncServerStreamingCall ExecuteStreaming(global::Google.Cloud.SpannerLib.V1.ExecuteRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return ExecuteStreaming(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncServerStreamingCall ExecuteStreaming(global::Google.Cloud.SpannerLib.V1.ExecuteRequest request, grpc::CallOptions options) + { + return CallInvoker.AsyncServerStreamingCall(__Method_ExecuteStreaming, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.Spanner.V1.ExecuteBatchDmlResponse ExecuteBatch(global::Google.Cloud.SpannerLib.V1.ExecuteBatchRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return ExecuteBatch(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.Spanner.V1.ExecuteBatchDmlResponse ExecuteBatch(global::Google.Cloud.SpannerLib.V1.ExecuteBatchRequest request, grpc::CallOptions options) + { + return CallInvoker.BlockingUnaryCall(__Method_ExecuteBatch, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall ExecuteBatchAsync(global::Google.Cloud.SpannerLib.V1.ExecuteBatchRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return ExecuteBatchAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall ExecuteBatchAsync(global::Google.Cloud.SpannerLib.V1.ExecuteBatchRequest request, grpc::CallOptions options) + { + return CallInvoker.AsyncUnaryCall(__Method_ExecuteBatch, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.Spanner.V1.ResultSetMetadata Metadata(global::Google.Cloud.SpannerLib.V1.Rows request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return Metadata(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.Spanner.V1.ResultSetMetadata Metadata(global::Google.Cloud.SpannerLib.V1.Rows request, grpc::CallOptions options) + { + return CallInvoker.BlockingUnaryCall(__Method_Metadata, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall MetadataAsync(global::Google.Cloud.SpannerLib.V1.Rows request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return MetadataAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall MetadataAsync(global::Google.Cloud.SpannerLib.V1.Rows request, grpc::CallOptions options) + { + return CallInvoker.AsyncUnaryCall(__Method_Metadata, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Protobuf.WellKnownTypes.ListValue Next(global::Google.Cloud.SpannerLib.V1.NextRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return Next(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Protobuf.WellKnownTypes.ListValue Next(global::Google.Cloud.SpannerLib.V1.NextRequest request, grpc::CallOptions options) + { + return CallInvoker.BlockingUnaryCall(__Method_Next, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall NextAsync(global::Google.Cloud.SpannerLib.V1.NextRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return NextAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall NextAsync(global::Google.Cloud.SpannerLib.V1.NextRequest request, grpc::CallOptions options) + { + return CallInvoker.AsyncUnaryCall(__Method_Next, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.Spanner.V1.ResultSetStats ResultSetStats(global::Google.Cloud.SpannerLib.V1.Rows request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return ResultSetStats(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.Spanner.V1.ResultSetStats ResultSetStats(global::Google.Cloud.SpannerLib.V1.Rows request, grpc::CallOptions options) + { + return CallInvoker.BlockingUnaryCall(__Method_ResultSetStats, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall ResultSetStatsAsync(global::Google.Cloud.SpannerLib.V1.Rows request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return ResultSetStatsAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall ResultSetStatsAsync(global::Google.Cloud.SpannerLib.V1.Rows request, grpc::CallOptions options) + { + return CallInvoker.AsyncUnaryCall(__Method_ResultSetStats, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Protobuf.WellKnownTypes.Empty CloseRows(global::Google.Cloud.SpannerLib.V1.Rows request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return CloseRows(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Protobuf.WellKnownTypes.Empty CloseRows(global::Google.Cloud.SpannerLib.V1.Rows request, grpc::CallOptions options) + { + return CallInvoker.BlockingUnaryCall(__Method_CloseRows, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall CloseRowsAsync(global::Google.Cloud.SpannerLib.V1.Rows request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return CloseRowsAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall CloseRowsAsync(global::Google.Cloud.SpannerLib.V1.Rows request, grpc::CallOptions options) + { + return CallInvoker.AsyncUnaryCall(__Method_CloseRows, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Protobuf.WellKnownTypes.Empty BeginTransaction(global::Google.Cloud.SpannerLib.V1.BeginTransactionRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return BeginTransaction(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Protobuf.WellKnownTypes.Empty BeginTransaction(global::Google.Cloud.SpannerLib.V1.BeginTransactionRequest request, grpc::CallOptions options) + { + return CallInvoker.BlockingUnaryCall(__Method_BeginTransaction, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall BeginTransactionAsync(global::Google.Cloud.SpannerLib.V1.BeginTransactionRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return BeginTransactionAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall BeginTransactionAsync(global::Google.Cloud.SpannerLib.V1.BeginTransactionRequest request, grpc::CallOptions options) + { + return CallInvoker.AsyncUnaryCall(__Method_BeginTransaction, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.Spanner.V1.CommitResponse Commit(global::Google.Cloud.SpannerLib.V1.Connection request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return Commit(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.Spanner.V1.CommitResponse Commit(global::Google.Cloud.SpannerLib.V1.Connection request, grpc::CallOptions options) + { + return CallInvoker.BlockingUnaryCall(__Method_Commit, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall CommitAsync(global::Google.Cloud.SpannerLib.V1.Connection request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return CommitAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall CommitAsync(global::Google.Cloud.SpannerLib.V1.Connection request, grpc::CallOptions options) + { + return CallInvoker.AsyncUnaryCall(__Method_Commit, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Protobuf.WellKnownTypes.Empty Rollback(global::Google.Cloud.SpannerLib.V1.Connection request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return Rollback(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Protobuf.WellKnownTypes.Empty Rollback(global::Google.Cloud.SpannerLib.V1.Connection request, grpc::CallOptions options) + { + return CallInvoker.BlockingUnaryCall(__Method_Rollback, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall RollbackAsync(global::Google.Cloud.SpannerLib.V1.Connection request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return RollbackAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall RollbackAsync(global::Google.Cloud.SpannerLib.V1.Connection request, grpc::CallOptions options) + { + return CallInvoker.AsyncUnaryCall(__Method_Rollback, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.Spanner.V1.CommitResponse WriteMutations(global::Google.Cloud.SpannerLib.V1.WriteMutationsRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return WriteMutations(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual global::Google.Cloud.Spanner.V1.CommitResponse WriteMutations(global::Google.Cloud.SpannerLib.V1.WriteMutationsRequest request, grpc::CallOptions options) + { + return CallInvoker.BlockingUnaryCall(__Method_WriteMutations, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall WriteMutationsAsync(global::Google.Cloud.SpannerLib.V1.WriteMutationsRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return WriteMutationsAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncUnaryCall WriteMutationsAsync(global::Google.Cloud.SpannerLib.V1.WriteMutationsRequest request, grpc::CallOptions options) + { + return CallInvoker.AsyncUnaryCall(__Method_WriteMutations, null, options, request); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncDuplexStreamingCall ConnectionStream(grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) + { + return ConnectionStream(new grpc::CallOptions(headers, deadline, cancellationToken)); + } + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + public virtual grpc::AsyncDuplexStreamingCall ConnectionStream(grpc::CallOptions options) + { + return CallInvoker.AsyncDuplexStreamingCall(__Method_ConnectionStream, null, options); + } + /// Creates a new instance of client from given ClientBaseConfiguration. + [global::System.CodeDom.Compiler.GeneratedCode("grpc_csharp_plugin", null)] + protected override SpannerLibClient NewInstance(ClientBaseConfiguration configuration) + { + return new SpannerLibClient(configuration); + } + } + + } +} +#endregion diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-v1/spannerlib-dotnet-grpc-v1.csproj b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-v1/spannerlib-dotnet-grpc-v1.csproj new file mode 100644 index 00000000..3141df11 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-v1/spannerlib-dotnet-grpc-v1.csproj @@ -0,0 +1,15 @@ + + + + netstandard2.1 + Google.Cloud.SpannerLib.V1 + enable + default + + + + + + + + diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/MockSpannerServer.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/MockSpannerServer.cs index 269c77ab..28118fdf 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/MockSpannerServer.cs +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/MockSpannerServer.cs @@ -795,4 +795,10 @@ public override Task DropDatabase(DropDatabaseRequest request, ServerCall _requests.Enqueue(request); return Task.FromResult(new Empty()); } + + public void Reset() + { + _requests.Clear(); + } + } \ No newline at end of file diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/SpannerConverter.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/SpannerConverter.cs index cbb3096c..9b64ffab 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/SpannerConverter.cs +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-mockserver/SpannerConverter.cs @@ -61,10 +61,18 @@ internal static Value ToProtobufValue(Spanner.V1.Type type, object? value) .ToString(InvariantCulture) }; case TypeCode.Float32: + if (value is float float32) + { + return new Value { NumberValue = float32 }; + } return new Value { NumberValue = Convert.ToSingle(value, InvariantCulture) }; case TypeCode.Float64: return new Value { NumberValue = Convert.ToDouble(value, InvariantCulture) }; case TypeCode.Timestamp: + if (value is string value1) + { + return Value.ForString(value1); + } return new Value { StringValue = XmlConvert.ToString(Convert.ToDateTime(value, InvariantCulture), XmlDateTimeSerializationMode.Utc) @@ -100,7 +108,7 @@ internal static Value ToProtobufValue(Spanner.V1.Type type, object? value) } if (value is string str) { - return Value.ForString(SpannerNumeric.Parse(str).ToString()); + return Value.ForString(str); } if (value is float || value is double || value is decimal) { @@ -122,6 +130,8 @@ internal static Value ToProtobufValue(Spanner.V1.Type type, object? value) return Value.ForString(numericValue.ToString()); } throw new ArgumentException("Numeric parameters must be of type SpannerNumeric or string"); + case TypeCode.Uuid: + return Value.ForString(value.ToString()); default: throw new ArgumentOutOfRangeException(nameof(type.Code), type.Code, null); diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native-impl/SharedLibSpanner.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native-impl/SharedLibSpanner.cs index 1a94c318..431d1774 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native-impl/SharedLibSpanner.cs +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native-impl/SharedLibSpanner.cs @@ -13,6 +13,7 @@ // limitations under the License. using System; +using System.Threading; using System.Threading.Tasks; using Google.Cloud.Spanner.V1; using Google.Protobuf; @@ -115,9 +116,9 @@ public Rows Execute(Connection connection, ExecuteSqlRequest statement) return new Rows(connection, handler.ObjectId()); } - public Task ExecuteAsync(Connection connection, ExecuteSqlRequest statement) + public Task ExecuteAsync(Connection connection, ExecuteSqlRequest statement, CancellationToken cancellationToken) { - return Task.Run(() => Execute(connection, statement)); + return Task.Run(() => Execute(connection, statement), cancellationToken); } public long[] ExecuteBatch(Connection connection, ExecuteBatchDmlRequest statements) @@ -154,9 +155,9 @@ public long[] ExecuteBatch(Connection connection, ExecuteBatchDmlRequest stateme return result; } - public Task ExecuteBatchAsync(Connection connection, ExecuteBatchDmlRequest statements) + public Task ExecuteBatchAsync(Connection connection, ExecuteBatchDmlRequest statements, CancellationToken cancellationToken = default) { - return Task.Run(() => ExecuteBatch(connection, statements)); + return Task.Run(() => ExecuteBatch(connection, statements), cancellationToken); } public ResultSetMetadata? Metadata(Rows rows) @@ -165,9 +166,9 @@ public Task ExecuteBatchAsync(Connection connection, ExecuteBatchDmlRequ return handler.Length == 0 ? null : ResultSetMetadata.Parser.ParseFrom(handler.Value()); } - public async Task MetadataAsync(Rows rows) + public async Task MetadataAsync(Rows rows, CancellationToken cancellationToken = default) { - return await Task.Run(() => Metadata(rows)); + return await Task.Run(() => Metadata(rows), cancellationToken); } public ResultSetStats? Stats(Rows rows) @@ -182,9 +183,9 @@ public Task ExecuteBatchAsync(Connection connection, ExecuteBatchDmlRequ return handler.Length == 0 ? null : ListValue.Parser.ParseFrom(handler.Value()); } - public async Task NextAsync(Rows rows, int numRows, ISpannerLib.RowEncoding encoding) + public async Task NextAsync(Rows rows, int numRows, ISpannerLib.RowEncoding encoding, CancellationToken cancellationToken = default) { - return await Task.Run(() => Next(rows, numRows, encoding)); + return await Task.Run(() => Next(rows, numRows, encoding), cancellationToken); } public void CloseRows(Rows rows) @@ -192,6 +193,11 @@ public void CloseRows(Rows rows) ExecuteAndReleaseLibraryFunction(() => SpannerLib.CloseRows(rows.SpannerConnection.Pool.Id, rows.SpannerConnection.Id, rows.Id)); } + public Task CloseRowsAsync(Rows rows, CancellationToken cancellationToken = default) + { + return Task.Run(() => CloseRows(rows), cancellationToken); + } + public void BeginTransaction(Connection connection, TransactionOptions transactionOptions) { using var handler = ExecuteLibraryFunction(() => @@ -208,8 +214,18 @@ public void BeginTransaction(Connection connection, TransactionOptions transacti return handler.Length == 0 ? null : CommitResponse.Parser.ParseFrom(handler.Value()); } + public Task CommitAsync(Connection connection, CancellationToken cancellationToken = default) + { + return Task.Run(() => Commit(connection), cancellationToken); + } + public void Rollback(Connection connection) { ExecuteAndReleaseLibraryFunction(() => SpannerLib.Rollback(connection.Pool.Id, connection.Id)); } + + public Task RollbackAsync(Connection connection, CancellationToken cancellationToken = default) + { + return Task.Run(() => Rollback(connection), cancellationToken); + } } diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/AbstractMockServerTests.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/AbstractMockServerTests.cs new file mode 100644 index 00000000..a98b679b --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/AbstractMockServerTests.cs @@ -0,0 +1,66 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using Google.Cloud.SpannerLib.Grpc; +using Google.Cloud.SpannerLib.MockServer; +using Google.Cloud.SpannerLib.Native.Impl; +using NUnit.Framework.Internal; + +namespace Google.Cloud.SpannerLib.Tests; + +public abstract class AbstractMockServerTests +{ + public enum LibType + { + Shared, + Grpc, + GrpcTcp, + } + + protected readonly Dictionary SpannerLibDictionary = new([ + new KeyValuePair(LibType.Shared, new SharedLibSpanner()), + new KeyValuePair(LibType.Grpc, new GrpcLibSpanner()), + new KeyValuePair(LibType.GrpcTcp, new GrpcLibSpanner(addressType: Server.AddressType.Tcp)), + ]); + + protected SpannerMockServerFixture Fixture; + + protected string ConnectionString => $"{Fixture.Host}:{Fixture.Port}/projects/p1/instances/i1/databases/d1;UsePlainText=true"; + + [OneTimeSetUp] + public void Setup() + { + Fixture = new SpannerMockServerFixture(); + Fixture.SpannerMock.AddOrUpdateStatementResult("SELECT 1", StatementResult.CreateSelect1ResultSet()); + } + + [OneTimeTearDown] + public void Teardown() + { + foreach (var spannerLib in SpannerLibDictionary.Values) + { + spannerLib.Dispose(); + } + Fixture.Dispose(); + } + + [TearDown] + public void Reset() + { + Fixture.SpannerMock.Reset(); + Fixture.DatabaseAdminMock.Reset(); + Fixture.SpannerMock.AddOrUpdateStatementResult("SELECT 1", StatementResult.CreateSelect1ResultSet()); + } + +} \ No newline at end of file diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/BasicTests.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/BasicTests.cs index 687746f2..81358026 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/BasicTests.cs +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/BasicTests.cs @@ -24,46 +24,28 @@ namespace Google.Cloud.SpannerLib.Tests; -public class BasicTests +public class BasicTests : AbstractMockServerTests { - private readonly ISpannerLib _spannerLib = new SharedLibSpanner(); - - private SpannerMockServerFixture _fixture; - - private string ConnectionString => $"{_fixture.Host}:{_fixture.Port}/projects/p1/instances/i1/databases/d1;UsePlainText=true"; - - [SetUp] - public void Setup() - { - _fixture = new SpannerMockServerFixture(); - _fixture.SpannerMock.AddOrUpdateStatementResult("SELECT 1", StatementResult.CreateSelect1ResultSet()); - } - - [TearDown] - public void Teardown() - { - _fixture.Dispose(); - } [Test] - public void TestCreatePool() + public void TestCreatePool([Values] LibType libType) { - var pool = Pool.Create(_spannerLib, ConnectionString); + var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); pool.Close(); } [Test] - public void TestCreateConnection() + public void TestCreateConnection([Values] LibType libType) { - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); var connection = pool.CreateConnection(); connection.Close(); } [Test] - public void TestExecuteQuery() + public void TestExecuteQuery([Values] LibType libType) { - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); using var rows = connection.Execute(new ExecuteSqlRequest { Sql = "SELECT 1" }); for (var row = rows.Next(); row != null; row = rows.Next()) @@ -75,12 +57,12 @@ public void TestExecuteQuery() } [Test] - public void TestExecuteQueryError() + public void TestExecuteQueryError([Values] LibType libType) { var sql = "select * from non_existing_table"; - _fixture.SpannerMock.AddOrUpdateStatementResult(sql, StatementResult.CreateException(new RpcException(new Status(StatusCode.NotFound, "Table not found")))); + Fixture.SpannerMock.AddOrUpdateStatementResult(sql, StatementResult.CreateException(new RpcException(new Status(StatusCode.NotFound, "Table not found")))); - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); SpannerException exception = Assert.Throws(() => connection.Execute(new ExecuteSqlRequest { Sql = sql })); Assert.That(exception.Code, Is.EqualTo(Code.NotFound)); @@ -88,15 +70,15 @@ public void TestExecuteQueryError() } [Test] - public void TestExecuteParameterizedQuery() + public void TestExecuteParameterizedQuery([Values] LibType libType) { var sql = "select col_varchar from all_types where col_bigint=$1::bigint"; - _fixture.SpannerMock.AddOrUpdateStatementResult(sql, + Fixture.SpannerMock.AddOrUpdateStatementResult(sql, StatementResult.CreateSingleColumnResultSet( new Spanner.V1.Type { Code = TypeCode.String }, "col_varchar", "some-value")); - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); var parameters = new Struct { @@ -119,15 +101,15 @@ public void TestExecuteParameterizedQuery() } [Test] - public void TestQueryParameterStartingWithUnderscore() + public void TestQueryParameterStartingWithUnderscore([Values] LibType libType) { var sql = "select col_string from all_types where col_int64=@__id"; - _fixture.SpannerMock.AddOrUpdateStatementResult(sql, + Fixture.SpannerMock.AddOrUpdateStatementResult(sql, StatementResult.CreateSingleColumnResultSet( new Spanner.V1.Type { Code = TypeCode.String }, "col_string", "some-value")); - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); var parameters = new Struct { @@ -151,9 +133,9 @@ public void TestQueryParameterStartingWithUnderscore() [Test] [Ignore("execute async disabled for now")] - public async Task TestExecuteQueryAsync() + public async Task TestExecuteQueryAsync([Values] LibType libType) { - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); using var rows = await connection.ExecuteAsync(new ExecuteSqlRequest { Sql = "SELECT 1" }); var metadata = rows.Metadata; @@ -167,9 +149,9 @@ public async Task TestExecuteQueryAsync() } [Test] - public void TestReadOnlyTransaction() + public void TestReadOnlyTransaction([Values] LibType libType) { - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); connection.BeginTransaction(new TransactionOptions { ReadOnly = new TransactionOptions.Types.ReadOnly() }); using var rows = connection.Execute(new ExecuteSqlRequest { Sql = "SELECT 1" }); @@ -184,11 +166,11 @@ public void TestReadOnlyTransaction() } [Test] - public void TestReadWriteTransaction() + public void TestReadWriteTransaction([Values] LibType libType) { var sql = "update table1 set value='one' where id=1"; - _fixture.SpannerMock.AddOrUpdateStatementResult(sql, StatementResult.CreateUpdateCount(1)); - using var pool = Pool.Create(_spannerLib, ConnectionString); + Fixture.SpannerMock.AddOrUpdateStatementResult(sql, StatementResult.CreateUpdateCount(1)); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); connection.BeginTransaction(new TransactionOptions { ReadWrite = new TransactionOptions.Types.ReadWrite() }); using var rows = connection.Execute(new ExecuteSqlRequest { Sql = sql }); @@ -202,7 +184,7 @@ public void TestReadWriteTransaction() public void TestBenchmarkNativeSpannerLib() { var totalRowCount = 1000000; - _fixture.SpannerMock.AddOrUpdateStatementResult( + Fixture.SpannerMock.AddOrUpdateStatementResult( "select * from all_types", StatementResult.CreateResultSet( new List> @@ -236,7 +218,7 @@ public void TestBenchmarkNativeSpannerLib() public void TestBenchmarkDotnetGrpcClient() { var totalRowCount = 1000000; - _fixture.SpannerMock.AddOrUpdateStatementResult( + Fixture.SpannerMock.AddOrUpdateStatementResult( "select * from all_types", StatementResult.CreateResultSet( new List> @@ -251,7 +233,7 @@ public void TestBenchmarkDotnetGrpcClient() var totalValueCount = totalRowCount * 5; var builder = new SpannerClientBuilder { - Endpoint = $"http://{_fixture.Endpoint}", + Endpoint = $"http://{Fixture.Endpoint}", ChannelCredentials = ChannelCredentials.Insecure }; SpannerClient client = builder.Build(); diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/BatchTests.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/BatchTests.cs index e2c95b01..8428e941 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/BatchTests.cs +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/BatchTests.cs @@ -15,38 +15,19 @@ using Google.Cloud.Spanner.Admin.Database.V1; using Google.Cloud.Spanner.V1; using Google.Cloud.SpannerLib.MockServer; -using Google.Cloud.SpannerLib.Native.Impl; using Google.Protobuf.WellKnownTypes; namespace Google.Cloud.SpannerLib.Tests; -public class BatchTests +public class BatchTests : AbstractMockServerTests { - private readonly ISpannerLib _spannerLib = new SharedLibSpanner(); - - private SpannerMockServerFixture _fixture; - - private string ConnectionString => $"{_fixture.Host}:{_fixture.Port}/projects/p1/instances/i1/databases/d1;UsePlainText=true"; - - [SetUp] - public void Setup() - { - _fixture = new SpannerMockServerFixture(); - } - - [TearDown] - public void Teardown() - { - _fixture.Dispose(); - } - [Test] - public void TestBatchDml() + public void TestBatchDml([Values] LibType libType) { var insert = "insert into test (id, value) values (@id, @value)"; - _fixture.SpannerMock.AddOrUpdateStatementResult(insert, StatementResult.CreateUpdateCount(1)); + Fixture.SpannerMock.AddOrUpdateStatementResult(insert, StatementResult.CreateUpdateCount(1)); - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); var updateCounts = connection.ExecuteBatch([ new ExecuteBatchDmlRequest.Types.Statement {Sql = insert, Params = new Struct @@ -67,15 +48,15 @@ public void TestBatchDml() }}, ]); Assert.That(updateCounts, Is.EqualTo(new long[]{1,1})); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); } [Test] - public void TestBatchDdl() + public void TestBatchDdl([Values] LibType libType) { // We don't need to set up any results for DDL statements on the mock server. // It automatically responds with an long-running operation that has finished when it receives a DDL request. - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); // The input argument for ExecuteBatch is always a ExecuteBatchDmlRequest, even for DDL statements. var updateCounts = connection.ExecuteBatch([ @@ -83,7 +64,7 @@ public void TestBatchDdl() new ExecuteBatchDmlRequest.Types.Statement {Sql = "create index my_index on my_table (value)"}, ]); Assert.That(updateCounts, Is.EqualTo(new long[]{-1,-1})); - Assert.That(_fixture.DatabaseAdminMock.Requests.OfType().Count(), Is.EqualTo(1)); + Assert.That(Fixture.DatabaseAdminMock.Requests.OfType().Count(), Is.EqualTo(1)); } } \ No newline at end of file diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/BenchmarkTests.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/BenchmarkTests.cs new file mode 100644 index 00000000..74504411 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/BenchmarkTests.cs @@ -0,0 +1,197 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using System.Diagnostics; +using Google.Cloud.Spanner.Data; +using Google.Cloud.Spanner.V1; +using Google.Protobuf.WellKnownTypes; + +namespace Google.Cloud.SpannerLib.Tests; + +public class BenchmarkTests : AbstractMockServerTests +{ + readonly struct Stats + { + public TimeSpan Min { get; init; } + public TimeSpan P50 { get; init; } + public TimeSpan P90 { get; init; } + public TimeSpan P95 { get; init; } + public TimeSpan P99 { get; init; } + public TimeSpan Max { get; init; } + public TimeSpan Avg { get; init; } + + public override string ToString() + { + return $"Min: {Min}{Environment.NewLine}" + + $"P50: {P50}{Environment.NewLine}" + + $"P90: {P90}{Environment.NewLine}" + + $"P95: {P95}{Environment.NewLine}" + + $"P99: {P99}{Environment.NewLine}" + + $"Max: {Max}{Environment.NewLine}" + + $"Avg: {Avg}{Environment.NewLine}"; + } + } + + [Test, Sequential] + [Ignore("for local testing")] + public async Task TestBenchmarkRealSpanner([Values] LibType? libType, [Values(false, false, false, true)] bool clientLib) + { + const string connectionString = "projects/appdev-soda-spanner-staging/instances/knut-test-ycsb/databases/knut-test-db"; + const int numTasks = 2000; + object connector; + + if (clientLib) + { + connector = $"Data Source={connectionString}"; + } + else + { + var pool = Pool.Create(SpannerLibDictionary[libType!.Value], connectionString); + connector = pool; + } + + // Warmup + var warmupDuration = await ReadRandomRows(connector, 10); + Console.WriteLine($"Warmup Duration: {warmupDuration}"); + + for (var i = 0; i < 10; i++) + { + var numRows = (i + 1) * 10; + var duration = await ReadRandomRows(connector, numRows); + Console.WriteLine($"Duration ({numRows}): {duration}"); + } + + var stopwatch = Stopwatch.StartNew(); + var tasks = new Task[numTasks]; + for (var i = 0; i < numTasks; i++) + { + tasks[i] = ReadRandomRows(connector, 10); + } + + await Task.WhenAll(tasks); + var durations = new TimeSpan[numTasks]; + for (var i = 0; i < numTasks; i++) + { + durations[i] = tasks[i].Result; + } + var totalDuration = stopwatch.Elapsed; + + var stats = CalculateStats(durations); + Console.WriteLine(); + Console.WriteLine($"Num tasks: {numTasks}"); + Console.WriteLine($"{stats}"); + ThreadPool.GetMaxThreads(out var workerThreads, out _); + Console.WriteLine($"Max threads: {workerThreads}"); + Console.WriteLine($"Total time: {totalDuration}"); + + if (connector is IDisposable disposable) + { + disposable.Dispose(); + } + } + + static Stats CalculateStats(TimeSpan[] durations) + { + var ordered = durations.Order().ToArray(); + var stats = new Stats + { + Min = ordered[0], + P50 = ordered[ordered.Length * 50 / 100], + P90 = ordered[ordered.Length * 90 / 100], + P95 = ordered[ordered.Length * 95 / 100], + P99 = ordered[ordered.Length * 99 / 100], + Max = ordered[^1], + Avg = TimeSpan.FromTicks((long) ordered.Average(duration => duration.Ticks)) + }; + return stats; + } + + static Task ReadRandomRows(object connector, int maxRows) + { + if (connector is Pool pool) + { + return ReadRandomRows(pool, maxRows); + } + if (connector is string connString) + { + return ReadRandomRows(connString, maxRows); + } + throw new NotSupportedException(); + } + + static async Task ReadRandomRows(Pool pool, int maxRows) + { + // Add the randomly selected identifiers to a set to ensure that we know exactly how many rows will be returned, + // as the random selection of identifiers could contain duplicates. + var set = new HashSet(); + var list = Value.ForList(); + list.ListValue.Values.Capacity = maxRows; + for (var c = 0; c < maxRows; c++) + { + var id = Random.Shared.Next(1, 1_000_001); + set.Add(id); + list.ListValue.Values.Add(Value.ForString($"{id}")); + } + await using var connection = pool.CreateConnection(); + + var stopwatch = Stopwatch.StartNew(); + var request = new ExecuteSqlRequest + { + Sql = "select * from all_types where col_bigint = any($1)", + Params = new Struct { Fields = { ["p1"] = list } }, + }; + var count = 0; + await using var rows = await connection.ExecuteAsync(request); + while (await rows.NextAsync() is { } row) + { + Assert.That(row.Values.Count, Is.EqualTo(10)); + count++; + } + Assert.That(count, Is.EqualTo(set.Count)); + + return stopwatch.Elapsed; + } + + static async Task ReadRandomRows(string connectionString, int maxRows) + { + var set = new HashSet(); + var list = new List + { + Capacity = maxRows + }; + for (var c = 0; c < maxRows; c++) + { + var id = Random.Shared.Next(1, 1_000_001); + set.Add(id); + list.Add(id); + } + await using var connection = new SpannerConnection(connectionString); + + var stopwatch = Stopwatch.StartNew(); + await using var cmd = connection.CreateSelectCommand( + "select * from all_types where col_bigint = any($1)", + new SpannerParameterCollection {{"p1", SpannerDbType.ArrayOf(SpannerDbType.Int64), list}} + ); + var count = 0; + await using var rows = await cmd.ExecuteReaderAsync(); + while (await rows.ReadAsync()) + { + Assert.That(rows.FieldCount, Is.EqualTo(10)); + count++; + } + Assert.That(count, Is.EqualTo(set.Count)); + + return stopwatch.Elapsed; + } +} \ No newline at end of file diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/ConnectionTests.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/ConnectionTests.cs index 1f4e88ea..b6bc88ad 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/ConnectionTests.cs +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/ConnectionTests.cs @@ -13,47 +13,27 @@ // limitations under the License. using Google.Cloud.Spanner.V1; -using Google.Cloud.SpannerLib.MockServer; -using Google.Cloud.SpannerLib.Native.Impl; using Google.Protobuf.WellKnownTypes; using Google.Rpc; namespace Google.Cloud.SpannerLib.Tests; -public class ConnectionTests +public class ConnectionTests : AbstractMockServerTests { - private readonly ISpannerLib _spannerLib = new SharedLibSpanner(); - - private SpannerMockServerFixture _fixture; - - private string ConnectionString => $"{_fixture.Host}:{_fixture.Port}/projects/p1/instances/i1/databases/d1;UsePlainText=true"; - - [SetUp] - public void Setup() - { - _fixture = new SpannerMockServerFixture(); - } - - [TearDown] - public void Teardown() - { - _fixture.Dispose(); - } - [Test] - public void TestCreateConnection() + public void TestCreateConnection([Values] LibType libType) { - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); Assert.That(connection, Is.Not.Null); Assert.That(connection.Id, Is.GreaterThan(0)); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); } [Test] - public void TestCreateTwoConnections() + public void TestCreateTwoConnections([Values] LibType libType) { - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection1 = pool.CreateConnection(); using var connection2 = pool.CreateConnection(); Assert.That(connection1, Is.Not.Null); @@ -61,13 +41,13 @@ public void TestCreateTwoConnections() Assert.That(connection1.Id, Is.GreaterThan(0)); Assert.That(connection2.Id, Is.GreaterThan(0)); Assert.That(connection1.Id, Is.Not.EqualTo(connection2.Id)); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); } [Test] - public void TestWriteMutations() + public void TestWriteMutations([Values] LibType libType) { - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); var insertMutation = new Mutation { @@ -99,9 +79,9 @@ public void TestWriteMutations() }); Assert.That(response, Is.Not.Null); Assert.That(response.CommitTimestamp, Is.Not.Null); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); - var commit = _fixture.SpannerMock.Requests.OfType().Single(); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + var commit = Fixture.SpannerMock.Requests.OfType().Single(); Assert.That(commit, Is.Not.Null); Assert.That(commit.Mutations.Count, Is.EqualTo(2)); Assert.That(commit.Mutations[0].Insert.Values.Count, Is.EqualTo(2)); @@ -109,9 +89,9 @@ public void TestWriteMutations() } [Test] - public void TestWriteMutationsInTransaction() + public void TestWriteMutationsInTransaction([Values] LibType libType) { - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); connection.BeginTransaction(new TransactionOptions()); @@ -136,18 +116,18 @@ public void TestWriteMutationsInTransaction() response = connection.Commit(); Assert.That(response, Is.Not.Null); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); - var commit = _fixture.SpannerMock.Requests.OfType().Single(); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + var commit = Fixture.SpannerMock.Requests.OfType().Single(); Assert.That(commit, Is.Not.Null); Assert.That(commit.Mutations.Count, Is.EqualTo(1)); Assert.That(commit.Mutations[0].Insert.Values.Count, Is.EqualTo(1)); } [Test] - public void TestWriteMutationsInReadOnlyTransaction() + public void TestWriteMutationsInReadOnlyTransaction([Values] LibType libType) { - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); connection.BeginTransaction(new TransactionOptions{ReadOnly = new TransactionOptions.Types.ReadOnly()}); diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/PoolTests.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/PoolTests.cs index 314770c2..c33ffdbb 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/PoolTests.cs +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/PoolTests.cs @@ -14,48 +14,29 @@ using Google.Cloud.Spanner.V1; using Google.Cloud.SpannerLib.MockServer; -using Google.Cloud.SpannerLib.Native.Impl; using Google.Rpc; using Grpc.Core; namespace Google.Cloud.SpannerLib.Tests; -public class PoolTests +public class PoolTests : AbstractMockServerTests { - private readonly ISpannerLib _spannerLib = new SharedLibSpanner(); - - private SpannerMockServerFixture _fixture; - - private string ConnectionString => $"{_fixture.Host}:{_fixture.Port}/projects/p1/instances/i1/databases/d1;UsePlainText=true"; - - [SetUp] - public void Setup() - { - _fixture = new SpannerMockServerFixture(); - } - - [TearDown] - public void Teardown() - { - _fixture.Dispose(); - } - [Test] - public void TestCreatePool() + public void TestCreatePool([Values] LibType libType) { - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); Assert.That(pool, Is.Not.Null); Assert.That(pool.Id, Is.GreaterThan(0)); // Creating a pool should create the underlying client and a multiplexed session. - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); } [Test] - public void TestCreatePoolFails() + public void TestCreatePoolFails([Values] LibType libType) { - _fixture.SpannerMock.AddOrUpdateExecutionTime(nameof(_fixture.SpannerMock.CreateSession), ExecutionTime.CreateException(StatusCode.PermissionDenied, "Not allowed")); + Fixture.SpannerMock.AddOrUpdateExecutionTime(nameof(Fixture.SpannerMock.CreateSession), ExecutionTime.CreateException(StatusCode.PermissionDenied, "Not allowed")); - SpannerException exception = Assert.Throws(() => Pool.Create(_spannerLib, ConnectionString)); + SpannerException exception = Assert.Throws(() => Pool.Create(SpannerLibDictionary[libType], ConnectionString)); Assert.That(exception.Code, Is.EqualTo(Code.PermissionDenied)); } diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/RowsTests.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/RowsTests.cs index e45fb226..a4d0d253 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/RowsTests.cs +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/RowsTests.cs @@ -15,35 +15,17 @@ using Google.Cloud.Spanner.Admin.Database.V1; using Google.Cloud.Spanner.V1; using Google.Cloud.SpannerLib.MockServer; -using Google.Cloud.SpannerLib.Native.Impl; +using Google.Rpc; +using TypeCode = Google.Cloud.Spanner.V1.TypeCode; namespace Google.Cloud.SpannerLib.Tests; -public class RowsTests +public class RowsTests : AbstractMockServerTests { - private readonly ISpannerLib _spannerLib = new SharedLibSpanner(); - - private SpannerMockServerFixture _fixture; - - private string ConnectionString => $"{_fixture.Host}:{_fixture.Port}/projects/p1/instances/i1/databases/d1;UsePlainText=true"; - - [SetUp] - public void Setup() - { - _fixture = new SpannerMockServerFixture(); - _fixture.SpannerMock.AddOrUpdateStatementResult("SELECT 1", StatementResult.CreateSelect1ResultSet()); - } - - [TearDown] - public void Teardown() - { - _fixture.Dispose(); - } - [Test] - public void TestExecuteSelect1() + public void TestExecuteSelect1([Values] LibType libType) { - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); using var rows = connection.Execute(new ExecuteSqlRequest { Sql = "SELECT 1" }); var numRows = 0; @@ -58,14 +40,28 @@ public void TestExecuteSelect1() } [Test] - public void TestRandomResults() + public void TestEmptyResults([Values] LibType libType) + { + var sql = "select * from (select 1) where false"; + Fixture.SpannerMock.AddOrUpdateStatementResult(sql, StatementResult.CreateSingleColumnResultSet(new Spanner.V1.Type{Code = TypeCode.Int64}, "c")); + + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); + using var connection = pool.CreateConnection(); + using var rows = connection.Execute(new ExecuteSqlRequest { Sql = sql }); + Assert.That(rows.Metadata, Is.Not.Null); + Assert.That(rows.Metadata.RowType.Fields.Count, Is.EqualTo(1)); + Assert.That(rows.Next(), Is.Null); + } + + [Test] + public void TestRandomResults([Values] LibType libType) { var numRows = 10; var rowType = RandomResultSetGenerator.GenerateAllTypesRowType(); var results = RandomResultSetGenerator.Generate(rowType, numRows); - _fixture.SpannerMock.AddOrUpdateStatementResult("select * from random", StatementResult.CreateQuery(results)); + Fixture.SpannerMock.AddOrUpdateStatementResult("select * from random", StatementResult.CreateQuery(results)); - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); using var rows = connection.Execute(new ExecuteSqlRequest { Sql = "select * from random" }); @@ -77,48 +73,118 @@ public void TestRandomResults() } Assert.That(rowCount, Is.EqualTo(numRows)); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); - var request = _fixture.SpannerMock.Requests.OfType().First(); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + var request = Fixture.SpannerMock.Requests.OfType().First(); + Assert.That(request.Transaction?.SingleUse?.ReadOnly?.HasStrong ?? false); + } + + [Test] + public void TestStopHalfway([Values] LibType libType) + { + var numRows = 10; + var rowType = RandomResultSetGenerator.GenerateAllTypesRowType(); + var results = RandomResultSetGenerator.Generate(rowType, numRows); + Fixture.SpannerMock.AddOrUpdateStatementResult("select * from random", StatementResult.CreateQuery(results)); + var stopAfterRows = Random.Shared.Next(1, numRows - 1); + + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); + using var connection = pool.CreateConnection(); + using var rows = connection.Execute(new ExecuteSqlRequest { Sql = "select * from random" }); + Assert.That(rows.Metadata, Is.Not.Null); + Assert.That(rows.Metadata.RowType.Fields.Count, Is.EqualTo(rowType.Fields.Count)); + + var rowCount = 0; + while (rows.Next() is { } row) + { + rowCount++; + Assert.That(row.Values.Count, Is.EqualTo(rowType.Fields.Count)); + if (rowCount == stopAfterRows) + { + break; + } + } + + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + var request = Fixture.SpannerMock.Requests.OfType().First(); Assert.That(request.Transaction?.SingleUse?.ReadOnly?.HasStrong ?? false); } [Test] - public void TestExecuteDml() + public void TestCloseConnectionWithOpenRows([Values] LibType libType) + { + var numRows = 5000; + var rowType = RandomResultSetGenerator.GenerateAllTypesRowType(); + var results = RandomResultSetGenerator.Generate(rowType, numRows); + Fixture.SpannerMock.AddOrUpdateStatementResult("select * from random", StatementResult.CreateQuery(results)); + + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); + using var connection = pool.CreateConnection(); + using var rows = connection.Execute(new ExecuteSqlRequest { Sql = "select * from random" }); + + // Verify that we can fetch the first row. + Assert.That(rows.Next(), Is.Not.Null); + // Close the connection while the rows object is still open. + connection.Close(); + // Getting all the rows should not be possible. + // If the underlying Rows object uses a stream, then it could be that it still receives some rows, but it will + // eventually fail. + var exception = Assert.Throws(() => + { + while (rows.Next() is not null) + { + } + }); + // The error is 'Connection not found' or an internal exception from the underlying driver, depending on exactly + // when the driver detects that the connection and all related objects have been closed. + Assert.That(exception.Code is Code.NotFound or Code.Unknown, Is.True); + + if (libType == LibType.Shared) + { + // TODO: Remove this once it has been fixed in the shared library. + // Closing a Rows object that has already been closed because the connection has been closed, should + // be a no-op. + var closeException = Assert.Throws(() => rows.Close()); + Assert.That(closeException.Code, Is.EqualTo(Code.NotFound)); + } + } + + [Test] + public void TestExecuteDml([Values] LibType libType) { var sql = "update my_table set value=1 where id=2"; - _fixture.SpannerMock.AddOrUpdateStatementResult(sql, StatementResult.CreateUpdateCount(1L)); + Fixture.SpannerMock.AddOrUpdateStatementResult(sql, StatementResult.CreateUpdateCount(1L)); - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); using var rows = connection.Execute(new ExecuteSqlRequest { Sql = sql }); Assert.That(rows.Next(), Is.Null); Assert.That(rows.UpdateCount, Is.EqualTo(1L)); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); - var request = _fixture.SpannerMock.Requests.OfType().First(); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + var request = Fixture.SpannerMock.Requests.OfType().First(); Assert.That(request.Transaction?.Begin?.ReadWrite, Is.Not.Null); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); } [Test] - public void TestExecuteDdl() + public void TestExecuteDdl([Values] LibType libType) { // The mock DatabaseAdmin server always responds with a finished operation when // UpdateDatabaseDdl is called, so we don't need to set up any results. - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); using var rows = connection.Execute(new ExecuteSqlRequest { Sql = "create my_table (id int64 primary key)" }); Assert.That(rows.Next(), Is.Null); Assert.That(rows.UpdateCount, Is.EqualTo(-1L)); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); - Assert.That(_fixture.DatabaseAdminMock.Requests.OfType().Count(), Is.EqualTo(1)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); + Assert.That(Fixture.DatabaseAdminMock.Requests.OfType().Count(), Is.EqualTo(1)); } [Test] - public void TestExecuteClientSideStatement() + public void TestExecuteClientSideStatement([Values] LibType libType) { - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); using (var rows = connection.Execute(new ExecuteSqlRequest { Sql = "show variable retry_aborts_internally" })) { diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/TransactionTests.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/TransactionTests.cs index 17a0aa55..2158d3d7 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/TransactionTests.cs +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/TransactionTests.cs @@ -14,65 +14,46 @@ using Google.Cloud.Spanner.V1; using Google.Cloud.SpannerLib.MockServer; -using Google.Cloud.SpannerLib.Native.Impl; using Google.Protobuf.WellKnownTypes; using Google.Rpc; namespace Google.Cloud.SpannerLib.Tests; -public class TransactionTests +public class TransactionTests : AbstractMockServerTests { - private readonly ISpannerLib _spannerLib = new SharedLibSpanner(); - - private SpannerMockServerFixture _fixture; - - private string ConnectionString => $"{_fixture.Host}:{_fixture.Port}/projects/p1/instances/i1/databases/d1;UsePlainText=true"; - - [SetUp] - public void Setup() - { - _fixture = new SpannerMockServerFixture(); - } - - [TearDown] - public void Teardown() - { - _fixture.Dispose(); - } - [Test] - public void TestBeginAndCommit() + public void TestBeginAndCommit([Values] LibType libType) { - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); connection.BeginTransaction(new TransactionOptions()); connection.Commit(); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); } [Test] - public void TestBeginAndRollback() + public void TestBeginAndRollback([Values] LibType libType) { - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); connection.BeginTransaction(new TransactionOptions()); connection.Rollback(); // An empty transaction that is rolled back should be a no-op. - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); } [Test] - public void TestReadWriteTransaction() + public void TestReadWriteTransaction([Values] LibType libType) { var updateSql = "update my_table set value=@value where id=@id"; - _fixture.SpannerMock.AddOrUpdateStatementResult(updateSql, StatementResult.CreateUpdateCount(1)); + Fixture.SpannerMock.AddOrUpdateStatementResult(updateSql, StatementResult.CreateUpdateCount(1)); - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); connection.BeginTransaction(new TransactionOptions()); @@ -97,22 +78,22 @@ public void TestReadWriteTransaction() // There should be no BeginTransaction requests, as the transaction start is inlined with the // first statement. - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); - var request = _fixture.SpannerMock.Requests.OfType().Single(); + var request = Fixture.SpannerMock.Requests.OfType().Single(); Assert.That(request.Transaction?.Begin?.ReadWrite, Is.Not.Null); } [Test] - public void TestReadOnlyTransaction() + public void TestReadOnlyTransaction([Values] LibType libType) { var numRows = 5; var sql = "select * from random"; - _fixture.SpannerMock.AddOrUpdateStatementResult(sql, StatementResult.CreateQuery(RandomResultSetGenerator.Generate(numRows))); + Fixture.SpannerMock.AddOrUpdateStatementResult(sql, StatementResult.CreateQuery(RandomResultSetGenerator.Generate(numRows))); - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); connection.BeginTransaction(new TransactionOptions { @@ -134,18 +115,18 @@ public void TestReadOnlyTransaction() // There should be no BeginTransaction requests, as the transaction start is inlined with the // first statement. - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); - Assert.That(_fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(1)); + Assert.That(Fixture.SpannerMock.Requests.OfType().Count(), Is.EqualTo(0)); - var request = _fixture.SpannerMock.Requests.OfType().Single(); + var request = Fixture.SpannerMock.Requests.OfType().Single(); Assert.That(request.Transaction?.Begin?.ReadOnly, Is.Not.Null); } [Test] - public void TestBeginTwice() + public void TestBeginTwice([Values] LibType libType) { - using var pool = Pool.Create(_spannerLib, ConnectionString); + using var pool = Pool.Create(SpannerLibDictionary[libType], ConnectionString); using var connection = pool.CreateConnection(); // Try to start two transactions on a connection. connection.BeginTransaction(new TransactionOptions()); diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/spannerlib-dotnet-tests.csproj b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/spannerlib-dotnet-tests.csproj index 7ff1583e..0fb199a0 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/spannerlib-dotnet-tests.csproj +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests/spannerlib-dotnet-tests.csproj @@ -11,6 +11,7 @@ + @@ -22,6 +23,7 @@ + diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet.sln b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet.sln index 9c030840..c12c60ca 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet.sln +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet.sln @@ -10,6 +10,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "spannerlib-dotnet-tests", " EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "spannerlib-dotnet-mockserver", "spannerlib-dotnet-mockserver\spannerlib-dotnet-mockserver.csproj", "{218C7FF7-84C7-4415-ABF8-69C5D7FCB6D9}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "spannerlib-dotnet-grpc-server", "spannerlib-dotnet-grpc-server\spannerlib-dotnet-grpc-server.csproj", "{331CF599-8892-46E5-81A3-25793A6BABA8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "spannerlib-dotnet-grpc-tests", "spannerlib-dotnet-grpc-tests\spannerlib-dotnet-grpc-tests.csproj", "{4B345CB2-82D5-41BC-80FD-D7EC8E8BF679}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "spannerlib-dotnet-grpc-impl", "spannerlib-dotnet-grpc-impl\spannerlib-dotnet-grpc-impl.csproj", "{60403079-D584-4CB9-AAB7-7AC7FF39BEBE}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "spannerlib-dotnet-grpc-v1", "spannerlib-dotnet-grpc-v1\spannerlib-dotnet-grpc-v1.csproj", "{C2538D0C-6544-4B44-88A7-02517B786FFD}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -36,5 +44,21 @@ Global {218C7FF7-84C7-4415-ABF8-69C5D7FCB6D9}.Debug|Any CPU.Build.0 = Debug|Any CPU {218C7FF7-84C7-4415-ABF8-69C5D7FCB6D9}.Release|Any CPU.ActiveCfg = Release|Any CPU {218C7FF7-84C7-4415-ABF8-69C5D7FCB6D9}.Release|Any CPU.Build.0 = Release|Any CPU + {331CF599-8892-46E5-81A3-25793A6BABA8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {331CF599-8892-46E5-81A3-25793A6BABA8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {331CF599-8892-46E5-81A3-25793A6BABA8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {331CF599-8892-46E5-81A3-25793A6BABA8}.Release|Any CPU.Build.0 = Release|Any CPU + {4B345CB2-82D5-41BC-80FD-D7EC8E8BF679}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4B345CB2-82D5-41BC-80FD-D7EC8E8BF679}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4B345CB2-82D5-41BC-80FD-D7EC8E8BF679}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4B345CB2-82D5-41BC-80FD-D7EC8E8BF679}.Release|Any CPU.Build.0 = Release|Any CPU + {60403079-D584-4CB9-AAB7-7AC7FF39BEBE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {60403079-D584-4CB9-AAB7-7AC7FF39BEBE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {60403079-D584-4CB9-AAB7-7AC7FF39BEBE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {60403079-D584-4CB9-AAB7-7AC7FF39BEBE}.Release|Any CPU.Build.0 = Release|Any CPU + {C2538D0C-6544-4B44-88A7-02517B786FFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C2538D0C-6544-4B44-88A7-02517B786FFD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C2538D0C-6544-4B44-88A7-02517B786FFD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C2538D0C-6544-4B44-88A7-02517B786FFD}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection EndGlobal diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/AbstractLibObject.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/AbstractLibObject.cs index a40850ae..7de9a28d 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/AbstractLibObject.cs +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/AbstractLibObject.cs @@ -13,6 +13,7 @@ // limitations under the License. using System; +using System.Threading.Tasks; namespace Google.Cloud.SpannerLib; @@ -20,7 +21,7 @@ namespace Google.Cloud.SpannerLib; /// This is the base class for all objects that are created by SpannerLib. It implements IDisposable and automatically /// closes the object in SpannerLib when the object is either being closed, disposed, or finalized. /// -public abstract class AbstractLibObject : IDisposable +public abstract class AbstractLibObject : IDisposable, IAsyncDisposable { internal ISpannerLib Spanner { get; } public long Id { get; } @@ -56,7 +57,13 @@ public void Dispose() Dispose(true); GC.SuppressFinalize(this); } - + + public async ValueTask DisposeAsync() + { + await DisposeAsyncCore().ConfigureAwait(false); + GC.SuppressFinalize(this); + } + public void Close() { Dispose(true); @@ -81,10 +88,35 @@ protected virtual void Dispose(bool disposing) _disposed = true; } } + + protected virtual async ValueTask DisposeAsyncCore() + { + if (_disposed) + { + return; + } + try + { + if (Id > 0) + { + await CloseLibObjectAsync(); + } + } + finally + { + _disposed = true; + } + } /// /// CloseLibObject should be implemented by concrete subclasses and call the corresponding Close function in /// SpannerLib. /// protected abstract void CloseLibObject(); + + protected virtual ValueTask CloseLibObjectAsync() + { + CloseLibObject(); + return default; + } } \ No newline at end of file diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/Connection.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/Connection.cs index e3abaad1..1ef9943a 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/Connection.cs +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/Connection.cs @@ -13,6 +13,7 @@ // limitations under the License. using System.Collections.Generic; +using System.Threading; using System.Threading.Tasks; using Google.Cloud.Spanner.V1; @@ -54,6 +55,11 @@ public void BeginTransaction(TransactionOptions transactionOptions) return Spanner.Commit(this); } + public Task CommitAsync(CancellationToken cancellationToken = default) + { + return Spanner.CommitAsync(this, cancellationToken); + } + /// /// Rollbacks the current transaction. /// @@ -62,6 +68,11 @@ public void Rollback() Spanner.Rollback(this); } + public Task RollbackAsync(CancellationToken cancellationToken = default) + { + return Spanner.RollbackAsync(this, cancellationToken); + } + /// /// Writes the given list of mutations to Spanner. If the connection has an active read/write transaction, then the /// mutations will be buffered in the current transaction and sent to Spanner when the transaction is committed. @@ -139,4 +150,9 @@ protected override void CloseLibObject() { Spanner.CloseConnection(this); } + + protected override async ValueTask CloseLibObjectAsync() + { + await Spanner.CloseConnectionAsync(this); + } } diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/ISpannerLib.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/ISpannerLib.cs index c91086ae..5dfd8e48 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/ISpannerLib.cs +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/ISpannerLib.cs @@ -12,6 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. +using System; +using System.Threading; using System.Threading.Tasks; using Google.Cloud.Spanner.V1; using Google.Protobuf.WellKnownTypes; @@ -24,7 +26,7 @@ namespace Google.Cloud.SpannerLib; /// it as a child process and communicating with it through a gRPC API. The classes in this assembly use this generic /// interface to abstract away the underlying communication method. /// -public interface ISpannerLib +public interface ISpannerLib : IDisposable { /// /// RowEncoding is used to specify the format that SpannerLib should use to return row data. @@ -66,6 +68,14 @@ public enum RowEncoding /// /// The connection to close public void CloseConnection(Connection connection); + + /// + /// Closes the given connection. This also closes any open Rows objects of this connection. Any active transaction + /// on the connection is rolled back. + /// + /// The connection to close + /// The cancellation token + public Task CloseConnectionAsync(Connection connection, CancellationToken cancellationToken = default) => Task.Run(() => CloseConnection(connection), cancellationToken); /// /// Writes an array of mutations to Spanner. The mutations are buffered in the current transaction of the given @@ -97,11 +107,12 @@ public enum RowEncoding /// /// The connection to use to execute the SQL statement /// The statement to execute + /// The cancellation token /// /// A Rows object with the results of the statement. The contents of the Rows object depends on the type of SQL /// statement. /// - public Task ExecuteAsync(Connection connection, ExecuteSqlRequest statement); + public Task ExecuteAsync(Connection connection, ExecuteSqlRequest statement, CancellationToken cancellationToken = default); /// /// Executes a batch of DML or DDL statements on Spanner. The batch may not contain a mix of DML and DDL statements. @@ -116,8 +127,9 @@ public enum RowEncoding /// /// The connection to use to execute the batch /// The DML or DDL statements to execute + /// The cancellation token /// The update count per statement. The update count for a DDL statement is -1. - public Task ExecuteBatchAsync(Connection connection, ExecuteBatchDmlRequest statements); + public Task ExecuteBatchAsync(Connection connection, ExecuteBatchDmlRequest statements, CancellationToken cancellationToken = default); /// /// Returns the ResultSetMetadata of a Rows object. This can be used to inspect the type of data that a Rows object @@ -132,8 +144,9 @@ public enum RowEncoding /// contains. /// /// The Rows object to get the metadata of + /// The cancellation token /// The ResultSetMetadata of the given Rows object - public Task MetadataAsync(Rows rows); + public Task MetadataAsync(Rows rows, CancellationToken cancellationToken = default); /// /// Returns the ResultSetStats of a Rows object. This object contains the update count of a DML statement that was @@ -164,8 +177,9 @@ public enum RowEncoding /// The Rows object to return data rows for /// The maximum number of rows to return /// The encoding that should be used for the data rows + /// The cancellation token /// A ListValue with the actual row data, or null if there are no more rows - public Task NextAsync(Rows rows, int numRows, RowEncoding encoding); + public Task NextAsync(Rows rows, int numRows, RowEncoding encoding, CancellationToken cancellationToken = default); /// /// Closes the given Rows object. This releases all resources associated with this statement result. @@ -173,6 +187,13 @@ public enum RowEncoding /// The Rows object to close public void CloseRows(Rows rows); + /// + /// Closes the given Rows object. This releases all resources associated with this statement result. + /// + /// The Rows object to close + /// The cancellation token + public Task CloseRowsAsync(Rows rows, CancellationToken cancellationToken = default) => Task.Run(() => CloseRows(rows), cancellationToken); + /// /// Starts a new transaction on this connection. A connection can have at most one transaction at any time. All /// transactions, including read-only transactions, must be either committed or rolled back. @@ -190,10 +211,30 @@ public enum RowEncoding /// The connection that has the transaction that should be committed /// The CommitResponse of the transaction, or null if it was a read-only transaction public CommitResponse? Commit(Connection connection); + + /// + /// Commits the current transaction on this connection. + /// + /// The connection that has the transaction that should be committed + /// The CommitResponse of the transaction, or null if it was a read-only transaction + /// The cancellation token + public Task CommitAsync(Connection connection, CancellationToken cancellationToken = default); /// /// Rollbacks the current transaction. /// /// The connection that has the transaction that should be rolled back public void Rollback(Connection connection); + + /// + /// Rollbacks the current transaction. + /// + /// The connection that has the transaction that should be rolled back + /// The cancellation token + public Task RollbackAsync(Connection connection, CancellationToken cancellationToken = default); + + void IDisposable.Dispose() + { + // no-op + } } \ No newline at end of file diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/Rows.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/Rows.cs index 5350b029..0a877e55 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/Rows.cs +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/Rows.cs @@ -13,6 +13,7 @@ // limitations under the License. using System; +using System.Threading; using System.Threading.Tasks; using Google.Cloud.Spanner.V1; using Google.Protobuf.WellKnownTypes; @@ -29,14 +30,14 @@ public class Rows : AbstractLibObject private ResultSetMetadata? _metadata; - public ResultSetMetadata? Metadata => _metadata ??= Spanner.Metadata(this); + public virtual ResultSetMetadata? Metadata => _metadata ??= Spanner.Metadata(this); private readonly Lazy _stats; /// /// The ResultSetStats of the SQL statement. This is only available once all data rows have been read. /// - private ResultSetStats? Stats => _stats.Value; + protected virtual ResultSetStats? Stats => _stats.Value; /// /// The update count of the SQL statement. This is only available once all data rows have been read. @@ -76,7 +77,7 @@ public Rows(Connection connection, long id, bool initMetadata = true) : base(con /// Returns the next data row from this Rows object. /// /// The next data row or null if there are no more data - public ListValue? Next() + public virtual ListValue? Next() { var res = Spanner.Next(this, 1, ISpannerLib.RowEncoding.Proto); if (res == null && !_stats.IsValueCreated) @@ -91,9 +92,9 @@ public Rows(Connection connection, long id, bool initMetadata = true) : base(con /// Returns the next data row from this Rows object. /// /// The next data row or null if there are no more data - public async Task NextAsync() + public virtual async Task NextAsync(CancellationToken cancellationToken = default) { - return await Spanner.NextAsync(this, 1, ISpannerLib.RowEncoding.Proto); + return await Spanner.NextAsync(this, 1, ISpannerLib.RowEncoding.Proto, cancellationToken); } /// @@ -103,4 +104,10 @@ protected override void CloseLibObject() { Spanner.CloseRows(this); } + + protected override async ValueTask CloseLibObjectAsync() + { + await Spanner.CloseRowsAsync(this); + } + } diff --git a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/SpannerException.cs b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/SpannerException.cs index 3acc98d5..bb87ddb3 100644 --- a/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/SpannerException.cs +++ b/spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet/SpannerException.cs @@ -14,6 +14,8 @@ using System; using Google.Rpc; +using Grpc.Core; +using Status = Google.Rpc.Status; namespace Google.Cloud.SpannerLib; @@ -24,6 +26,11 @@ namespace Google.Cloud.SpannerLib; /// The status that was returned by SpannerLib public class SpannerException(Status status) : Exception(status.Message) { + public static SpannerException ToSpannerException(RpcException exception) + { + return new SpannerException(new Status { Code = (int) exception.Status.StatusCode, Message = exception.Message }); + } + public Status Status { get; } = status; public Code Code => (Code)Status.Code; diff --git a/spannerlib/wrappers/spannerlib-java/pom.xml b/spannerlib/wrappers/spannerlib-java/pom.xml index 088b2784..c5f51c7d 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 @@ -81,4 +112,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..2d461f13 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,20 +41,19 @@ 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(); - // TODO: The library should take a shortcut and just skip committing empty transactions. - assertEquals(1, mockSpanner.countRequestsOfType(BeginTransactionRequest.class)); - assertEquals(1, mockSpanner.countRequestsOfType(CommitRequest.class)); + assertEquals(0, mockSpanner.countRequestsOfType(BeginTransactionRequest.class)); + assertEquals(0, mockSpanner.countRequestsOfType(CommitRequest.class)); } } @@ -64,7 +62,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 +90,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 +130,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 +162,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/spannerlib/wrappers/spannerlib-ruby/Rakefile b/spannerlib/wrappers/spannerlib-ruby/Rakefile index c6babf0a..749fc119 100644 --- a/spannerlib/wrappers/spannerlib-ruby/Rakefile +++ b/spannerlib/wrappers/spannerlib-ruby/Rakefile @@ -42,4 +42,3 @@ task :compile do end task default: %i[compile spec rubocop] - diff --git a/spannerlib/wrappers/spannerlib-ruby/lib/spannerlib/connection.rb b/spannerlib/wrappers/spannerlib-ruby/lib/spannerlib/connection.rb index ea824a7c..bf515205 100644 --- a/spannerlib/wrappers/spannerlib-ruby/lib/spannerlib/connection.rb +++ b/spannerlib/wrappers/spannerlib-ruby/lib/spannerlib/connection.rb @@ -15,6 +15,7 @@ # frozen_string_literal: true require_relative "ffi" +require_relative "rows" class Connection attr_reader :pool_id, :conn_id @@ -35,8 +36,7 @@ def write_mutations(mutation_group) else mutation_group.to_s end - - SpannerLib.write_mutations(@pool_id, @conn_id, req_bytes) + SpannerLib.write_mutations(@pool_id, @conn_id, req_bytes, proto_klass: Google::Cloud::Spanner::V1::CommitResponse) end # Begin a read/write transaction on this connection. Accepts TransactionOptions proto or bytes. @@ -52,7 +52,7 @@ def begin_transaction(transaction_options = nil) # Commit the current transaction. Returns CommitResponse bytes or nil. def commit - SpannerLib.commit(@pool_id, @conn_id) + SpannerLib.commit(@pool_id, @conn_id, proto_klass: Google::Cloud::Spanner::V1::CommitResponse) end # Rollback the current transaction. @@ -68,7 +68,8 @@ def execute(request) else request.is_a?(String) ? request : request.to_s end - SpannerLib.execute(@pool_id, @conn_id, bytes) + rows_id = SpannerLib.execute(@pool_id, @conn_id, bytes) + SpannerLib::Rows.new(self, rows_id) end # Execute batch DML/DDL request. Returns ExecuteBatchDmlResponse bytes (or nil). @@ -78,24 +79,8 @@ def execute_batch(request) else request.is_a?(String) ? request : request.to_s end - SpannerLib.execute_batch(@pool_id, @conn_id, bytes) - end - - # Rows helpers — return raw message bytes (caller should parse them). - def metadata(rows_id) - SpannerLib.metadata(@pool_id, @conn_id, rows_id) - end - - def next_rows(rows_id, num_rows, encoding = 0) - SpannerLib.next(@pool_id, @conn_id, rows_id, num_rows, encoding) - end - - def result_set_stats(rows_id) - SpannerLib.result_set_stats(@pool_id, @conn_id, rows_id) - end - def close_rows(rows_id) - SpannerLib.close_rows(@pool_id, @conn_id, rows_id) + SpannerLib.execute_batch(@pool_id, @conn_id, bytes, proto_klass: Google::Cloud::Spanner::V1::ExecuteBatchDmlResponse) end # Closes this connection. Any active transaction on the connection is rolled back. diff --git a/spannerlib/wrappers/spannerlib-ruby/lib/spannerlib/ffi.rb b/spannerlib/wrappers/spannerlib-ruby/lib/spannerlib/ffi.rb index f01059c8..61e190a1 100644 --- a/spannerlib/wrappers/spannerlib-ruby/lib/spannerlib/ffi.rb +++ b/spannerlib/wrappers/spannerlib-ruby/lib/spannerlib/ffi.rb @@ -23,6 +23,7 @@ require "google/rpc/status_pb" require "ffi" +require_relative "message_handler" module SpannerLib extend FFI::Library @@ -128,45 +129,25 @@ def self.ensure_release(message) end end - def self.handle_object_id_response(message, func_name) + def self.handle_object_id_response(message, _func_name) ensure_release(message) do - if message[:code] != 0 - error_msg = read_error_message(message) - raise "#{func_name} failed with code #{message[:code]}: #{error_msg}" - end - message[:objectId] + MessageHandler.new(message).object_id end end - def self.handle_status_response(message, func_name) + def self.handle_status_response(message, _func_name) ensure_release(message) do - if message[:code] != 0 - error_msg = read_error_message(message) - raise "#{func_name} failed with code #{message[:code]}: #{error_msg}" - end + MessageHandler.new(message).throw_if_error! end nil end - # rubocop:disable Metrics/MethodLength - def self.handle_data_response(message, func_name) + def self.handle_data_response(message, _func_name, options = {}) + proto_klass = options[:proto_klass] ensure_release(message) do - if message[:code] != 0 - error_msg = read_error_message(message) - raise "#{func_name} failed with code #{message[:code]}: #{error_msg}" - end - - len = message[:length] - ptr = message[:pointer] - - if len.positive? && !ptr.null? - ptr.read_bytes(len) - else - "" - end + MessageHandler.new(message).data(proto_klass: proto_klass) end end - # rubocop:enable Metrics/MethodLength # rubocop:disable Metrics/MethodLength def self.read_error_message(message) @@ -187,10 +168,11 @@ def self.read_error_message(message) end # rubocop:enable Metrics/MethodLength - def self.write_mutations(pool_id, conn_id, proto_bytes) + def self.write_mutations(pool_id, conn_id, proto_bytes, options = {}) + proto_klass = options[:proto_klass] with_gobytes(proto_bytes) do |gobytes| message = WriteMutations(pool_id, conn_id, gobytes) - handle_data_response(message, "WriteMutations") + handle_data_response(message, "WriteMutations", proto_klass: proto_klass) end end @@ -201,9 +183,10 @@ def self.begin_transaction(pool_id, conn_id, proto_bytes) end end - def self.commit(pool_id, conn_id) + def self.commit(pool_id, conn_id, options = {}) + proto_klass = options[:proto_klass] message = Commit(pool_id, conn_id) - handle_data_response(message, "Commit") + handle_data_response(message, "Commit", proto_klass: proto_klass) end def self.rollback(pool_id, conn_id) @@ -218,10 +201,11 @@ def self.execute(pool_id, conn_id, proto_bytes) end end - def self.execute_batch(pool_id, conn_id, proto_bytes) + def self.execute_batch(pool_id, conn_id, proto_bytes, options = {}) + proto_klass = options[:proto_klass] with_gobytes(proto_bytes) do |gobytes| message = ExecuteBatch(pool_id, conn_id, gobytes) - handle_data_response(message, "ExecuteBatch") + handle_data_response(message, "ExecuteBatch", proto_klass: proto_klass) end end diff --git a/spannerlib/wrappers/spannerlib-ruby/lib/spannerlib/message_handler.rb b/spannerlib/wrappers/spannerlib-ruby/lib/spannerlib/message_handler.rb new file mode 100644 index 00000000..74f7308b --- /dev/null +++ b/spannerlib/wrappers/spannerlib-ruby/lib/spannerlib/message_handler.rb @@ -0,0 +1,56 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# frozen_string_literal: true + +# lib/spannerlib/message_handler.rb + +require "spannerlib/exceptions" + +module SpannerLib + class MessageHandler + def initialize(message) + @message = message + end + + def object_id + throw_if_error! + @message[:objectId] + end + + # Returns the data payload from the message. + # If a proto_klass is provided, it decodes the bytes into a Protobuf object. + # Otherwise, it returns the raw bytes as a string. + def data(proto_klass: nil) + throw_if_error! + + len = @message[:length] + ptr = @message[:pointer] + + return (proto_klass ? proto_klass.new : "") unless len.positive? && !ptr.null? + + bytes = ptr.read_string(len) + + proto_klass ? proto_klass.decode(bytes) : bytes + end + + def throw_if_error! + code = @message[:code] + return if code.zero? + + error_msg = SpannerLib.read_error_message(@message) + raise SpannerLibException, "Call failed with code #{code}: #{error_msg}" + end + end +end diff --git a/spannerlib/wrappers/spannerlib-ruby/lib/spannerlib/rows.rb b/spannerlib/wrappers/spannerlib-ruby/lib/spannerlib/rows.rb new file mode 100644 index 00000000..38a108b6 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-ruby/lib/spannerlib/rows.rb @@ -0,0 +1,67 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# frozen_string_literal: true + +module SpannerLib + class Rows + include Enumerable + + attr_reader :id, :connection + + def initialize(connection, rows_id) + @connection = connection + @id = rows_id + @closed = false + end + + def each + return enum_for(:each) unless block_given? + + while (row = self.next) + yield row + end + ensure + close + end + + def next + return nil if @closed + + row_data = SpannerLib.next(connection.pool_id, connection.conn_id, id, 1, 0) + + if row_data.nil? || row_data.empty? || (row_data.respond_to?(:values) && row_data.values.empty?) + close + return nil + end + + row_data + end + + def metadata + SpannerLib.metadata(connection.pool_id, connection.conn_id, id) + end + + def result_set_stats + SpannerLib.result_set_stats(connection.pool_id, connection.conn_id, id) + end + + def close + return if @closed + + SpannerLib.close_rows(connection.pool_id, connection.conn_id, id) + @closed = true + end + end +end diff --git a/spannerlib/wrappers/spannerlib-ruby/spec/integration/batch_emulator_spec.rb b/spannerlib/wrappers/spannerlib-ruby/spec/integration/batch_emulator_spec.rb new file mode 100644 index 00000000..cf4512e1 --- /dev/null +++ b/spannerlib/wrappers/spannerlib-ruby/spec/integration/batch_emulator_spec.rb @@ -0,0 +1,165 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# frozen_string_literal: true + +require "spec_helper" +require "google/cloud/spanner/v1" + +RSpec.describe "Batch API test", :integration do + before(:all) do + @emulator_host = ENV.fetch("SPANNER_EMULATOR_HOST", nil) + skip "SPANNER_EMULATOR_HOST not set" unless @emulator_host && !@emulator_host.empty? + + require "spannerlib/pool" + @dsn = "projects/your-project-id/instances/test-instance/databases/test-database?autoConfigEmulator=true" + + @pool = Pool.create_pool(@dsn) + conn = @pool.create_connection + ddl_batch_req = Google::Cloud::Spanner::V1::ExecuteBatchDmlRequest.new( + statements: [ + Google::Cloud::Spanner::V1::ExecuteBatchDmlRequest::Statement.new(sql: "DROP TABLE IF EXISTS test_table"), + Google::Cloud::Spanner::V1::ExecuteBatchDmlRequest::Statement.new( + sql: "CREATE TABLE test_table (id INT64 NOT NULL, name STRING(100)) PRIMARY KEY(id)" + ) + ] + ) + conn.execute_batch(ddl_batch_req) + conn.close + end + + after(:all) do + @pool&.close + end + + before do + @conn = @pool.create_connection + delete_req = Google::Cloud::Spanner::V1::BatchWriteRequest::MutationGroup.new( + mutations: [ + Google::Cloud::Spanner::V1::Mutation.new( + delete: Google::Cloud::Spanner::V1::Mutation::Delete.new( + table: "test_table", + key_set: Google::Cloud::Spanner::V1::KeySet.new(all: true) + ) + ) + ] + ) + @conn.write_mutations(delete_req) + end + + after do + @conn&.close + end + + it "tests a batch DML request" do + dml_batch_req = Google::Cloud::Spanner::V1::ExecuteBatchDmlRequest.new( + statements: [ + Google::Cloud::Spanner::V1::ExecuteBatchDmlRequest::Statement.new( + sql: "INSERT INTO test_table (id, name) VALUES (1, 'name1')" + ), + Google::Cloud::Spanner::V1::ExecuteBatchDmlRequest::Statement.new( + sql: "INSERT INTO test_table (id, name) VALUES (2, 'name2')" + ), + Google::Cloud::Spanner::V1::ExecuteBatchDmlRequest::Statement.new( + sql: "UPDATE test_table SET name='name3' WHERE id=1" + ) + ] + ) + resp = @conn.execute_batch(dml_batch_req) + expect(resp.result_sets.length).to eq 3 + + select_req = Google::Cloud::Spanner::V1::ExecuteSqlRequest.new( + sql: "SELECT id, name FROM test_table ORDER BY id" + ) + rows = @conn.execute(select_req) + all_rows = rows.map { |row_bytes| Google::Protobuf::ListValue.decode(row_bytes) } + + expect(all_rows.length).to eq 2 + expect(all_rows[0].values[0].string_value).to eq "1" + expect(all_rows[0].values[1].string_value).to eq "name3" + expect(all_rows[1].values[0].string_value).to eq "2" + expect(all_rows[1].values[1].string_value).to eq "name2" + end + + it "tests a batch DDL request" do + ddl_batch_req = Google::Cloud::Spanner::V1::ExecuteBatchDmlRequest.new( + statements: [ + Google::Cloud::Spanner::V1::ExecuteBatchDmlRequest::Statement.new( + sql: "DROP TABLE IF EXISTS test_table" + ), + Google::Cloud::Spanner::V1::ExecuteBatchDmlRequest::Statement.new( + sql: "CREATE TABLE test_table (key INT64 NOT NULL, data STRING(MAX)) PRIMARY KEY(key)" + ) + ] + ) + + expect { @conn.execute_batch(ddl_batch_req) }.not_to raise_error + + insert_req = Google::Cloud::Spanner::V1::BatchWriteRequest::MutationGroup.new( + mutations: [ + Google::Cloud::Spanner::V1::Mutation.new( + insert: Google::Cloud::Spanner::V1::Mutation::Write.new( + table: "test_table", + columns: %w[key data], + values: [ + Google::Protobuf::ListValue.new(values: [ + Google::Protobuf::Value.new(string_value: "101"), + Google::Protobuf::Value.new(string_value: "VerificationData") + ]) + ] + ) + ) + ] + ) + expect { @conn.write_mutations(insert_req) }.not_to raise_error + end + + it "queries data using parameters" do + insert_req = Google::Cloud::Spanner::V1::BatchWriteRequest::MutationGroup.new( + mutations: [ + Google::Cloud::Spanner::V1::Mutation.new( + insert: Google::Cloud::Spanner::V1::Mutation::Write.new( + table: "test_table", + columns: %w[key data], + values: [ + Google::Protobuf::ListValue.new(values: [Google::Protobuf::Value.new(string_value: "1"), + Google::Protobuf::Value.new(string_value: "Alice")]), + Google::Protobuf::ListValue.new(values: [Google::Protobuf::Value.new(string_value: "2"), + Google::Protobuf::Value.new(string_value: "Bob")]) + ] + ) + ) + ] + ) + @conn.write_mutations(insert_req) + + # Execute the parameterized query. + select_req = Google::Cloud::Spanner::V1::ExecuteSqlRequest.new( + sql: "SELECT key, data FROM test_table WHERE data = @dataParam", + params: Google::Protobuf::Struct.new( + fields: { + "dataParam" => Google::Protobuf::Value.new(string_value: "Alice") + } + ), + param_types: { + "dataParam" => Google::Cloud::Spanner::V1::Type.new(code: Google::Cloud::Spanner::V1::TypeCode::STRING) + } + ) + rows = @conn.execute(select_req) + all_rows = rows.map { |row_bytes| Google::Protobuf::ListValue.decode(row_bytes) } + + expect(all_rows.length).to eq(1) + expect(all_rows[0].values[1].string_value).to eq("Alice") + end +end diff --git a/spannerlib/wrappers/spannerlib-ruby/spec/integration/connection_emulator_spec.rb b/spannerlib/wrappers/spannerlib-ruby/spec/integration/connection_emulator_spec.rb index 1149b6a3..9015ba13 100644 --- a/spannerlib/wrappers/spannerlib-ruby/spec/integration/connection_emulator_spec.rb +++ b/spannerlib/wrappers/spannerlib-ruby/spec/integration/connection_emulator_spec.rb @@ -95,16 +95,9 @@ @conn.commit select_req = Google::Cloud::Spanner::V1::ExecuteSqlRequest.new(sql: "SELECT id, name FROM test_table ORDER BY id") - rows_id = @conn.execute(select_req) + rows = @conn.execute(select_req) - all_rows = [] - loop do - row_bytes = @conn.next_rows(rows_id, 1) - break if row_bytes.nil? || row_bytes.empty? - - all_rows << Google::Protobuf::ListValue.decode(row_bytes) - end - @conn.close_rows(rows_id) + all_rows = rows.map { |row_bytes| Google::Protobuf::ListValue.decode(row_bytes) } expect(all_rows.length).to eq(2) expect(all_rows[0].values[1].string_value).to eq("Alice") @@ -130,16 +123,9 @@ @conn.write_mutations(insert_data_req) select_req = Google::Cloud::Spanner::V1::ExecuteSqlRequest.new(sql: "SELECT id, name FROM test_table ORDER BY id") - rows_id = @conn.execute(select_req) - - all_rows = [] - loop do - row_bytes = @conn.next_rows(rows_id, 1) - break if row_bytes.nil? || row_bytes.empty? + rows = @conn.execute(select_req) - all_rows << Google::Protobuf::ListValue.decode(row_bytes) - end - @conn.close_rows(rows_id) + all_rows = rows.map { |row_bytes| Google::Protobuf::ListValue.decode(row_bytes) } expect(all_rows.length).to eq(2) expect(all_rows[0].values[1].string_value).to eq("Charlie") @@ -158,7 +144,7 @@ ) ] ) - expect { @conn.write_mutations(insert_data_req) }.to raise_error(RuntimeError, /read-only transactions cannot write/) + expect { @conn.write_mutations(insert_data_req) }.to raise_error(SpannerLibException, /read-only transactions cannot write/) @conn.rollback end diff --git a/spannerlib/wrappers/spannerlib-ruby/spec/spannerlib/connection_spec.rb b/spannerlib/wrappers/spannerlib-ruby/spec/spannerlib/connection_spec.rb index a9d92cbb..d100d01c 100644 --- a/spannerlib/wrappers/spannerlib-ruby/spec/spannerlib/connection_spec.rb +++ b/spannerlib/wrappers/spannerlib-ruby/spec/spannerlib/connection_spec.rb @@ -29,11 +29,11 @@ describe "creation" do it "is created by a Pool" do allow(SpannerLib).to receive(:create_connection).with(1).and_return(2) - + # The object under test is the one returned by `pool.create_connection` conn = pool.create_connection - expect(conn).to be_a(Connection) + expect(conn).to be_a(described_class) expect(conn.conn_id).to eq(2) expect(conn.pool_id).to eq(1) end diff --git a/transaction.go b/transaction.go index 297c6b60..8b92cb24 100644 --- a/transaction.go +++ b/transaction.go @@ -53,6 +53,7 @@ type contextTransaction interface { RunBatch(ctx context.Context) (driver.Result, error) RunDmlBatch(ctx context.Context) (SpannerResult, error) AbortBatch() (driver.Result, error) + IsInBatch() bool BufferWrite(ms []*spanner.Mutation) error } @@ -106,6 +107,116 @@ const ( txResultRollback ) +var _ contextTransaction = &delegatingTransaction{} + +// delegatingTransaction wraps a read/write or read-only transaction and delegates +// all calls to the underlying transaction. The underlying transaction is automatically +// created when the first query or DML statement is executed. The type of transaction is +// determined at the moment that the underlying transaction is created. This allows an +// application to execute statements like `set transaction read only` at the start of a +// transaction to set the type of transaction. +type delegatingTransaction struct { + conn *conn + ctx context.Context + close func(result txResult) + contextTransaction contextTransaction +} + +func (d *delegatingTransaction) ensureActivated() error { + if d.contextTransaction != nil { + return nil + } + tx, err := d.conn.activateTransaction() + if err != nil { + return err + } + d.contextTransaction = tx + return nil +} + +func (d *delegatingTransaction) Commit() error { + if d.contextTransaction == nil { + d.close(txResultCommit) + return nil + } + return d.contextTransaction.Commit() +} + +func (d *delegatingTransaction) Rollback() error { + if d.contextTransaction == nil { + d.close(txResultRollback) + return nil + } + return d.contextTransaction.Rollback() +} + +func (d *delegatingTransaction) resetForRetry(ctx context.Context) error { + if d.contextTransaction == nil { + return status.Error(codes.FailedPrecondition, "a transaction can only be reset after it has been activated") + } + return d.contextTransaction.resetForRetry(ctx) +} + +func (d *delegatingTransaction) Query(ctx context.Context, stmt spanner.Statement, stmtType parser.StatementType, execOptions *ExecOptions) (rowIterator, error) { + if err := d.ensureActivated(); err != nil { + return nil, err + } + return d.contextTransaction.Query(ctx, stmt, stmtType, execOptions) +} + +func (d *delegatingTransaction) partitionQuery(ctx context.Context, stmt spanner.Statement, execOptions *ExecOptions) (driver.Rows, error) { + if err := d.ensureActivated(); err != nil { + return nil, err + } + return d.contextTransaction.partitionQuery(ctx, stmt, execOptions) +} + +func (d *delegatingTransaction) ExecContext(ctx context.Context, stmt spanner.Statement, statementInfo *parser.StatementInfo, options spanner.QueryOptions) (*result, error) { + if err := d.ensureActivated(); err != nil { + return nil, err + } + return d.contextTransaction.ExecContext(ctx, stmt, statementInfo, options) +} + +func (d *delegatingTransaction) StartBatchDML(options spanner.QueryOptions, automatic bool) (driver.Result, error) { + if err := d.ensureActivated(); err != nil { + return nil, err + } + return d.contextTransaction.StartBatchDML(options, automatic) +} + +func (d *delegatingTransaction) RunBatch(ctx context.Context) (driver.Result, error) { + if err := d.ensureActivated(); err != nil { + return nil, err + } + return d.contextTransaction.RunBatch(ctx) +} + +func (d *delegatingTransaction) RunDmlBatch(ctx context.Context) (SpannerResult, error) { + if err := d.ensureActivated(); err != nil { + return nil, err + } + return d.contextTransaction.RunDmlBatch(ctx) +} + +func (d *delegatingTransaction) AbortBatch() (driver.Result, error) { + if err := d.ensureActivated(); err != nil { + return nil, err + } + return d.contextTransaction.AbortBatch() +} + +func (d *delegatingTransaction) IsInBatch() bool { + return d.contextTransaction != nil && d.contextTransaction.IsInBatch() +} + +func (d *delegatingTransaction) BufferWrite(ms []*spanner.Mutation) error { + if err := d.ensureActivated(); err != nil { + return err + } + return d.contextTransaction.BufferWrite(ms) +} + var _ contextTransaction = &readOnlyTransaction{} type readOnlyTransaction struct { @@ -220,6 +331,10 @@ func (tx *readOnlyTransaction) AbortBatch() (driver.Result, error) { return driver.ResultNoRows, nil } +func (tx *readOnlyTransaction) IsInBatch() bool { + return false +} + func (tx *readOnlyTransaction) BufferWrite([]*spanner.Mutation) error { return spanner.ToSpannerError(status.Errorf(codes.FailedPrecondition, "read-only transactions cannot write")) } @@ -428,7 +543,6 @@ func (tx *readWriteTransaction) Commit() (err error) { return err } var commitResponse spanner.CommitResponse - // TODO: Optimize this to skip the Commit also if the transaction has not yet been used. if tx.rwTx != nil { if !tx.retryAborts() { ts, err := tx.rwTx.CommitWithReturnResp(tx.ctx) @@ -586,6 +700,10 @@ func (tx *readWriteTransaction) AbortBatch() (driver.Result, error) { return driver.ResultNoRows, nil } +func (tx *readWriteTransaction) IsInBatch() bool { + return tx.batch != nil +} + func (tx *readWriteTransaction) maybeRunAutoDmlBatch(ctx context.Context) error { if tx.batch == nil || !tx.batch.automatic { return nil