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