private Global deriveGlobalProperties(TableLayout layout, Map<ColumnHandle, Symbol> assignments, Map<ColumnHandle, NullableValue> constants)
{
Optional<List<PartitionFunctionArgumentBinding>> partitioning = layout.getPartitioningColumns()
.flatMap(columns -> translateToNonConstantSymbols(columns, assignments, constants));
if (planWithTableNodePartitioning(session) && layout.getNodePartitioning().isPresent()) {
NodePartitioning nodePartitioning = layout.getNodePartitioning().get();
if (assignments.keySet().containsAll(nodePartitioning.getPartitioningColumns())) {
List<PartitionFunctionArgumentBinding> arguments = nodePartitioning.getPartitioningColumns().stream()
.map(assignments::get)
.map(PartitionFunctionArgumentBinding::new)
.collect(toImmutableList());
return partitionedOn(nodePartitioning.getPartitioningHandle(), arguments, partitioning);
}
}
if (partitioning.isPresent()) {
return streamPartitionedOn(partitioning.get());
}
return arbitraryPartition();
}