[prev in list] [next in list] [prev in thread] [next in thread] 

List:       avro-dev
Subject:    [jira] [Commented] (AVRO-1571) Support parameterized types in Avro
From:       "Sachin Goyal (JIRA)" <jira () apache ! org>
Date:       2014-08-23 18:10:11
Message-ID: JIRA.12736264.1408816531421.20156.1408817411935 () arcas
[Download RAW message or body]


    [ https://issues.apache.org/jira/browse/AVRO-1571?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14108076#comment-14108076 \
] 

Sachin Goyal commented on AVRO-1571:
------------------------------------

If we pass an obj of type 'ParentContext' to ReflectData#createSchema() (and couple \
of their downstream functions), following schema can be generated.

{code:javascript}
{
  "type" : "record",
  "name" : "ParameterTypes",
  "namespace" : "org.apache.avro.reflect",
  "fields" : [ {
    "name" : "m1",
    "type" : {
      "type" : "record", "name" : "Master1",
      "fields" : [ {
        "name" : "foo",
        "type" : {
          "type" : "record", "name" : "Foo10b2274d0c76a664",
          "fields" : [ {"name" : "p","type" : "int"}, {"name" : "q", "type" : "long"} \
]  } } ] }
  }, {
    "name" : "m2",
    "type" : {
      "type" : "record", "name" : "Master2",
      "fields" : [ {
        "name" : "foo",
        "type" : {
          "type" : "record", "name" : "Foo20f193d415184f4e",
          "fields" : [ {"name" : "p","type" : "string"}, {"name" : "q", "type" : \
"string"} ]  } } ] }
  }, {
    "name" : "m3",
    "type" : {
      "type" : "record", "name" : "Master31830bfd9460d8d21",
      "fields" : [ {
        "name" : "foo",
        "type" : {
          "type" : "record", "name" : "Foo14b15d58d3be921d",
          "fields" : [ {"name" : "p","type" : "int"}, {"name" : "q", "type" : "int"} \
]  } } ] }
  } ]
}
{code}

\\
Note that:
# The record Foo might need to have its name mangled as clazz.getSimpleName() + \
Hash64 (param-names) # When serializing the actual object, the same ParentConext \
would need to be passed along the write calls as well. \\
\\

> Support parameterized types in Avro
> -----------------------------------
> 
> Key: AVRO-1571
> URL: https://issues.apache.org/jira/browse/AVRO-1571
> Project: Avro
> Issue Type: Bug
> Affects Versions: 1.7.6
> Reporter: Sachin Goyal
> 
> The below code cannot be serialized by Avro.
> {code}
> class ParameterTypes {
> Master1 m1;
> Master2 m2;
> Master3<Integer> m3;
> }
> class Foo <P, Q> {
> P p;
> Q q;
> }
> class Master1 {
> Foo <Integer, Long> foo;
> }
> class Master2 {
> Foo <String, String> foo;
> }
> class Master3 <P> {
> Foo <P, P> foo;
> }
> {code}
> This is because when generating the schema, only the current class is used to \
> generate the schema. The parent class' context is missing in \
> ReflectData#createSchema() functions where the actual type-information is present.



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


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic