Hi, all !
Whats the purpose for RelJson(Reader|Writer) classes, is it just an example how RelNode`s can be serialized?
If so - it answers my question.

But if it something more seems there is some bugs are present after [1] was implemented, In particular NaN and Inf cannot be correctly deserialized, short reproducer below, do i need to fill an issue?

Thanks !

place this into RelWriterTest
---
  @Test void testInf() {
      Frameworks.withPlanner((cluster, relOptSchema, rootSchema) -> {
        final RexBuilder rexBuilder = cluster.getRexBuilder();
        final FrameworkConfig config = RelBuilderTest.config().build();
        final RelBuilder builder = RelBuilder.create(config);

RelDataType doubleType = cluster.getTypeFactory().builder().add("name",
            cluster.getTypeFactory().createSqlType(SqlTypeName.DOUBLE)).build();

        final RelDataType doubleTypeLit =
            cluster.getTypeFactory().createSqlType(SqlTypeName.DOUBLE);
RexLiteral lit = rexBuilder.makeApproxLiteral(Double.POSITIVE_INFINITY, // <---
            doubleTypeLit);
RelNode vals = builder.values(Collections.nCopies(1, List.of(lit)), doubleType).build();

        final RelJsonWriter writer = new RelJsonWriter();
        vals.explain(writer);
        String serialized = writer.asString();

        SchemaPlus schema = rootSchema.add("hr",
            new ReflectiveSchema(new HrSchema()));
        final RelJsonReader reader =
            new RelJsonReader(cluster, relOptSchema, schema);
        RelNode node;
        try {
          node = reader.read(serialized); // <- raised from here
        } catch (IOException e) {
          throw TestUtil.rethrow(e);
        }
        return RelOptUtil.dumpPlan("", node, SqlExplainFormat.TEXT,
            SqlExplainLevel.EXPPLAN_ATTRIBUTES);
      });
  }
---
will raise:
com.fasterxml.jackson.core.JsonParseException: Non-standard token 'Infinity': enable `JsonReadFeature.ALLOW_NON_NUMERIC_NUMBERS` to allow

[1] https://issues.apache.org/jira/browse/CALCITE-2067

Reply via email to