Hi Matthew McMillian, Could you give some sql examples to explain your question?
I still don't quite understand your question. Best, LakeShen Matthew McMillian <[email protected]> 于2024年1月26日周五 11:30写道: > Hi Calcite Devs, > > Before I start, I just wanted to say that Calcite is a really awesome > framework! It's awesome to see a community come together to create such a > cool tool. > > For reference, I'm using Calcite 1.36. > > I'm newer to the Calcite ecosystem, but I have been experimenting with its > features for some time. I'm interested in using Calcite's different IRs > (SqlNode, RexNode, and RelNode in particular) to introspect a query. In > particular, I'm interested in analyzing a query's tree/plan and finding out > details about the query. Some examples to illustrate what I'm interested in > finding out (though not all the questions I might want to ask) are: > - At some arbitrary expression, what columns are referenced in that > expression? > - At some arbitrary expression, what functions are used in that expression? > - At some arbitrary expression, is this a subquery? > - At some arbitrary expression, what does the structure of the query look > like? Does it contain any subqueries or common table expressions? > > From what I've read in the JavaDocs, there are a few utilities that have > caught my eye, but I'm not 100% sure I'm looking in the right places. > - For SqlNode, I haven't noticed anything that can help me discover/collect > information from arbitrary nodes in a SqlNode tree. I've noticed that a > Visitor class is available, which is extremely useful. Does Calcite offer > any built-in introspection in this area, or is it expected that the > framework user extend the Visitor class to perform such introspection? > - For RexNode, I was unable to find anything that can allow me to > introspect RexNodes. I see that RexNodes also has a Visitor class, but I > have similar questions to the previous bullet point about built-in > introspection. In addition, I've also been unable to figure out how to > resolve RexInputRefs back to their source expressions so I could perform > analysis. > - For RelNode, I've found that the class RelMetadataQuery is very helpful > for analyzing a relational tree, but I've struggled to find out how to > introspect the details of LogicalProjects since a good chunk of the data > model's details (not structure) correspond to RexNodes. > > My question for the team is: I've read through the documentation and have > checked out the JavaDocs quite a bit, but I haven't been able to find > the idiomatic way to perform this type of introspection in Calcite. Does > the team have any pointers on what parts of the codebase are valuable for > this type of introspection? Is this type of introspection even possible in > vanilla Calcite, or is this something that I would need to extend myself? > Are some of the areas I've called out even the right places to look to > solve the kind of introspection questions I've mentioned? Any guidance / > pointers in this area to get me set in the right direction would be greatly > appreciated. > > Thank you for your time, > Matthew McMillian >
