Yang Xu created AVRO-2923:
-----------------------------

             Summary: GenericDatum::logicalType() API should return the logical 
type corresponing to one of the constituent types of the union
                 Key: AVRO-2923
                 URL: https://issues.apache.org/jira/browse/AVRO-2923
             Project: Apache Avro
          Issue Type: Bug
          Components: c++
    Affects Versions: 1.10.0
            Reporter: Yang Xu


According to the avro document, GenericDatum::logicalType() API should behave 
Just like GenericDatum::type() or GenericDatum::value() APIs to return the 
logical type corresponing to one of the constituent types of the union When it 
was a Union type.
{code:cpp}
inline Type GenericDatum::type() const {
    return (type_ == AVRO_UNION) ?
#if __cplusplus >= 201703L
        std::any_cast<GenericUnion>(&value_)->datum().type() :
#else
        boost::any_cast<GenericUnion>(&value_)->datum().type() :
#endif
        type_;
}

template<typename T> T& GenericDatum::value() {
    return (type_ == AVRO_UNION) ?
#if __cplusplus >= 201703L
        std::any_cast<GenericUnion>(&value_)->datum().value<T>() :
        *std::any_cast<T>(&value_);
#else
        boost::any_cast<GenericUnion>(&value_)->datum().value<T>() :
        *boost::any_cast<T>(&value_);
#endif
}
{code}

while logicalType api was like this: 
{code:cpp}
inline LogicalType GenericDatum::logicalType() const {
    return logicalType_;
}
{code}

it should also do the GenericUnion check



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to