Hi all!

I'm using RelBuilder to create RelNodes, that I then save as JSON using
RelJsonWriter.

When doing so, it seems to me that the planner rewrites my query. For
instance, if I set a filter that will always be false, it rewrites my query
so that it basically outputs nothing. For instance, adding this filter:
builder.call(SqlStdOperatorTable.GREATER_THAN, builder.literal(19),
builder.literal(20))

Will yield this query:
SELECT * FROM (VALUES (NULL)) AS `t` (`id`) WHERE 1 = 0

I do understand that it's the logical way to do it when planning a query.
Nevertheless, for my use case I would like to be able to get all the steps
that were defined using RelBuilder into my JSON, without any rewriting.

I'm assuming this means having a kind of "DummyPlanner" that doesn't do any
rewriting, but I can't quite figure out how to do it.

My code is as follows:

FrameworkConfig config =
Frameworks.newConfigBuilder().defaultSchema(rootSchema). build();
RelBuilder builder = RelBuilder.create(config);
builder.transform(c -> c.withSimplify(false));

RelNode node = builder
     .scan("schema1", "table1")
     .scan("schema1", "table2")
     .filter(builder.call(SqlStdOperatorTable.GREATER_THAN,
builder.literal(19), builder.literal(20)))
     .build();

System.out.println(RelOptUtil.toString(node));
RelJsonWriter writer = new RelJsonWriter();
node.explain(writer);
System.out.println(writer.asString());

If you have any hints that would be wonderful! Thank you!

Florent

Reply via email to