/** * * * <pre> * If the read or SQL query began a transaction as a side-effect, the * information about the new transaction is yielded here. * </pre> * * <code>.google.spanner.v1.Transaction transaction = 2;</code> */ public Builder setTransaction(com.google.spanner.v1.Transaction.Builder builderForValue) { if (transactionBuilder_ == null) { transaction_ = builderForValue.build(); onChanged(); } else { transactionBuilder_.setMessage(builderForValue.build()); } return this; } /**
@Test public void prepareClosesOldSingleUseContext() { ReadContext ctx = session.singleUse(TimestampBound.strong()); Mockito.when(rpc.beginTransaction(Mockito.<BeginTransactionRequest>any(), Mockito.eq(options))) .thenReturn(Transaction.newBuilder().setId(ByteString.copyFromUtf8("t1")).build()); session.prepareReadWriteTransaction(); expectedException.expect(IllegalStateException.class); expectedException.expectMessage("invalidated"); ctx.read("Dummy", KeySet.all(), Arrays.asList("C")); }
input.readMessage(com.google.spanner.v1.Transaction.parser(), extensionRegistry); if (subBuilder != null) { subBuilder.mergeFrom(transaction_); transaction_ = subBuilder.buildPartial();
input.readMessage(com.google.spanner.v1.Transaction.parser(), extensionRegistry); if (subBuilder != null) { subBuilder.mergeFrom(transaction_); transaction_ = subBuilder.buildPartial();
/** * * * <pre> * If the read or SQL query began a transaction as a side-effect, the * information about the new transaction is yielded here. * </pre> * * <code>.google.spanner.v1.Transaction transaction = 2;</code> */ public Builder mergeTransaction(com.google.spanner.v1.Transaction value) { if (transactionBuilder_ == null) { if (transaction_ != null) { transaction_ = com.google.spanner.v1.Transaction.newBuilder(transaction_) .mergeFrom(value) .buildPartial(); } else { transaction_ = value; } onChanged(); } else { transactionBuilder_.mergeFrom(value); } return this; } /**
/** * * * <pre> * Transaction created by this request. * </pre> * * <code>.google.spanner.v1.Transaction transaction = 2;</code> */ public Builder mergeTransaction(com.google.spanner.v1.Transaction value) { if (transactionBuilder_ == null) { if (transaction_ != null) { transaction_ = com.google.spanner.v1.Transaction.newBuilder(transaction_) .mergeFrom(value) .buildPartial(); } else { transaction_ = value; } onChanged(); } else { transactionBuilder_.mergeFrom(value); } return this; } /**
/** * * * <pre> * For snapshot read-only transactions, the read timestamp chosen * for the transaction. Not returned by default: see * [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. * </pre> * * <code>.google.protobuf.Timestamp read_timestamp = 2;</code> */ private com.google.protobuf.SingleFieldBuilderV3< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> getReadTimestampFieldBuilder() { if (readTimestampBuilder_ == null) { readTimestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>( getReadTimestamp(), getParentForChildren(), isClean()); readTimestamp_ = null; } return readTimestampBuilder_; }
@Test public void testBatchReadOnlyTxnWithBound() throws Exception { Session sessionProto = Session.newBuilder().setName(SESSION_NAME).build(); when(gapicRpc.createSession( eq(DB_NAME), (Map<String, String>) anyMap(), optionsCaptor.capture())) .thenReturn(sessionProto); com.google.protobuf.Timestamp timestamp = Timestamps.parse(TIMESTAMP); Transaction txnMetadata = Transaction.newBuilder().setId(TXN_ID).setReadTimestamp(timestamp).build(); when(spannerOptions.getSpannerRpcV1()).thenReturn(gapicRpc); when(gapicRpc.beginTransaction(Mockito.<BeginTransactionRequest>any(), optionsCaptor.capture())) .thenReturn(txnMetadata); BatchReadOnlyTransaction batchTxn = client.batchReadOnlyTransaction(TimestampBound.strong()); assertThat(batchTxn.getBatchTransactionId().getSessionId()).isEqualTo(SESSION_NAME); assertThat(batchTxn.getBatchTransactionId().getTransactionId()).isEqualTo(TXN_ID); Timestamp t = Timestamp.parseTimestamp(TIMESTAMP); assertThat(batchTxn.getReadTimestamp()).isEqualTo(t); assertThat(batchTxn.getReadTimestamp()) .isEqualTo(batchTxn.getBatchTransactionId().getTimestamp()); }
@Test @SuppressWarnings("all") public void beginTransactionTest() { ByteString id = ByteString.copyFromUtf8("27"); Transaction expectedResponse = Transaction.newBuilder().setId(id).build(); mockSpanner.addResponse(expectedResponse); SessionName session = SessionName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]"); TransactionOptions options = TransactionOptions.newBuilder().build(); Transaction actualResponse = client.beginTransaction(session, options); Assert.assertEquals(expectedResponse, actualResponse); List<GeneratedMessageV3> actualRequests = mockSpanner.getRequests(); Assert.assertEquals(1, actualRequests.size()); BeginTransactionRequest actualRequest = (BeginTransactionRequest) actualRequests.get(0); Assert.assertEquals(session, SessionName.parse(actualRequest.getSession())); Assert.assertEquals(options, actualRequest.getOptions()); Assert.assertTrue( channelProvider.isHeaderSent( ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), GaxGrpcProperties.getDefaultApiClientHeaderPattern())); }
/** * * * <pre> * For snapshot read-only transactions, the read timestamp chosen * for the transaction. Not returned by default: see * [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. * </pre> * * <code>.google.protobuf.Timestamp read_timestamp = 2;</code> */ public com.google.protobuf.Timestamp.Builder getReadTimestampBuilder() { onChanged(); return getReadTimestampFieldBuilder().getBuilder(); } /**
/** * * * <pre> * Transaction created by this request. * </pre> * * <code>.google.spanner.v1.Transaction transaction = 2;</code> */ public Builder setTransaction(com.google.spanner.v1.Transaction.Builder builderForValue) { if (transactionBuilder_ == null) { transaction_ = builderForValue.build(); onChanged(); } else { transactionBuilder_.setMessage(builderForValue.build()); } return this; } /**
@java.lang.Override public Builder mergeFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { com.google.spanner.v1.Transaction parsedMessage = null; try { parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); } catch (com.google.protobuf.InvalidProtocolBufferException e) { parsedMessage = (com.google.spanner.v1.Transaction) e.getUnfinishedMessage(); throw e.unwrapIOException(); } finally { if (parsedMessage != null) { mergeFrom(parsedMessage); } } return this; }
@Test public void multiUseReadOnlyTransactionReturnsMissingTransactionId() throws ParseException { com.google.protobuf.Timestamp t = Timestamps.parse("2015-10-01T10:54:20.021Z"); Transaction txnMetadata = Transaction.newBuilder().setReadTimestamp(t).build(); PartialResultSet resultSet = PartialResultSet.newBuilder() .setMetadata(newMetadata(Type.struct(Type.StructField.of("C", Type.string())))) .build(); Mockito.when(rpc.beginTransaction(Mockito.<BeginTransactionRequest>any(), Mockito.eq(options))) .thenReturn(txnMetadata); mockRead(resultSet); ReadOnlyTransaction txn = session.readOnlyTransaction(TimestampBound.strong()); expectedException.expect(SpannerMatchers.isSpannerException(ErrorCode.INTERNAL)); txn.readRow("Dummy", Key.of(), Arrays.asList("C")); } }
public static Builder newBuilder(com.google.spanner.v1.Transaction prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); }
private Builder() { maybeForceBuilderInitialization(); }
@Test public void multiUseReadOnlyTransactionReturnsEmptyTransactionMetadata() { Transaction txnMetadata = Transaction.newBuilder().setId(ByteString.copyFromUtf8("x")).build(); PartialResultSet resultSet = PartialResultSet.newBuilder() .setMetadata(newMetadata(Type.struct(Type.StructField.of("C", Type.string())))) .build(); Mockito.when(rpc.beginTransaction(Mockito.<BeginTransactionRequest>any(), Mockito.eq(options))) .thenReturn(txnMetadata); mockRead(resultSet); ReadOnlyTransaction txn = session.readOnlyTransaction(TimestampBound.strong()); expectedException.expect(SpannerMatchers.isSpannerException(ErrorCode.INTERNAL)); txn.readRow("Dummy", Key.of(), Arrays.asList("C")); }
@Test public void metadata() { Type rowType = Type.struct(Type.StructField.of("f", Type.string())); ResultSetMetadata.Builder metadataBuilder = ResultSetMetadata.newBuilder(); metadataBuilder .setRowType(rowType.toProto().getStructType()) .getTransactionBuilder() .setId(ByteString.copyFromUtf8("t1")); PartialResultSet partialResultSet = PartialResultSet.newBuilder().setMetadata(metadataBuilder.build()).build(); consumer.onPartialResultSet(partialResultSet); consumer.onCompleted(); assertThat(resultSet.next()).isFalse(); assertThat(resultSet.getType()).isEqualTo(rowType); }
@Test public void multiUseReadOnlyTransactionReturnsMissingTimestamp() { Transaction txnMetadata = Transaction.newBuilder().setId(ByteString.copyFromUtf8("x")).build(); PartialResultSet resultSet = PartialResultSet.newBuilder() .setMetadata(newMetadata(Type.struct(Type.StructField.of("C", Type.string())))) .build(); Mockito.when(rpc.beginTransaction(Mockito.<BeginTransactionRequest>any(), Mockito.eq(options))) .thenReturn(txnMetadata); mockRead(resultSet); ReadOnlyTransaction txn = session.readOnlyTransaction(TimestampBound.strong()); expectedException.expect(SpannerMatchers.isSpannerException(ErrorCode.INTERNAL)); txn.readRow("Dummy", Key.of(), Arrays.asList("C")); }
@java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof com.google.spanner.v1.Transaction) { return mergeFrom((com.google.spanner.v1.Transaction) other); } else { super.mergeFrom(other); return this; } }