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

Inconsistent behavior of Perl API with 'boolean' type

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • None
    • None
    • perl
    • None
    • Perl API: Only accept 0 and 1 as boolean values, fix encoding

    Description

      The perl boolean serialization code in BinaryEncoder.pm encodes anything false to perl, such as 0, '0', '', () and undef, as false, and anything true to perl, which is literally everything else, as true.

      Inconsistent with the above serialization, the code used in Schema.pm to determine which union branch to use, is checking for boolean-ness with:

      m{yes|no|y|n|t|f|true|false}i
      

      meaning only those particular strings are considered booleans.

      So all those values, including 'no' 'n' 'f' and 'false', still get serialized to true.

      We could just standardize on one of the two and use it consistently. But neither works that well in unions, because unless you put the boolean type last in the union definition, a wide variety of data will be downcast to boolean type.

      Perl has no built-in or standardized boolean type, so there's no solution like we have in the other language Avro APIs. But we could do as the perl JSON module does, and define objects for true and false.

      Attachments

        Issue Links

          Activity

            People

              jkarp John Karp
              jkarp John Karp
              Votes:
              2 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated: