Uploaded image for project: 'Calcite'
  1. Calcite
  2. CALCITE-6980

RelJson cannot serialize binary literals

    XMLWordPrintableJSON

Details

    Description

      Adding the following test to RelWriterTest causes an UnsupportedOperationException:

        @Test void testVarbinary() {
          final Function<RelBuilder, RelNode> relFn = b ->
              b.scan("EMP")
                  .project(b.getRexBuilder().makeBinaryLiteral(new ByteString(new byte[0])))
                  .build();
          relFn(relFn)
              .assertThatJson(isLinux("X"));
        }
      

      Here is the stack trace:

      java.lang.UnsupportedOperationException: type not serializable:  (type org.apache.calcite.avatica.util.ByteString)
      	at org.apache.calcite.rel.externalize.RelJson.toJson(RelJson.java:498)
      	at org.apache.calcite.rel.externalize.RelJson.toJson(RelJson.java:594)
      	at org.apache.calcite.rel.externalize.RelJson.toJson(RelJson.java:456)
      	at org.apache.calcite.rel.externalize.RelJson.toJson(RelJson.java:468)
      	at org.apache.calcite.rel.externalize.RelJsonWriter.put(RelJsonWriter.java:102)
      	at org.apache.calcite.rel.externalize.RelJsonWriter.explain_(RelJsonWriter.java:85)
      	at org.apache.calcite.rel.externalize.RelJsonWriter.done(RelJsonWriter.java:135)
      	at org.apache.calcite.rel.AbstractRelNode.explain(AbstractRelNode.java:252)
      	at org.apache.calcite.plan.RelOptUtil.dumpPlan(RelOptUtil.java:2145)
      

      The error is also clearly not a good error, since the type technically is serializable.
      The error is from RelJson.toJson; there is no case in the switch statement handling it.

      Attachments

        Issue Links

          Activity

            People

              mbudiu Mihai Budiu
              mbudiu Mihai Budiu
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: