@Override @JsonValue public String toString() { if (parameters.isEmpty()) { return base; } if (base.equalsIgnoreCase(StandardTypes.VARCHAR) && (parameters.size() == 1) && parameters.get(0).isLongLiteral() && parameters.get(0).getLongLiteral() == VarcharType.UNBOUNDED_LENGTH) { return base; } StringBuilder typeName = new StringBuilder(base); typeName.append("(").append(parameters.get(0)); for (int i = 1; i < parameters.size(); i++) { typeName.append(",").append(parameters.get(i)); } typeName.append(")"); return typeName.toString(); }
private static void checkNoLiteralVariableUsageAcrossTypes(TypeSignature typeSignature, Map<String, TypeSignature> existingUsages) { List<TypeSignatureParameter> variables = typeSignature.getParameters().stream() .filter(TypeSignatureParameter::isVariable) .collect(toList()); for (TypeSignatureParameter variable : variables) { TypeSignature existing = existingUsages.get(variable.getVariable()); if (existing != null && !existing.equals(typeSignature)) { throw new UnsupportedOperationException("Literal parameters may not be shared across different types"); } existingUsages.put(variable.getVariable(), typeSignature); } for (TypeSignatureParameter parameter : typeSignature.getParameters()) { if (parameter.isLongLiteral() || parameter.isVariable()) { continue; } checkNoLiteralVariableUsageAcrossTypes(parameter.getTypeSignatureOrNamedTypeSignature().get(), existingUsages); } }
@Test public void parseSignatureWithLiterals() { TypeSignature result = parseTypeSignature("decimal(X,42)", ImmutableSet.of("X")); assertEquals(result.getParameters().size(), 2); assertEquals(result.getParameters().get(0).isVariable(), true); assertEquals(result.getParameters().get(1).isLongLiteral(), true); }
@Override @JsonValue public String toString() { if (parameters.isEmpty()) { return base; } if (base.equalsIgnoreCase(StandardTypes.VARCHAR) && (parameters.size() == 1) && parameters.get(0).isLongLiteral() && parameters.get(0).getLongLiteral() == VarcharType.UNBOUNDED_LENGTH) { return base; } StringBuilder typeName = new StringBuilder(base); typeName.append("(").append(parameters.get(0)); for (int i = 1; i < parameters.size(); i++) { typeName.append(",").append(parameters.get(i)); } typeName.append(")"); return typeName.toString(); }
TypeSignatureParameter secondParameter = secondTypeTypeParameters.get(i); if (firstParameter.isLongLiteral() && secondParameter.isLongLiteral()) { typeParameters.add(TypeSignatureParameter.of(Math.max( firstParameter.getLongLiteral(),
if (!actualParameter.isLongLiteral()) { throw new IllegalArgumentException(format("Expected type %s parameter %s to be a numeric literal", actualType, index));
if (!typeSignatureParameter.isLongLiteral()) { return false; else if (componentParameter.isLongLiteral()) { if (!typeSignatureParameter.isLongLiteral()) { return false;