@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); } }
private static TypeSignatureParameter legacyClientTypeSignatureParameterToTypeSignatureParameter(ClientTypeSignatureParameter parameter) { switch (parameter.getKind()) { case LONG: throw new UnsupportedOperationException("Unexpected long type literal returned by legacy server"); case TYPE: return TypeSignatureParameter.of(toTypeSignature(parameter.getTypeSignature())); case NAMED_TYPE: return TypeSignatureParameter.of(parameter.getNamedTypeSignature()); default: throw new UnsupportedOperationException("Unknown parameter kind " + parameter.getKind()); } }
public Long getLongLiteral() { return getValue(ParameterKind.LONG, Long.class); }
/** * This field is deprecated and clients should switch to {@link #getArguments()} */ @Deprecated @JsonProperty public List<Object> getLiteralArguments() { List<Object> result = new ArrayList<>(); for (ClientTypeSignatureParameter argument : arguments) { switch (argument.getKind()) { case NAMED_TYPE: result.add(argument.getNamedTypeSignature().getName()); break; default: return new ArrayList<>(); } } return result; }
return new SchemaField(c.getName(), fromPrestoType(c.getTypeSignature().getRawType(), arguments.stream() .filter(argument -> argument.getKind() == com.facebook.presto.spi.type.ParameterKind.TYPE) .map(argument -> argument.getTypeSignature().getRawType()).iterator())); }) .collect(Collectors.toList());
@Override public String toString() { if (rawType.equals(StandardTypes.ROW)) { return rowToString(); } else { StringBuilder typeName = new StringBuilder(rawType); if (!arguments.isEmpty()) { typeName.append("("); boolean first = true; for (ClientTypeSignatureParameter argument : arguments) { if (!first) { typeName.append(","); } first = false; typeName.append(argument.toString()); } typeName.append(")"); } return typeName.toString(); } }
/** * This field is deprecated and clients should switch to {@link #getArguments()} */ @Deprecated @JsonProperty public List<Object> getLiteralArguments() { List<Object> result = new ArrayList<>(); for (ClientTypeSignatureParameter argument : arguments) { switch (argument.getKind()) { case NAMED_TYPE: result.add(argument.getNamedTypeSignature().getName()); break; default: return new ArrayList<>(); } } return result; }
@Override public String toString() { if (rawType.equals(StandardTypes.ROW)) { return rowToString(); } else { StringBuilder typeName = new StringBuilder(rawType); if (!arguments.isEmpty()) { typeName.append("("); boolean first = true; for (ClientTypeSignatureParameter argument : arguments) { if (!first) { typeName.append(","); } first = false; typeName.append(argument.toString()); } typeName.append(")"); } return typeName.toString(); } }
/** * This field is deprecated and clients should switch to {@link #getArguments()} */ @Deprecated @JsonProperty public List<ClientTypeSignature> getTypeArguments() { List<ClientTypeSignature> result = new ArrayList<>(); for (ClientTypeSignatureParameter argument : arguments) { switch (argument.getKind()) { case TYPE: result.add(argument.getTypeSignature()); break; case NAMED_TYPE: result.add(new ClientTypeSignature(argument.getNamedTypeSignature().getTypeSignature())); break; default: return new ArrayList<>(); } } return result; }
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));
public NamedTypeSignature getNamedTypeSignature() { return getValue(ParameterKind.NAMED_TYPE, NamedTypeSignature.class); }
private static TypeSignatureParameter legacyClientTypeSignatureParameterToTypeSignatureParameter(ClientTypeSignatureParameter parameter) { switch (parameter.getKind()) { case LONG: throw new UnsupportedOperationException("Unexpected long type literal returned by legacy server"); case TYPE: return TypeSignatureParameter.of(toTypeSignature(parameter.getTypeSignature())); case NAMED_TYPE: return TypeSignatureParameter.of(parameter.getNamedTypeSignature()); default: throw new UnsupportedOperationException("Unknown parameter kind " + parameter.getKind()); } }
@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); }
public ClientTypeSignature getTypeSignature() { return getValue(ParameterKind.TYPE, ClientTypeSignature.class); }
/** * This field is deprecated and clients should switch to {@link #getArguments()} */ @Deprecated @JsonProperty public List<ClientTypeSignature> getTypeArguments() { List<ClientTypeSignature> result = new ArrayList<>(); for (ClientTypeSignatureParameter argument : arguments) { switch (argument.getKind()) { case TYPE: result.add(argument.getTypeSignature()); break; case NAMED_TYPE: result.add(new ClientTypeSignature(argument.getNamedTypeSignature().getTypeSignature())); break; default: return new ArrayList<>(); } } return result; }
@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)))))); }
public ClientTypeSignature getTypeSignature() { return getValue(ParameterKind.TYPE, ClientTypeSignature.class); }
@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); } }
public NamedTypeSignature getNamedTypeSignature() { return getValue(ParameterKind.NAMED_TYPE, NamedTypeSignature.class); }
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));