private Global deriveGlobalProperties(TableLayout layout, Map<ColumnHandle, Symbol> assignments, Map<ColumnHandle, NullableValue> constants) { Optional<List<Symbol>> streamPartitioning = layout.getStreamPartitioningColumns() .flatMap(columns -> translateToNonConstantSymbols(columns, assignments, constants)); if (planWithTableNodePartitioning(session) && layout.getTablePartitioning().isPresent()) { TablePartitioning tablePartitioning = layout.getTablePartitioning().get(); if (assignments.keySet().containsAll(tablePartitioning.getPartitioningColumns())) { List<Symbol> arguments = tablePartitioning.getPartitioningColumns().stream() .map(assignments::get) .collect(toImmutableList()); return partitionedOn(tablePartitioning.getPartitioningHandle(), arguments, streamPartitioning); } } if (streamPartitioning.isPresent()) { return streamPartitionedOn(streamPartitioning.get()); } return arbitraryPartition(); }
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(); }