@Override
protected Node visitShowStats(ShowStats node, Void context)
{
checkState(queryExplainer.isPresent(), "Query explainer must be provided for SHOW STATS SELECT");
if (node.getRelation() instanceof TableSubquery) {
Query query = ((TableSubquery) node.getRelation()).getQuery();
QuerySpecification specification = (QuerySpecification) query.getQueryBody();
Plan plan = queryExplainer.get().getLogicalPlan(session, new Query(Optional.empty(), specification, Optional.empty(), Optional.empty()), parameters, warningCollector);
validateShowStatsSubquery(node, query, specification, plan);
Table table = (Table) specification.getFrom().get();
Constraint<ColumnHandle> constraint = getConstraint(plan);
return rewriteShowStats(node, table, constraint);
}
else if (node.getRelation() instanceof Table) {
Table table = (Table) node.getRelation();
return rewriteShowStats(node, table, Constraint.alwaysTrue());
}
else {
throw new IllegalArgumentException("Expected either TableSubquery or Table as relation");
}
}