code: public GlobalProperties filterByNodesConstantSet(OptimizerNode node, int input) {
  		// check if partitioning survives
  		if (this.ordering != null) {
  			for (int col : this.ordering.getInvolvedIndexes()) {
  				if (!node.isFieldConstant(input, col)) {
  					return new GlobalProperties();
  				}
  			}
  		}
  		if (this.partitioningFields != null) {
  			for (int colIndex : this.partitioningFields) {
  				if (!node.isFieldConstant(input, colIndex)) {
  					return new GlobalProperties();
  				}
  			}
  		}
  		if (this.uniqueFieldCombinations != null) {
  			HashSet<FieldSet> newSet = new HashSet<FieldSet>();
  			newSet.addAll(this.uniqueFieldCombinations);
  			
  			for (Iterator<FieldSet> combos = newSet.iterator(); combos.hasNext(); ){
  				FieldSet current = combos.next();
  				for (Integer field : current) {
  					if (!node.isFieldConstant(input, field)) {
  						combos.remove();
  						break;
  					}
  				}
  			}
  			
  			if (newSet.size() != this.uniqueFieldCombinations.size()) {
  				GlobalProperties gp = clone();
  				gp.uniqueFieldCombinations = newSet.isEmpty() ? null : newSet;
  				return gp;
  			}
  		}
  		
  		if (this.partitioning == PartitioningProperty.FULL_REPLICATION) {
  			return new GlobalProperties();
  		}
  		
  		return this;
  	}
docs: Filters these properties by what can be preserved through the given output contract.
  
  @param contract
  The output contract.
  @return True, if any non-default value is preserved, false otherwise.