in parquet-cli/src/main/java/org/apache/parquet/cli/json/AvroJson.java [281:363]
private static boolean matches(JsonNode datum, Schema schema) {
switch (schema.getType()) {
case RECORD:
if (datum.isObject()) {
// check that each field is present or has a default
boolean missingField = false;
for (Schema.Field field : schema.getFields()) {
if (!datum.has(field.name()) && field.defaultVal() == null) {
missingField = true;
break;
}
}
if (!missingField) {
return true;
}
}
break;
case UNION:
if (resolveUnion(datum, schema.getTypes()) != null) {
return true;
}
break;
case MAP:
if (datum.isObject()) {
return true;
}
break;
case ARRAY:
if (datum.isArray()) {
return true;
}
break;
case BOOLEAN:
if (datum.isBoolean()) {
return true;
}
break;
case FLOAT:
if (datum.isFloat() || datum.isInt()) {
return true;
}
break;
case DOUBLE:
if (datum.isDouble() || datum.isFloat() || datum.isLong() || datum.isInt()) {
return true;
}
break;
case INT:
if (datum.isInt()) {
return true;
}
break;
case LONG:
if (datum.isLong() || datum.isInt()) {
return true;
}
break;
case STRING:
if (datum.isTextual()) {
return true;
}
break;
case ENUM:
if (datum.isTextual() && schema.hasEnumSymbol(datum.textValue())) {
return true;
}
break;
case BYTES:
case FIXED:
if (datum.isBinary()) {
return true;
}
break;
case NULL:
if (datum == null || datum.isNull()) {
return true;
}
break;
default: // UNION or unknown
throw new IllegalArgumentException("Unsupported schema: " + schema);
}
return false;
}