Hi, I think you are almost close to the truth. You already find the key configuration `builder.transform(c -> c.withSimplify(false))`, however you forget to set RelBuilder to the new value. The solution is simple, update > RelBuilder builder = RelBuilder.create(config); > builder.transform(c -> c.withSimplify(false));
to RelBuilder builder = RelBuilder.create(config).transform(c -> c.withSimplify(false)); Best, Jing Zhang Florent Martineau <[email protected]> 于2021年11月24日周三 下午10:06写道: > 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 >
