/** * <code>repeated .TypedValue array_value = 2;</code> */ public Builder setArrayValue( int index, org.apache.calcite.avatica.proto.Common.TypedValue.Builder builderForValue) { if (arrayValueBuilder_ == null) { ensureArrayValueIsMutable(); arrayValue_.set(index, builderForValue.build()); onChanged(); } else { arrayValueBuilder_.setMessage(index, builderForValue.build()); } return this; } /**
/** * <code>repeated .TypedValue parameter_values = 1;</code> */ public Builder addParameterValues( org.apache.calcite.avatica.proto.Common.TypedValue.Builder builderForValue) { if (parameterValuesBuilder_ == null) { ensureParameterValuesIsMutable(); parameterValues_.add(builderForValue.build()); onChanged(); } else { parameterValuesBuilder_.addMessage(builderForValue.build()); } return this; } /**
/** * <code>repeated .TypedValue array_value = 2;</code> */ public Builder addArrayValue( int index, org.apache.calcite.avatica.proto.Common.TypedValue.Builder builderForValue) { if (arrayValueBuilder_ == null) { ensureArrayValueIsMutable(); arrayValue_.add(index, builderForValue.build()); onChanged(); } else { arrayValueBuilder_.addMessage(index, builderForValue.build()); } return this; } /**
/** * <code>.TypedValue scalar_value = 4;</code> */ public Builder setScalarValue( org.apache.calcite.avatica.proto.Common.TypedValue.Builder builderForValue) { if (scalarValueBuilder_ == null) { scalarValue_ = builderForValue.build(); onChanged(); } else { scalarValueBuilder_.setMessage(builderForValue.build()); } return this; } /**
@Test public void testBase64() { byte[] bytes = "qwertyasdf".getBytes(UTF_8); // Plain bytes get put into protobuf for simplicitly Common.TypedValue proto = Common.TypedValue.newBuilder().setBytesValue( com.google.protobuf.ByteString.copyFrom(bytes)) .setType(Common.Rep.BYTE_STRING).build(); // But we should get back a b64-string to make sure TypedValue doesn't get confused. Object deserializedObj = TypedValue.getSerialFromProto(proto); assertThat(deserializedObj, is(instanceOf(String.class))); assertEquals(new ByteString(bytes).toBase64String(), (String) deserializedObj); // But we should get a non-b64 byte array as the JDBC representation deserializedObj = TypedValue.protoToJdbc(proto, DateTimeUtils.calendar()); assertThat(deserializedObj, is(instanceOf(byte[].class))); assertArrayEquals(bytes, (byte[]) deserializedObj); }
/** * <code>optional .TypedValue scalar_value = 4;</code> */ public Builder setScalarValue( org.apache.calcite.avatica.proto.Common.TypedValue.Builder builderForValue) { if (scalarValueBuilder_ == null) { scalarValue_ = builderForValue.build(); onChanged(); } else { scalarValueBuilder_.setMessage(builderForValue.build()); } return this; } /**
/** * <code>repeated .TypedValue array_value = 2;</code> */ public Builder addArrayValue( org.apache.calcite.avatica.proto.Common.TypedValue.Builder builderForValue) { if (arrayValueBuilder_ == null) { ensureArrayValueIsMutable(); arrayValue_.add(builderForValue.build()); onChanged(); } else { arrayValueBuilder_.addMessage(builderForValue.build()); } return this; } /**
/** * <code>.TypedValue value = 2;</code> */ public Builder setValue( org.apache.calcite.avatica.proto.Common.TypedValue.Builder builderForValue) { if (valueBuilder_ == null) { value_ = builderForValue.build(); onChanged(); } else { valueBuilder_.setMessage(builderForValue.build()); } return this; } /**
@Test public void testLegacyBase64StringEncodingForBytes() { // CALCITE-1103 CALCITE-1209 We observed that binary data was being // serialized as base-64 encoded strings instead of the native binary // data type in protobufs. We need to still handle older clients sending // data in this form. final byte[] bytes = "asdf".getBytes(UTF_8); final String base64Str = Base64.encodeBytes(bytes); Common.TypedValue.Builder builder = Common.TypedValue.newBuilder(); builder.setStringValue(base64Str); builder.setType(Common.Rep.BYTE_STRING); Common.TypedValue protoTv = builder.build(); TypedValue tv = TypedValue.fromProto(protoTv); assertEquals(Rep.BYTE_STRING, tv.type); assertEquals(base64Str, tv.value); }
/** * <code>.TypedValue scalar_value = 4;</code> */ public Builder setScalarValue( org.apache.calcite.avatica.proto.Common.TypedValue.Builder builderForValue) { if (scalarValueBuilder_ == null) { scalarValue_ = builderForValue.build(); onChanged(); } else { scalarValueBuilder_.setMessage(builderForValue.build()); } return this; } /**
/** * <code>repeated .TypedValue array_value = 2;</code> */ public Builder addArrayValue( int index, org.apache.calcite.avatica.proto.Common.TypedValue.Builder builderForValue) { if (arrayValueBuilder_ == null) { ensureArrayValueIsMutable(); arrayValue_.add(index, builderForValue.build()); onChanged(); } else { arrayValueBuilder_.addMessage(index, builderForValue.build()); } return this; } /**
/** * <code>repeated .TypedValue array_value = 2;</code> */ public Builder addArrayValue( org.apache.calcite.avatica.proto.Common.TypedValue.Builder builderForValue) { if (arrayValueBuilder_ == null) { ensureArrayValueIsMutable(); arrayValue_.add(builderForValue.build()); onChanged(); } else { arrayValueBuilder_.addMessage(builderForValue.build()); } return this; } /**
/** * <code>repeated .TypedValue parameter_values = 2;</code> */ public Builder addParameterValues( org.apache.calcite.avatica.proto.Common.TypedValue.Builder builderForValue) { if (parameterValuesBuilder_ == null) { ensureParameterValuesIsMutable(); parameterValues_.add(builderForValue.build()); onChanged(); } else { parameterValuesBuilder_.addMessage(builderForValue.build()); } return this; } /**
@Test public void testLegacyBase64StringEncodingForBytes() { // CALCITE-1103 CALCITE-1209 We observed that binary data was being // serialized as base-64 encoded strings instead of the native binary // data type in protobufs. We need to still handle older clients sending // data in this form. final byte[] bytes = "asdf".getBytes(UTF_8); final String base64Str = Base64.encodeBytes(bytes); Common.TypedValue.Builder builder = Common.TypedValue.newBuilder(); builder.setStringValue(base64Str); builder.setType(Common.Rep.BYTE_STRING); Common.TypedValue protoTv = builder.build(); TypedValue tv = TypedValue.fromProto(protoTv); assertEquals(Rep.BYTE_STRING, tv.type); assertEquals(base64Str, tv.value); }
/** * <code>.TypedValue value = 2;</code> */ public Builder setValue( org.apache.calcite.avatica.proto.Common.TypedValue.Builder builderForValue) { if (valueBuilder_ == null) { value_ = builderForValue.build(); onChanged(); } else { valueBuilder_.setMessage(builderForValue.build()); } return this; } /**
/** * <code>optional .TypedValue value = 2;</code> */ public Builder setValue( org.apache.calcite.avatica.proto.Common.TypedValue.Builder builderForValue) { if (valueBuilder_ == null) { value_ = builderForValue.build(); onChanged(); } else { valueBuilder_.setMessage(builderForValue.build()); } return this; } /**
static Common.TypedValue serializeScalar(Object element) { final Common.TypedValue.Builder valueBuilder = Common.TypedValue.newBuilder(); // Let TypedValue handle the serialization for us. TypedValue.toProto(valueBuilder, element); return valueBuilder.build(); }
@Test public void testLegacyDecimalParsing() { final BigDecimal decimal = new BigDecimal("123451234512345"); final Calendar calendar = DateTimeUtils.calendar(); // CALCITE-1103 Decimals were (incorrectly) getting serialized as normal "numbers" which // caused them to use the numberValue field. TypedValue should still be able to handle // values like this (but large values will be truncated and return bad values). Common.TypedValue oldProtoStyle = Common.TypedValue.newBuilder().setType(Common.Rep.NUMBER) .setNumberValue(decimal.longValue()).build(); TypedValue fromProtoTv = TypedValue.fromProto(oldProtoStyle); Object o = fromProtoTv.toJdbc(calendar); assertEquals(decimal, o); }
@Test public void testLegacyDecimalParsing() { final BigDecimal decimal = new BigDecimal("123451234512345"); final Calendar calendar = DateTimeUtils.calendar(); // CALCITE-1103 Decimals were (incorrectly) getting serialized as normal "numbers" which // caused them to use the numberValue field. TypedValue should still be able to handle // values like this (but large values will be truncated and return bad values). Common.TypedValue oldProtoStyle = Common.TypedValue.newBuilder().setType(Common.Rep.NUMBER) .setNumberValue(decimal.longValue()).build(); TypedValue fromProtoTv = TypedValue.fromProto(oldProtoStyle); Object o = fromProtoTv.toJdbc(calendar); assertEquals(decimal, o); }
static Common.TypedValue serializeScalar(Object element) { final Common.TypedValue.Builder valueBuilder = Common.TypedValue.newBuilder(); // Let TypedValue handle the serialization for us. TypedValue.toProto(valueBuilder, element); return valueBuilder.build(); }