private RelNode determineMaterializationPlan(
final SqlHandlerConfig sqlHandlerConfig,
ReflectionGoal goal,
ReflectionEntry entry,
Materialization materialization,
ExcludedReflectionsProvider exclusionsProvider,
NamespaceService namespace,
ExtendedToRelContext context,
SabotConfig config,
ReflectionSettings reflectionSettings,
MaterializationStore materializationStore) {
final ReflectionPlanGenerator planGenerator = new ReflectionPlanGenerator(sqlHandlerConfig, namespace, context.getPlannerSettings().getOptions(), config, goal, entry, materialization, reflectionSettings, materializationStore);
final RelNode normalizedPlan = planGenerator.generateNormalizedPlan();
final List<String> exclusions = ImmutableList.<String>builder()
.addAll(exclusionsProvider.getExcludedReflections(goal.getId().getId()))
.add(goal.getId().getId())
.build();
context.getSession().getSubstitutionSettings().setExclusions(exclusions);
RefreshDecision decision = planGenerator.getRefreshDecision();
context.recordExtraInfo(DECISION_NAME, SERIALIZER.serialize(decision));
logger.trace("Refresh decision: {}", decision);
if(logger.isTraceEnabled()) {
logger.trace(RelOptUtil.toString(normalizedPlan));
}
return normalizedPlan;
}