@Override public ClientTypeSignatureParameter deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { JsonNode node = jp.getCodec().readTree(jp); ParameterKind kind = MAPPER.readValue(MAPPER.treeAsTokens(node.get("kind")), ParameterKind.class); JsonParser jsonValue = MAPPER.treeAsTokens(node.get("value")); Object value; switch (kind) { case TYPE: value = MAPPER.readValue(jsonValue, ClientTypeSignature.class); break; case NAMED_TYPE: value = MAPPER.readValue(jsonValue, NamedTypeSignature.class); break; case LONG: value = MAPPER.readValue(jsonValue, Long.class); break; default: throw new UnsupportedOperationException(format("Unsupported kind [%s]", kind)); } return new ClientTypeSignatureParameter(kind, value); } }
Object value = literalArguments.get(i); checkArgument(value instanceof String, "Expected literalArgument %d in %s to be a string", i, literalArguments); convertedArguments.add(new ClientTypeSignatureParameter(TypeSignatureParameter.of(new NamedTypeSignature( Optional.of(new RowFieldName((String) value, false)), toTypeSignature(typeArguments.get(i)))))); checkArgument(literalArguments.isEmpty(), "Unexpected literal arguments from legacy server"); for (ClientTypeSignature typeArgument : typeArguments) { convertedArguments.add(new ClientTypeSignatureParameter(ParameterKind.TYPE, typeArgument));
@Test public void testBackwardsCompatible() { ClientTypeSignature signature = new ClientTypeSignature(StandardTypes.ARRAY, ImmutableList.of(new ClientTypeSignatureParameter(TypeSignatureParameter.of(BIGINT.getTypeSignature())))); ClientTypeSignature legacy = CLIENT_TYPE_SIGNATURE_CODEC.fromJson("{\"rawType\":\"array\",\"literalArguments\":[],\"typeArguments\":[{\"rawType\":\"bigint\",\"literalArguments\":[],\"typeArguments\":[]}]}"); assertEquals(legacy, signature); }
@Test public void testJsonRoundTrip() { TypeSignature bigint = BIGINT.getTypeSignature(); assertJsonRoundTrip(new ClientTypeSignature(bigint)); assertJsonRoundTrip(new ClientTypeSignature( "array", ImmutableList.of(new ClientTypeSignatureParameter(TypeSignatureParameter.of(bigint))))); assertJsonRoundTrip(new ClientTypeSignature( "foo", ImmutableList.of(new ClientTypeSignatureParameter(TypeSignatureParameter.of(42))))); assertJsonRoundTrip(new ClientTypeSignature( "row", ImmutableList.of( new ClientTypeSignatureParameter(TypeSignatureParameter.of(new NamedTypeSignature(Optional.of(new RowFieldName("foo", false)), bigint))), new ClientTypeSignatureParameter(TypeSignatureParameter.of(new NamedTypeSignature(Optional.of(new RowFieldName("bar", false)), bigint)))))); }
@Override public ClientTypeSignatureParameter deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { JsonNode node = jp.getCodec().readTree(jp); ParameterKind kind = MAPPER.readValue(MAPPER.treeAsTokens(node.get("kind")), ParameterKind.class); JsonParser jsonValue = MAPPER.treeAsTokens(node.get("value")); Object value; switch (kind) { case TYPE: value = MAPPER.readValue(jsonValue, ClientTypeSignature.class); break; case NAMED_TYPE: value = MAPPER.readValue(jsonValue, NamedTypeSignature.class); break; case LONG: value = MAPPER.readValue(jsonValue, Long.class); break; default: throw new UnsupportedOperationException(format("Unsupported kind [%s]", kind)); } return new ClientTypeSignatureParameter(kind, value); } }
Object value = literalArguments.get(i); checkArgument(value instanceof String, "Expected literalArgument %d in %s to be a string", i, literalArguments); convertedArguments.add(new ClientTypeSignatureParameter(TypeSignatureParameter.of(new NamedTypeSignature((String) value, toTypeSignature(typeArguments.get(i)))))); checkArgument(literalArguments.isEmpty(), "Unexpected literal arguments from legacy server"); for (ClientTypeSignature typeArgument : typeArguments) { convertedArguments.add(new ClientTypeSignatureParameter(ParameterKind.TYPE, typeArgument));
@Test public void testBackwardsCompatible() { ClientTypeSignature signature = new ClientTypeSignature(StandardTypes.ARRAY, ImmutableList.of(new ClientTypeSignatureParameter(TypeSignatureParameter.of(BIGINT.getTypeSignature())))); ClientTypeSignature legacy = CLIENT_TYPE_SIGNATURE_CODEC.fromJson("{\"rawType\":\"array\",\"literalArguments\":[],\"typeArguments\":[{\"rawType\":\"bigint\",\"literalArguments\":[],\"typeArguments\":[]}]}"); assertEquals(legacy, signature); }
@Test public void testJsonRoundTrip() { TypeSignature bigint = BIGINT.getTypeSignature(); assertJsonRoundTrip(new ClientTypeSignature(bigint)); assertJsonRoundTrip(new ClientTypeSignature( "array", ImmutableList.of(new ClientTypeSignatureParameter(TypeSignatureParameter.of(bigint))))); assertJsonRoundTrip(new ClientTypeSignature( "foo", ImmutableList.of(new ClientTypeSignatureParameter(TypeSignatureParameter.of(42))))); assertJsonRoundTrip(new ClientTypeSignature( "row", ImmutableList.of( new ClientTypeSignatureParameter(TypeSignatureParameter.of(new NamedTypeSignature(Optional.of(new RowFieldName("foo", false)), bigint))), new ClientTypeSignatureParameter(TypeSignatureParameter.of(new NamedTypeSignature(Optional.of(new RowFieldName("bar", false)), bigint)))))); }