private Function<QualifiedName, String> tableNameMapper(RequestContext context, Map<MaterializedView, MaterializedViewExecution> materializedViews, Optional<QuerySampling> sample, String defaultSchema, Map<String, String> sessionParameters) {
return (node) -> {
if (node.getPrefix().isPresent() && node.getPrefix().get().toString().equals("materialized")) {
MaterializedView materializedView;
try {
materializedView = materializedViewService.get(context.project, node.getSuffix());
} catch (NotExistsException e) {
throw new MaterializedViewNotExists(node.getSuffix());
}
MaterializedViewExecution materializedViewExecution = materializedViews.computeIfAbsent(materializedView,
(key) -> materializedViewService.lockAndUpdateView(context, materializedView));
if (materializedViewExecution == null) {
throw new IllegalStateException();
}
return materializedViewExecution.computeQuery;
}
if (!node.getPrefix().isPresent() && defaultSchema != null) {
node = QualifiedName.of(defaultSchema, node.getSuffix());
}
return executor.formatTableReference(context.project, node, sample, sessionParameters);
};
}