private static Object convertAvroArray(Field beamField, Object value) { // Check whether the type of array element is equal. List<Object> values = (List<Object>) value; List<Object> ret = new ArrayList(); for (Object v : values) { ret.add( convertAvroPrimitiveTypes( beamField.getType().getCollectionElementType().getTypeName(), v)); } return (Object) ret; }
@Override public boolean equals(Object o) { if (!(o instanceof Field)) { return false; } Field other = (Field) o; return Objects.equals(getName(), other.getName()) && Objects.equals(getDescription(), other.getDescription()) && Objects.equals(getType(), other.getType()) && Objects.equals(getNullable(), other.getNullable()); }
@Nullable @Override @SuppressWarnings({"TypeParameterUnusedInFormals", "unchecked"}) public <T> T getValue(int fieldIdx) { Field field = getSchema().getField(fieldIdx); FieldType type = field.getType(); Object fieldValue = getters.get(fieldIdx).get(getterTarget); if (fieldValue == null && !field.getNullable()) { throw new RuntimeException("Null value set on non-nullable field" + field); } return fieldValue != null ? getValue(type, fieldValue, fieldIdx) : null; }
private Schema payloadSchema() { return messageSchema().getField(PAYLOAD_FIELD).getType().getRowSchema(); }
private static Object[] rowToAvatica(Row row) { Schema schema = row.getSchema(); Object[] convertedColumns = new Object[schema.getFields().size()]; int i = 0; for (Schema.Field field : schema.getFields()) { convertedColumns[i] = fieldToAvatica(field.getType(), row.getValue(i)); ++i; } return convertedColumns; }
@Override public int hashCode() { return Objects.hash(getName(), getDescription(), getType(), getNullable()); } }
/** Return the estimated serialized size of a give row object. */ public static long estimatedSizeBytes(Row row) { Schema schema = row.getSchema(); int fieldCount = schema.getFieldCount(); int bitmapSize = (((fieldCount - 1) >> 6) + 1) * 8; int fieldsSize = 0; for (int i = 0; i < schema.getFieldCount(); ++i) { fieldsSize += (int) estimatedSizeBytes(schema.getField(i).getType(), row.getValue(i)); } return (long) bitmapSize + fieldsSize; }
@Test public void testArrayOfRowSchema() { Schema nestedSchema = Schema.of(Field.of("f1_str", FieldType.STRING)); FieldType arrayType = FieldType.array(FieldType.row(nestedSchema)); Schema schema = Schema.of(Field.of("f_array", arrayType)); Field field = schema.getField("f_array"); assertEquals("f_array", field.getName()); assertEquals(arrayType, field.getType()); }
@Test public void testNestedSchema() { Schema nestedSchema = Schema.of(Field.of("f1_str", FieldType.STRING)); Schema schema = Schema.of(Field.of("nested", FieldType.row(nestedSchema))); Field inner = schema.getField("nested").getType().getRowSchema().getField("f1_str"); assertEquals("f1_str", inner.getName()); assertEquals(FieldType.STRING, inner.getType()); }
static void verifyFieldTypeSupported(Schema.Field field) { Schema.FieldType fieldType = field.getType(); verifyFieldTypeSupported(fieldType); }
private String unparseRow(FieldType fieldType) { return "ROW<" + fieldType .getRowSchema() .getFields() .stream() .map(field -> field.getName() + " " + unparse(field.getType())) .collect(joining(",")) + ">"; } }
private static RelDataType toRelDataType( RelDataTypeFactory dataTypeFactory, Schema schema, int fieldIndex) { Schema.Field field = schema.getField(fieldIndex); RelDataType type = toRelDataType(dataTypeFactory, field.getType()); return dataTypeFactory.createTypeWithNullability(type, field.getNullable()); }
private SqlTypeName getFieldType(Row row, String fieldName) { Schema.Field field = row.getSchema().getField(fieldName); return CalciteUtils.toSqlTypeName(field.getType()); } }
@Test public void testNestedArraySchema() { FieldType arrayType = FieldType.array(FieldType.array(FieldType.STRING)); Schema schema = Schema.of(Field.of("f_array", arrayType)); Field field = schema.getField("f_array"); assertEquals("f_array", field.getName()); assertEquals(arrayType, field.getType()); }
@Test public void testArraySchema() { FieldType arrayType = FieldType.array(FieldType.STRING); Schema schema = Schema.of(Field.of("f_array", arrayType)); Field field = schema.getField("f_array"); assertEquals("f_array", field.getName()); assertEquals(arrayType, field.getType()); }
private boolean equivalent(Field otherField, EquivalenceNullablePolicy nullablePolicy) { if (nullablePolicy == EquivalenceNullablePolicy.SAME && !otherField.getNullable().equals(getNullable())) { return false; } else if (nullablePolicy == EquivalenceNullablePolicy.WEAKEN) { if (getNullable() && !otherField.getNullable()) { return false; } } return otherField.getName().equals(getName()) && getType().equivalent(otherField.getType()); }
private static void unnestRow(Row input, Row.Builder output) { for (int i = 0; i < input.getSchema().getFieldCount(); ++i) { Field field = input.getSchema().getField(i); if (field.getType().getTypeName().isCompositeType()) { unnestRow(input.getRow(i), output); } else { output.addValue(input.getValue(i)); } } } /** A {@link PTransform} that unnests nested row. */
private void unparseColumn(SqlWriter writer, Schema.Field column) { writer.sep(","); writer.identifier(column.getName()); writer.identifier(CalciteUtils.toSqlTypeName(column.getType()).name()); if (column.getNullable() != null && !column.getNullable()) { writer.keyword("NOT NULL"); } if (column.getDescription() != null) { writer.keyword("COMMENT"); writer.literal(column.getDescription()); } }
@Override public int hashCode() { int h = 1; for (int i = 0; i < getFieldCount(); i++) { h = 31 * h + Equals.deepHashCode(getValue(i), getSchema().getField(i).getType()); } return h; }