Uploaded image for project: 'Apache Avro'
  1. Apache Avro
  2. AVRO-2209

Default value type validation over-zealous

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 1.8.2
    • 1.9.0
    • c++
    • None

    Description

      From the Avro specification re default values (and hence JSON encoding in general):

       

      field default values
      avro type json type example
      null null null
      boolean boolean true
      int,long integer 1
      float,double number 1.1
      bytes string "\u00FF"
      string string "foo"
      record object {"a": 1}
      enum string "FOO"
      array array [1]
      map object {"a": 1}
      fixed string "\u00ff"

       

      Note that float and double have a "json type" of number (while int, long have a "json type" of integer. In JSON an integer is a number that is constrained to be an integer. There is no way to deduce from a JSON value that has no fractional part whether that value is a number or an integer - it is either/both.

      I believe that the following schema is, on that basis, valid:

      "{ \"name\":\"test\", \"type\": \"record\", \"fields\": [

      {\"name\": \"double\",\"type\": \"double\",\"default\" : 2 }

      ]}",

       We have a substantial body of similar schema in use but have not attempted to use C++ to resolve them before - and now this is failing.

       Fix is reasonably straight forward - PR with tests:

      https://github.com/apache/avro/pull/326

       

       

       

      Attachments

        Activity

          People

            da77a Darryl Green
            da77a Darryl Green
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: