Anthony Hsu created AVRO-2078:
---------------------------------
Summary: Avro does not enforce schema resolution rules for Decimal
type
Key: AVRO-2078
URL: https://issues.apache.org/jira/browse/AVRO-2078
Project: Avro
Issue Type: Bug
Reporter: Anthony Hsu
Fix For: 1.8.2
According to http://avro.apache.org/docs/1.8.2/spec.html#Decimal
bq. For the purposes of schema resolution, two schemas that are {{decimal}}
logical types _match_ if their scales and precisions match.
This is not enforced.
I wrote a file with (precision 5, scale 2) and tried to read it with a reader
schema with (precision 3, scale 1). I expected an AvroTypeException to be
thrown, but none was thrown.
Test data file attached. The code to read it is:
{noformat:title=ReadDecimal.java}
import java.io.File;
import org.apache.avro.Schema;
import org.apache.avro.file.DataFileReader;
import org.apache.avro.generic.GenericDatumReader;
import org.apache.avro.generic.GenericRecord;
import org.apache.avro.io.DatumReader;
public class ReadDecimal {
public static void main(String[] args) throws Exception {
Schema schema = new Schema.Parser().parse("{\n" + " \"type\" :
\"record\",\n" + " \"name\" : \"some_schema\",\n"
+ " \"namespace\" : \"com.howdy\",\n" + " \"fields\" : [ {\n" + "
\"name\" : \"name\",\n"
+ " \"type\" : \"string\"\n" + " }, {\n" + " \"name\" :
\"value\",\n" + " \"type\" : {\n"
+ " \"type\" : \"bytes\",\n" + " \"logicalType\" :
\"decimal\",\n" + " \"precision\" : 3,\n"
+ " \"scale\" : 1\n" + " }\n" + " } ]\n" + "}");
DatumReader<GenericRecord> datumReader = new GenericDatumReader<>(schema);
// dec.avro has precision 5, scale 2
DataFileReader<GenericRecord> dataFileReader = new DataFileReader<>(
new File("/tmp/dec.avro"), datumReader);
GenericRecord foo = null;
while (dataFileReader.hasNext()) {
foo = dataFileReader.next(foo); // AvroTypeException expected due to
change in scale/precision but none occurs
}
}
}
{noformat}
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)