@java.lang.Override public Builder newBuilderForType() { return newBuilder(); }
static PartialResultSet resultSet(@Nullable ByteString resumeToken, String... data) { PartialResultSet.Builder builder = PartialResultSet.newBuilder(); if (resumeToken != null) { builder.setResumeToken(resumeToken); } for (String s : data) { builder.addValuesBuilder().setStringValue(s); } return builder.build(); }
@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 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")); }
@Test public void getTimestampList() { List<Timestamp> timestampList = new ArrayList<>(); timestampList.add(Timestamp.parseTimestamp("0001-01-01T00:00:00Z")); timestampList.add(Timestamp.parseTimestamp("0002-02-02T02:00:00Z")); consumer.onPartialResultSet( PartialResultSet.newBuilder() .setMetadata( makeMetadata(Type.struct(Type.StructField.of("f", Type.array(Type.timestamp()))))) .addValues(Value.timestampArray(timestampList).toProto()) .build()); consumer.onCompleted(); assertThat(resultSet.next()).isTrue(); assertThat(resultSet.getTimestampList(0)).isEqualTo(timestampList); }
@Test public void empty() { Type type = Type.struct(Type.StructField.of("f", Type.string())); PartialResultSet partialResultSet = PartialResultSet.newBuilder().setMetadata(makeMetadata(type)).build(); consumer.onPartialResultSet(partialResultSet); consumer.onCompleted(); assertThat(resultSet.next()).isFalse(); assertThat(resultSet.getType()).isEqualTo(type); }
@Test public void statsUnavailable() { ResultSetStats stats = ResultSetStats.newBuilder().build(); consumer.onPartialResultSet( PartialResultSet.newBuilder() .setMetadata(makeMetadata(Type.struct(new ArrayList<Type.StructField>()))) .setChunkedValue(false) .setStats(stats) .build()); resultSet = resultSetWithMode(QueryMode.PROFILE); consumer.onCompleted(); assertThat(resultSet.getStats()).isNull(); }
@Test public void getBoolean() { consumer.onPartialResultSet( PartialResultSet.newBuilder() .setMetadata(makeMetadata(Type.struct(Type.StructField.of("f", Type.bool())))) .addValues(Value.bool(true).toProto()) .addValues(Value.bool(false).toProto()) .build()); consumer.onCompleted(); assertThat(resultSet.next()).isTrue(); assertThat(resultSet.getBoolean(0)).isTrue(); assertThat(resultSet.next()).isTrue(); assertThat(resultSet.getBoolean(0)).isFalse(); }
@Test public void getLong() { consumer.onPartialResultSet( PartialResultSet.newBuilder() .setMetadata(makeMetadata(Type.struct(Type.StructField.of("f", Type.int64())))) .addValues(Value.int64(Long.MIN_VALUE).toProto()) .addValues(Value.int64(Long.MAX_VALUE).toProto()) .build()); consumer.onCompleted(); assertThat(resultSet.next()).isTrue(); assertThat(resultSet.getLong(0)).isEqualTo(Long.MIN_VALUE); assertThat(resultSet.next()).isTrue(); assertThat(resultSet.getLong(0)).isEqualTo(Long.MAX_VALUE); }
@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 getDate() { consumer.onPartialResultSet( PartialResultSet.newBuilder() .setMetadata(makeMetadata(Type.struct(Type.StructField.of("f", Type.date())))) .addValues(Value.date(Date.fromYearMonthDay(2018, 5, 29)).toProto()) .build()); consumer.onCompleted(); assertThat(resultSet.next()).isTrue(); assertThat(resultSet.getDate(0)).isEqualTo(Date.fromYearMonthDay(2018, 5, 29)); }
@Test public void getBooleanArray() { boolean[] boolArray = {true, true, false}; consumer.onPartialResultSet( PartialResultSet.newBuilder() .setMetadata( makeMetadata(Type.struct(Type.StructField.of("f", Type.array(Type.bool()))))) .addValues(Value.boolArray(boolArray).toProto()) .build()); consumer.onCompleted(); assertThat(resultSet.next()).isTrue(); assertThat(resultSet.getBooleanArray(0)).isEqualTo(boolArray); }
@Test public void getDoubleArray() { double[] doubleArray = {Double.MAX_VALUE, Double.MIN_VALUE, 111, 333, 444, 0, -1, -2234}; consumer.onPartialResultSet( PartialResultSet.newBuilder() .setMetadata( makeMetadata(Type.struct(Type.StructField.of("f", Type.array(Type.float64()))))) .addValues(Value.float64Array(doubleArray).toProto()) .build()); consumer.onCompleted(); assertThat(resultSet.next()).isTrue(); assertThat(resultSet.getDoubleArray(0)).isEqualTo(doubleArray, 0.0); }
@Test public void getLongArray() { long[] longArray = {111, 333, 444, 0, -1, -2234, Long.MAX_VALUE, Long.MIN_VALUE}; consumer.onPartialResultSet( PartialResultSet.newBuilder() .setMetadata( makeMetadata(Type.struct(Type.StructField.of("f", Type.array(Type.int64()))))) .addValues(Value.int64Array(longArray).toProto()) .build()); consumer.onCompleted(); assertThat(resultSet.next()).isTrue(); assertThat(resultSet.getLongArray(0)).isEqualTo(longArray); }
@Test public void getTimestamp() { consumer.onPartialResultSet( PartialResultSet.newBuilder() .setMetadata(makeMetadata(Type.struct(Type.StructField.of("f", Type.timestamp())))) .addValues(Value.timestamp(Timestamp.parseTimestamp("0001-01-01T00:00:00Z")).toProto()) .build()); consumer.onCompleted(); assertThat(resultSet.next()).isTrue(); assertThat(resultSet.getTimestamp(0)) .isEqualTo(Timestamp.parseTimestamp("0001-01-01T00:00:00Z")); }
@Test public void getDouble() { consumer.onPartialResultSet( PartialResultSet.newBuilder() .setMetadata(makeMetadata(Type.struct(Type.StructField.of("f", Type.float64())))) .addValues(Value.float64(Double.MIN_VALUE).toProto()) .addValues(Value.float64(Double.MAX_VALUE).toProto()) .build()); consumer.onCompleted(); assertThat(resultSet.next()).isTrue(); assertThat(resultSet.getDouble(0)).isWithin(0.0).of(Double.MIN_VALUE); assertThat(resultSet.next()).isTrue(); assertThat(resultSet.getDouble(0)).isWithin(0.0).of(Double.MAX_VALUE); }
@Test public void emptyMultipleResponses() { PartialResultSet partialResultSet = PartialResultSet.newBuilder() .setMetadata(makeMetadata(Type.struct(Type.StructField.of("f", Type.string())))) .build(); consumer.onPartialResultSet(partialResultSet); consumer.onPartialResultSet(PartialResultSet.getDefaultInstance()); consumer.onPartialResultSet(PartialResultSet.getDefaultInstance()); consumer.onCompleted(); assertThat(resultSet.next()).isFalse(); }
@Test public void singleUseReadOnlyTransactionReturnsEmptyTransactionMetadata() { PartialResultSet resultSet = PartialResultSet.newBuilder() .setMetadata( newMetadata(Type.struct(Type.StructField.of("C", Type.string()))) .toBuilder() .setTransaction(Transaction.getDefaultInstance())) .build(); mockRead(resultSet); ReadOnlyTransaction txn = session.singleUseReadOnlyTransaction(TimestampBound.strong()); expectedException.expect(SpannerMatchers.isSpannerException(ErrorCode.INTERNAL)); txn.readRow("Dummy", Key.of(), Arrays.asList("C")); }
@Test public void singleResponse() { consumer.onPartialResultSet( PartialResultSet.newBuilder() .setMetadata(makeMetadata(Type.struct(Type.StructField.of("f", Type.string())))) .addValues(Value.string("a").toProto()) .addValues(Value.string("b").toProto()) .addValues(Value.string("c").toProto()) .build()); consumer.onCompleted(); assertThat(consumeAllString()).containsExactly("a", "b", "c").inOrder(); }
@Test public void multiResponseChunkingStreamClosed() { consumer.onPartialResultSet( PartialResultSet.newBuilder() .setMetadata(makeMetadata(Type.struct(Type.StructField.of("f", Type.string())))) .addValues(Value.string("abcdefg").toProto()) .setChunkedValue(true) .build()); consumer.onCompleted(); expectedException.expect(isSpannerException(ErrorCode.INTERNAL)); resultSet.next(); }