@java.lang.Override public Builder newBuilderForType() { return newBuilder(); } public static Builder newBuilder() {
@Override com.google.protobuf.Value getValueAsProto(int i) { return com.google.protobuf.Value.newBuilder() .setStringValue(Long.toString(values[i])) .build(); }
@Override com.google.protobuf.Value valueToProto() { return com.google.protobuf.Value.newBuilder().setStringValue(Long.toString(value)).build(); }
@Override com.google.protobuf.Value valueToProto() { return com.google.protobuf.Value.newBuilder().setStringValue(value.toString()).build(); }
@Override com.google.protobuf.Value getValueAsProto(int i) { return com.google.protobuf.Value.newBuilder().setNumberValue(values[i]).build(); }
@Override com.google.protobuf.Value valueToProto() { return com.google.protobuf.Value.newBuilder().setNumberValue(value).build(); }
@Override com.google.protobuf.Value getValueAsProto(int i) { return com.google.protobuf.Value.newBuilder().setBoolValue(values[i]).build(); }
@Override com.google.protobuf.Value valueToProto() { return com.google.protobuf.Value.newBuilder().setBoolValue(value).build(); }
@Override com.google.protobuf.Value valueToProto() { if (isCommitTimestamp) { return com.google.protobuf.Value.newBuilder() .setStringValue(COMMIT_TIMESTAMP_STRING) .build(); } return super.valueToProto(); }
@Override com.google.protobuf.Value valueToProto() { return com.google.protobuf.Value.newBuilder().setStringValue(value.toBase64()).build(); }
String firstStr = first.getStringValue(); merged = com.google.protobuf.Value.newBuilder().setStringValue(lastStr + firstStr).build(); } else { // List List<com.google.protobuf.Value> mergedList = new ArrayList<>(); concatLists(mergedList, first.getListValue().getValuesList()); merged = com.google.protobuf.Value.newBuilder() .setListValue(ListValue.newBuilder().addAllValues(mergedList)) .build();
@SuppressWarnings("unchecked") private static Value objectToValue(final Object obj) { Value.Builder builder = Value.newBuilder(); if (obj == null) { builder.setNullValue(NullValue.NULL_VALUE); return builder.build(); } Class<?> objClass = obj.getClass(); if (obj instanceof String) { builder.setStringValue((String) obj); } else if (obj instanceof Number) { builder.setNumberValue(((Number) obj).doubleValue()); } else if (obj instanceof Boolean) { builder.setBoolValue((Boolean) obj); } else if (obj instanceof Iterable<?> || objClass.isArray()) { builder.setListValue( ListValue.newBuilder() .addAllValues(Iterables.transform(Types.iterableOf(obj), OBJECT_TO_VALUE))); } else if (objClass.isEnum()) { builder.setStringValue(((Enum<?>) obj).name()); } else if (obj instanceof Map) { Map<String, Object> map = (Map<String, Object>) obj; builder.setStructValue(newStruct(map)); } else { throw new IllegalArgumentException(String.format("Unsupported protobuf value %s", obj)); } return builder.build(); } }
@Override com.google.protobuf.Value valueToProto() { ListValue.Builder list = ListValue.newBuilder(); for (T element : value) { if (element == null) { list.addValues(NULL_PROTO); } else { list.addValuesBuilder().setStringValue(elementToString(element)); } } return com.google.protobuf.Value.newBuilder().setListValue(list).build(); }
@Override com.google.protobuf.Value valueToProto() { ListValue.Builder list = ListValue.newBuilder(); for (Struct element : value) { if (element == null) { list.addValues(NULL_PROTO); } else { list.addValues(Value.struct(element).toProto()); } } return com.google.protobuf.Value.newBuilder().setListValue(list).build(); }
@Override com.google.protobuf.Value valueToProto() { ListValue.Builder list = ListValue.newBuilder(); for (int i = 0; i < size(); ++i) { if (isElementNull(i)) { list.addValues(NULL_PROTO); } else { list.addValues(getValueAsProto(i)); } } return com.google.protobuf.Value.newBuilder().setListValue(list).build(); } }
@Test public void testNumbers() { int intNumber = Integer.MIN_VALUE; long longNumber = Long.MAX_VALUE; float floatNumber = Float.MIN_VALUE; double doubleNumber = Double.MAX_VALUE; Map<String, Object> map = ImmutableMap.<String, Object>of( "int", intNumber, "long", longNumber, "float", floatNumber, "double", doubleNumber); Struct struct = Structs.newStruct(map); checkStructField(struct, "int", Value.newBuilder().setNumberValue(intNumber).build()); checkStructField(struct, "long", Value.newBuilder().setNumberValue(longNumber).build()); checkStructField(struct, "float", Value.newBuilder().setNumberValue(floatNumber).build()); checkStructField(struct, "double", Value.newBuilder().setNumberValue(doubleNumber).build()); Map<String, Object> convertedMap = Structs.asMap(struct); assertTrue(convertedMap.get("int") instanceof Double); assertTrue(convertedMap.get("long") instanceof Double); assertTrue(convertedMap.get("float") instanceof Double); assertTrue(convertedMap.get("double") instanceof Double); int convertedInteger = ((Double) convertedMap.get("int")).intValue(); long convertedLong = ((Double) convertedMap.get("long")).longValue(); float convertedFloat = ((Double) convertedMap.get("float")).floatValue(); double convertedDouble = (Double) convertedMap.get("double"); assertEquals(intNumber, convertedInteger); assertEquals(longNumber, convertedLong); assertEquals(floatNumber, convertedFloat, 0); assertEquals(doubleNumber, convertedDouble, 0); } }
@Override com.google.protobuf.Value valueToProto() { checkNotNull(); ListValue.Builder struct = ListValue.newBuilder(); for (int fieldIndex = 0; fieldIndex < value.getColumnCount(); ++fieldIndex) { if (value.isNull(fieldIndex)) { struct.addValues(NULL_PROTO); } else { struct.addValues(getValue(fieldIndex).toProto()); } } return com.google.protobuf.Value.newBuilder().setListValue(struct).build(); } }
@Test public void commitTimestamp() { Value v = Value.timestamp(Value.COMMIT_TIMESTAMP); assertThat(v.getType()).isEqualTo(Type.timestamp()); assertThat(v.isNull()).isFalse(); assertThat(v.isCommitTimestamp()).isTrue(); assertThat(v.toString()).isEqualTo("spanner.commit_timestamp()"); assertThat(v.toProto()) .isEqualTo( com.google.protobuf.Value.newBuilder() .setStringValue("spanner.commit_timestamp()") .build()); expectedException.expect(IllegalStateException.class); expectedException.expectMessage("Commit timestamp value"); v.getTimestamp(); }
@Test public void writeAtLeastOnce() throws ParseException { String timestampString = "2015-10-01T10:54:20.021Z"; ArgumentCaptor<CommitRequest> commit = ArgumentCaptor.forClass(CommitRequest.class); CommitResponse response = CommitResponse.newBuilder().setCommitTimestamp(Timestamps.parse(timestampString)).build(); Mockito.when(rpc.commit(commit.capture(), Mockito.eq(options))).thenReturn(response); Timestamp timestamp = session.writeAtLeastOnce( Arrays.asList(Mutation.newInsertBuilder("T").set("C").to("x").build())); assertThat(timestamp.getSeconds()) .isEqualTo(utcTimeSeconds(2015, Calendar.OCTOBER, 1, 10, 54, 20)); assertThat(timestamp.getNanos()).isEqualTo(TimeUnit.MILLISECONDS.toNanos(21)); CommitRequest request = commit.getValue(); assertThat(request.getSingleUseTransaction()).isNotNull(); assertThat(request.getSingleUseTransaction().getReadWrite()).isNotNull(); com.google.spanner.v1.Mutation mutation = com.google.spanner.v1.Mutation.newBuilder() .setInsert( Write.newBuilder() .setTable("T") .addColumns("C") .addValues( ListValue.newBuilder() .addValues(com.google.protobuf.Value.newBuilder().setStringValue("x")))) .build(); assertThat(request.getMutationsList()).containsExactly(mutation); }
@Test public void testSimpleMapping() throws JsonGenerationException, JsonMappingException, IOException { ObjectMapper m = new JsonMapperProvider().get(); assertTrue(m.canSerialize(Any.class)); Struct struct1 = Struct.newBuilder().putFields( "some-key", Value.newBuilder().setStringValue("some-value").build() ).build(); Any source = Any.pack(struct1); StringWriter buf = new StringWriter(); m.writer().writeValue(buf, source); Any dest = m.reader().forType(Any.class).readValue(buf.toString()); assertEquals(source.getTypeUrl(), dest.getTypeUrl()); Struct struct2 = dest.unpack(Struct.class); assertTrue(struct2.containsFields("some-key")); assertEquals( struct1.getFieldsOrThrow("some-key").getStringValue(), struct2.getFieldsOrThrow("some-key").getStringValue() ); } }