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