in contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/storage/avro/PigAvroDatumWriter.java [137:210]
protected boolean instanceOf(Schema schema, Object datum)
throws IOException {
try {
switch (schema.getType()) {
case RECORD:
if (datum instanceof Tuple) {
Tuple tuple = (Tuple) datum;
List<Field> fields = schema.getFields();
if (fields.size() != tuple.size()) {
return false;
}
for (int i = 0; i < fields.size(); i++) {
if (!instanceOf(fields.get(i).schema(), tuple.get(i)))
return false;
}
return true;
}
return false;
case UNION:
@SuppressWarnings("unused")
int index = resolveUnionSchema(schema, datum);
return true;
case ENUM:
return datum instanceof String && schema.hasEnumSymbol(((String) datum))
|| unwrappedInstanceOf(schema, datum);
case ARRAY:
return datum instanceof DataBag
|| unwrappedInstanceOf(schema, datum);
case MAP:
return datum instanceof Map
|| unwrappedInstanceOf(schema, datum);
case FIXED:
return datum instanceof DataByteArray && ((DataByteArray) datum).size() == schema.getFixedSize()
|| unwrappedInstanceOf(schema, datum);
case STRING:
return datum instanceof String
|| unwrappedInstanceOf(schema, datum);
case BYTES:
return datum instanceof DataByteArray
|| unwrappedInstanceOf(schema, datum);
case INT:
return datum instanceof Integer
|| unwrappedInstanceOf(schema, datum);
case LONG:
return datum instanceof Long
|| datum instanceof Integer
|| unwrappedInstanceOf(schema, datum);
case FLOAT:
return datum instanceof Float
|| datum instanceof Integer
|| datum instanceof Long
|| unwrappedInstanceOf(schema, datum);
case DOUBLE:
return datum instanceof Double
|| datum instanceof Float
|| datum instanceof Integer
|| datum instanceof Long
|| unwrappedInstanceOf(schema, datum);
case BOOLEAN:
return datum instanceof Boolean
|| datum instanceof Integer
|| unwrappedInstanceOf(schema, datum);
case NULL:
return datum == null;
default:
throw new RuntimeException("Unexpected type: " + schema);
}
} catch (ExecException e) {
e.printStackTrace(System.err);
throw new RuntimeException(e);
}
}