avro-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "John Karp (JIRA)" <j...@apache.org>
Subject [jira] [Created] (AVRO-1521) Inconsistent behavior of Perl API with 'boolean' type
Date Fri, 30 May 2014 18:31:03 GMT
John Karp created AVRO-1521:
-------------------------------

             Summary: Inconsistent behavior of Perl API with 'boolean' type
                 Key: AVRO-1521
                 URL: https://issues.apache.org/jira/browse/AVRO-1521
             Project: Avro
          Issue Type: Bug
          Components: perl
            Reporter: John Karp
            Assignee: John Karp


h1. Boolean Serialization
The boolean serialization code in BinaryEncoder.pm is:
{noformat}
$data ? \0x1 : \0x0
{noformat}
intending that anything false to perl, such as 0, '0', '', () and undef are encoded as zero,
and everything else is encoded as one. However, this code doesn't work, as these unit tests
would indicate:
{noformat}
primitive_ok boolean => 0, "\x0";
primitive_ok boolean => 1, "\x1";
{noformat}
which print:
{noformat}
#   Failed test 'primitive boolean encoded correctly'
#   at t/02_bin_encode.t line 40.
#          got: '30'
#     expected: '00'

#   Failed test 'primitive boolean encoded correctly'
#   at t/02_bin_encode.t line 40.
#          got: '31'
#     expected: '01'
{noformat}

h1. Booleans in Unions
Inconsistent with the above serialization, the code used in Schema.pm to determine which union
branch to use, is attempting to check for boolean-ness with:
{noformat}
m{yes|no|y|n|t|f|true|false}i
{noformat}
meaning only those particular strings are considered booleans, however they will all get encoded
as '0' by BinaryEncoder.pm.

I say 'attempts' because its actually matching this regex against the data type name $type,
which in this context will always be 'boolean', instead of of the value $data.

h1. Suggested Fix
Perl has no boolean type, so there's no ideal solution for the inconsistency. But we could
keep it simple, and have only the numbers 0 and 1 accepted as boolean values.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Mime
View raw message