private static TypeSignature makeSignature(List<Field> fields) { int size = fields.size(); if (size == 0) { throw new IllegalArgumentException("Row type must have at least 1 field"); } List<TypeSignatureParameter> parameters = fields.stream() .map(field -> TypeSignatureParameter.of(new NamedTypeSignature(field.getName().map(name -> new RowFieldName(name, false)), field.getType().getTypeSignature()))) .collect(Collectors.toList()); return new TypeSignature(ROW, parameters); }
@Override public String toString() { if (!isDelimited()) { return name; } return '"' + name.replace("\"", "\"\"") + '"'; }
private static ClientTypeSignatureParameter toClientTypeSignatureParameter(TypeSignatureParameter parameter) { switch (parameter.getKind()) { case TYPE: return ClientTypeSignatureParameter.ofType(toClientTypeSignature(parameter.getTypeSignature())); case NAMED_TYPE: return ClientTypeSignatureParameter.ofNamedType(new NamedClientTypeSignature( parameter.getNamedTypeSignature().getFieldName().map(value -> new RowFieldName(value.getName(), value.isDelimited())), toClientTypeSignature(parameter.getNamedTypeSignature().getTypeSignature()))); case LONG: return ClientTypeSignatureParameter.ofLong(parameter.getLongLiteral()); } throw new IllegalArgumentException("Unsupported kind: " + parameter.getKind()); }
private static ClientTypeSignatureParameter toClientTypeSignatureParameter(TypeSignatureParameter parameter) { switch (parameter.getKind()) { case TYPE: return ClientTypeSignatureParameter.ofType(toClientTypeSignature(parameter.getTypeSignature())); case NAMED_TYPE: return ClientTypeSignatureParameter.ofNamedType(new NamedClientTypeSignature( parameter.getNamedTypeSignature().getFieldName().map(value -> new RowFieldName(value.getName(), value.isDelimited())), toClientTypeSignature(parameter.getNamedTypeSignature().getTypeSignature()))); case LONG: return ClientTypeSignatureParameter.ofLong(parameter.getLongLiteral()); } throw new IllegalArgumentException("Unsupported kind: " + parameter.getKind()); }
private static NamedTypeSignature namedParameter(String name, boolean delimited, TypeSignature value) { return new NamedTypeSignature(Optional.of(new RowFieldName(name, delimited)), value); }
private static ClientTypeSignatureParameter toClientTypeSignatureParameter(TypeSignatureParameter parameter) { switch (parameter.getKind()) { case TYPE: return ClientTypeSignatureParameter.ofType(toClientTypeSignature(parameter.getTypeSignature())); case NAMED_TYPE: return ClientTypeSignatureParameter.ofNamedType(new NamedClientTypeSignature( parameter.getNamedTypeSignature().getFieldName().map(value -> new RowFieldName(value.getName(), value.isDelimited())), toClientTypeSignature(parameter.getNamedTypeSignature().getTypeSignature()))); case LONG: return ClientTypeSignatureParameter.ofLong(parameter.getLongLiteral()); } throw new IllegalArgumentException("Unsupported kind: " + parameter.getKind()); } }
private static NamedTypeSignature namedParameter(String name, boolean delimited, TypeSignature value) { return new NamedTypeSignature(Optional.of(new RowFieldName(name, delimited)), value); }
private static ClientTypeSignatureParameter toClientTypeSignatureParameter(TypeSignatureParameter parameter) { switch (parameter.getKind()) { case TYPE: return ClientTypeSignatureParameter.ofType(toClientTypeSignature(parameter.getTypeSignature())); case NAMED_TYPE: return ClientTypeSignatureParameter.ofNamedType(new NamedClientTypeSignature( parameter.getNamedTypeSignature().getFieldName().map(value -> new RowFieldName(value.getName(), value.isDelimited())), toClientTypeSignature(parameter.getNamedTypeSignature().getTypeSignature()))); case LONG: return ClientTypeSignatureParameter.ofLong(parameter.getLongLiteral()); } throw new IllegalArgumentException("Unsupported kind: " + parameter.getKind()); } }
private static TypeSignatureParameter parseTypeOrNamedType(String typeOrNamedType, Set<String> literalParameters) { int split = typeOrNamedType.indexOf(' '); // Type without space or simple type with spaces if (split == -1 || SIMPLE_TYPE_WITH_SPACES.contains(typeOrNamedType)) { return TypeSignatureParameter.of(new NamedTypeSignature(Optional.empty(), parseTypeSignature(typeOrNamedType, literalParameters))); } // Assume the first part of a structured type always has non-alphabetical character. // If the first part is a valid identifier, parameter is a named field. String firstPart = typeOrNamedType.substring(0, split); if (IDENTIFIER_PATTERN.matcher(firstPart).matches()) { return TypeSignatureParameter.of(new NamedTypeSignature( Optional.of(new RowFieldName(firstPart, false)), parseTypeSignature(typeOrNamedType.substring(split + 1).trim(), literalParameters))); } // Structured type composed from types with spaces. i.e. array(timestamp with time zone) return TypeSignatureParameter.of(new NamedTypeSignature(Optional.empty(), parseTypeSignature(typeOrNamedType, literalParameters))); }
IntStream.range(0, subTypes.size()) .mapToObj(idx -> TypeSignatureParameter.of( new NamedTypeSignature(Optional.of(new RowFieldName(String.format("%s%d", implicitPrefix, idx + 1), false)), subTypes.get(idx).get()))) .collect(toList())); parameters.add(TypeSignatureParameter.of(new NamedTypeSignature(Optional.of(new RowFieldName(key, false)), fieldType.get())));
private Type getType(List<String> fieldNames) { ImmutableList.Builder<TypeSignatureParameter> typeSignatureParameters = ImmutableList.builder(); for (String fieldName : fieldNames) { typeSignatureParameters.add(TypeSignatureParameter.of(new NamedTypeSignature(Optional.of(new RowFieldName(fieldName, false)), TEST_DATA_TYPE.getTypeSignature()))); } return TYPE_MANAGER.getParameterizedType(StandardTypes.ROW, typeSignatureParameters.build()); }
private static Type rowType(Type... fieldTypes) { ImmutableList.Builder<TypeSignatureParameter> typeSignatureParameters = ImmutableList.builder(); for (int i = 0; i < fieldTypes.length; i++) { String filedName = "field_" + i; Type fieldType = fieldTypes[i]; typeSignatureParameters.add(TypeSignatureParameter.of(new NamedTypeSignature(Optional.of(new RowFieldName(filedName, false)), fieldType.getTypeSignature()))); } return TYPE_MANAGER.getParameterizedType(StandardTypes.ROW, typeSignatureParameters.build()); } }
private Type getType(List<String> fieldNames) { ImmutableList.Builder<TypeSignatureParameter> typeSignatureParameters = ImmutableList.builder(); for (String fieldName : fieldNames) { typeSignatureParameters.add(TypeSignatureParameter.of(new NamedTypeSignature(Optional.of(new RowFieldName(fieldName, false)), TEST_DATA_TYPE.getTypeSignature()))); } return TYPE_MANAGER.getParameterizedType(StandardTypes.ROW, typeSignatureParameters.build()); }
private static Type rowType(Type... fieldTypes) { ImmutableList.Builder<TypeSignatureParameter> typeSignatureParameters = ImmutableList.builder(); for (int i = 0; i < fieldTypes.length; i++) { String filedName = "field_" + i; Type fieldType = fieldTypes[i]; typeSignatureParameters.add(TypeSignatureParameter.of(new NamedTypeSignature(Optional.of(new RowFieldName(filedName, false)), fieldType.getTypeSignature()))); } return TYPE_MANAGER.getParameterizedType(StandardTypes.ROW, typeSignatureParameters.build()); } }
private static RowType toRowType(List<ColumnMetadata> columns) { return rowType(columns.stream() .map(col -> new NamedTypeSignature(Optional.of(new RowFieldName(format("f_%s", col.getName()), false)), col.getType().getTypeSignature())) .collect(toList())); }
private static RowType toRowType(List<ColumnMetadata> columns) { return rowType(columns.stream() .map(col -> new NamedTypeSignature(Optional.of(new RowFieldName(format("f_%s", col.getName()), false)), col.getType().getTypeSignature())) .collect(toList())); }
verify(delimitedColumnName != null, "Expect delimitedColumnName to be non-null"); fields.add(TypeSignatureParameter.of(new NamedTypeSignature( Optional.of(new RowFieldName(delimitedColumnName, true)), parseTypeSignature(signature.substring(tokenStart, i).trim(), literalParameters)))); delimitedColumnName = null; verify(delimitedColumnName != null, "Expect delimitedColumnName to be non-null"); fields.add(TypeSignatureParameter.of(new NamedTypeSignature( Optional.of(new RowFieldName(delimitedColumnName, true)), parseTypeSignature(signature.substring(tokenStart, i).trim(), literalParameters)))); delimitedColumnName = null;
typeSignatureBuilder.add(TypeSignatureParameter.of(new NamedTypeSignature(Optional.of(new RowFieldName(rowFieldName, false)), typeSignature)));
@Test public void testTypeSignatureRoundTrip() { TypeManager typeManager = new TypeRegistry(); TypeSignature typeSignature = new TypeSignature( ROW, TypeSignatureParameter.of(new NamedTypeSignature(Optional.of(new RowFieldName("col1", false)), new TypeSignature(BIGINT))), TypeSignatureParameter.of(new NamedTypeSignature(Optional.of(new RowFieldName("col2", true)), new TypeSignature(DOUBLE)))); List<TypeParameter> parameters = typeSignature.getParameters().stream() .map(parameter -> TypeParameter.of(parameter, typeManager)) .collect(Collectors.toList()); Type rowType = RowParametricType.ROW.createType(typeManager, parameters); assertEquals(rowType.getTypeSignature(), typeSignature); } }
@Test public void testTypeSignatureRoundTrip() { TypeManager typeManager = new TypeRegistry(); TypeSignature typeSignature = new TypeSignature( ROW, TypeSignatureParameter.of(new NamedTypeSignature(Optional.of(new RowFieldName("col1", false)), new TypeSignature(BIGINT))), TypeSignatureParameter.of(new NamedTypeSignature(Optional.of(new RowFieldName("col2", true)), new TypeSignature(DOUBLE)))); List<TypeParameter> parameters = typeSignature.getParameters().stream() .map(parameter -> TypeParameter.of(parameter, typeManager)) .collect(Collectors.toList()); Type rowType = RowParametricType.ROW.createType(typeManager, parameters); assertEquals(rowType.getTypeSignature(), typeSignature); } }