Hi, folks!

We have a problem with Spool node deserialisation. Currently it explains both 
readType and writeType fields as Enum,
thus those fields being serialized as map:

      {
         "id":"2",
         "relOp”:"MyTableSpool",
         "readType":{
            "class":"org.apache.calcite.rel.core.Spool$Type",
            "name":"LAZY"
         },
         "writeType":{
            "class":"org.apache.calcite.rel.core.Spool$Type",
            "name":"EAGER"
         }
      }

When deserializing, we use RelInput#getEnum which expects the provided tag 
being a string value representing the enum's value name.

Should we follow the way used for serialization of JoinRelType within the Join 
node (serialize the enum value as its name in lower case)? Here is example:

      {
         "id":"4",
         "relOp”:"MyJoin",
         "condition":{
            "op":{
               "name":">",
               "kind":"SqlKind#GREATER_THAN",
               "syntax":"SqlSyntax#BINARY"
            },
            "operands":[
               {
                  "input":1,
                  "name":"$1"
               },
               {
                  "input":4,
                  "name":"$4"
               }
            ]
         },
         "joinType":"inner",
         "variablesSet":[0],
         "correlationVariables":[0],
         "inputs":["0","3"]
      }

Or it's better to get the RelInput being able to deserialize enum represented 
as map as well?

Personally I prefer the first option cause the type of the enum is known for 
sure, so it's better not to waste the time to (de-)serialize it.


-- 
Regards,
Konstantin Orlov




Reply via email to