test_class.file: flink-optimizer/src/test/java/org/apache/flink/optimizer/dag/CoGroupNodeTest.java
test_class.identifier: CoGroupNodeTest
test_case.body: @Test
  	public void testGetSemanticProperties() {
  
  		DualInputSemanticProperties origProps = new DualInputSemanticProperties();
  		// props for first input
  		origProps.addForwardedField(0, 0, 1);
  		origProps.addForwardedField(0, 2, 2);
  		origProps.addForwardedField(0, 3, 4);
  		origProps.addForwardedField(0, 6, 0);
  		origProps.addReadFields(0, new FieldSet(0, 2, 4, 7));
  		// props for second input
  		origProps.addForwardedField(1, 1, 2);
  		origProps.addForwardedField(1, 2, 8);
  		origProps.addForwardedField(1, 3, 7);
  		origProps.addForwardedField(1, 6, 6);
  		origProps.addReadFields(1, new FieldSet(1, 3, 4));
  
  		CoGroupOperatorBase<?,?,?,?> op = mock(CoGroupOperatorBase.class);
  		when(op.getSemanticProperties()).thenReturn(origProps);
  		when(op.getKeyColumns(0)).thenReturn(new int[]{3,2});
  		when(op.getKeyColumns(1)).thenReturn(new int[]{6,3});
  		when(op.getParameters()).thenReturn(new Configuration());
  
  		CoGroupNode node = new CoGroupNode(op);
  
  		SemanticProperties filteredProps = node.getSemanticPropertiesForLocalPropertyFiltering();
  
  		// check first input props
  		assertTrue(filteredProps.getForwardingTargetFields(0, 0).size() == 0);
  		assertTrue(filteredProps.getForwardingTargetFields(0, 2).size() == 1);
  		assertTrue(filteredProps.getForwardingTargetFields(0, 2).contains(2));
  		assertTrue(filteredProps.getForwardingTargetFields(0, 3).size() == 1);
  		assertTrue(filteredProps.getForwardingTargetFields(0, 3).contains(4));
  		assertTrue(filteredProps.getForwardingTargetFields(0, 6).size() == 0);
  		assertTrue(filteredProps.getForwardingSourceField(0, 1) < 0);
  		assertTrue(filteredProps.getForwardingSourceField(0, 2) == 2);
  		assertTrue(filteredProps.getForwardingSourceField(0, 4) == 3);
  		assertTrue(filteredProps.getForwardingSourceField(0, 0) < 0);
  		// check second input props
  		assertTrue(filteredProps.getReadFields(0).size() == 4);
  		assertTrue(filteredProps.getReadFields(0).contains(0));
  		assertTrue(filteredProps.getReadFields(0).contains(2));
  		assertTrue(filteredProps.getReadFields(0).contains(4));
  		assertTrue(filteredProps.getReadFields(0).contains(7));
  
  		assertTrue(filteredProps.getForwardingTargetFields(1, 1).size() == 0);
  		assertTrue(filteredProps.getForwardingTargetFields(1, 2).size() == 0);
  		assertTrue(filteredProps.getForwardingTargetFields(1, 3).size() == 1);
  		assertTrue(filteredProps.getForwardingTargetFields(1, 3).contains(7));
  		assertTrue(filteredProps.getForwardingTargetFields(1, 6).size() == 1);
  		assertTrue(filteredProps.getForwardingTargetFields(1, 6).contains(6));
  		assertTrue(filteredProps.getForwardingSourceField(1, 2) < 0);
  		assertTrue(filteredProps.getForwardingSourceField(1, 8) < 0);
  		assertTrue(filteredProps.getForwardingSourceField(1, 7) == 3);
  		assertTrue(filteredProps.getForwardingSourceField(1, 6) == 6);
  
  		assertTrue(filteredProps.getReadFields(1).size() == 3);
  		assertTrue(filteredProps.getReadFields(1).contains(1));
  		assertTrue(filteredProps.getReadFields(1).contains(3));
  		assertTrue(filteredProps.getReadFields(1).contains(4));
  
  	}
test_case.class_method_signature: CoGroupNodeTest.testGetSemanticProperties()
test_case.full_signature: @Test public void testGetSemanticProperties()
test_case.identifier: testGetSemanticProperties
test_case.invocations: addForwardedField addForwardedField addForwardedField addForwardedField addReadFields addForwardedField addForwardedField addForwardedField addForwardedField addReadFields mock thenReturn when getSemanticProperties thenReturn when getKeyColumns thenReturn when getKeyColumns thenReturn when getParameters getSemanticPropertiesForLocalPropertyFiltering assertTrue size getForwardingTargetFields assertTrue size getForwardingTargetFields assertTrue contains getForwardingTargetFields assertTrue size getForwardingTargetFields assertTrue contains getForwardingTargetFields assertTrue size getForwardingTargetFields assertTrue getForwardingSourceField assertTrue getForwardingSourceField assertTrue getForwardingSourceField assertTrue getForwardingSourceField assertTrue size getReadFields assertTrue contains getReadFields assertTrue contains getReadFields assertTrue contains getReadFields assertTrue contains getReadFields assertTrue size getForwardingTargetFields assertTrue size getForwardingTargetFields assertTrue size getForwardingTargetFields assertTrue contains getForwardingTargetFields assertTrue size getForwardingTargetFields assertTrue contains getForwardingTargetFields assertTrue getForwardingSourceField assertTrue getForwardingSourceField assertTrue getForwardingSourceField assertTrue getForwardingSourceField assertTrue size getReadFields assertTrue contains getReadFields assertTrue contains getReadFields assertTrue contains getReadFields
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void testGetSemanticProperties()
focal_class.declarator: dataProperties
focal_class.modifier: private
focal_class.original_string: private List<OperatorDescriptorDual> dataProperties;
focal_class.type: List<OperatorDescriptorDual>
focal_class.var_name: dataProperties
focal_class.file: flink-optimizer/src/main/java/org/apache/flink/optimizer/dag/CoGroupNode.java
focal_class.identifier: CoGroupNode
focal_class.class_method_signature: CoGroupNode.CoGroupNode(CoGroupOperatorBase<?, ?, ?, ?> operator)
focal_class.full_signature: public  CoGroupNode(CoGroupOperatorBase<?, ?, ?, ?> operator)
focal_class.identifier: CoGroupNode
focal_class.modifiers: public
focal_class.parameters: (CoGroupOperatorBase<?, ?, ?, ?> operator)
focal_class.signature:  CoGroupNode(CoGroupOperatorBase<?, ?, ?, ?> operator)
focal_class.class_method_signature: CoGroupNode.getOperator()
focal_class.full_signature: @Override public CoGroupOperatorBase<?, ?, ?, ?> getOperator()
focal_class.identifier: getOperator
focal_class.modifiers: @Override public
focal_class.parameters: ()
focal_class.return: CoGroupOperatorBase<?, ?, ?, ?>
focal_class.signature: CoGroupOperatorBase<?, ?, ?, ?> getOperator()
focal_class.class_method_signature: CoGroupNode.getOperatorName()
focal_class.full_signature: @Override public String getOperatorName()
focal_class.identifier: getOperatorName
focal_class.modifiers: @Override public
focal_class.parameters: ()
focal_class.return: String
focal_class.signature: String getOperatorName()
focal_class.class_method_signature: CoGroupNode.getPossibleProperties()
focal_class.full_signature: @Override protected List<OperatorDescriptorDual> getPossibleProperties()
focal_class.identifier: getPossibleProperties
focal_class.modifiers: @Override protected
focal_class.parameters: ()
focal_class.return: List<OperatorDescriptorDual>
focal_class.signature: List<OperatorDescriptorDual> getPossibleProperties()
focal_class.class_method_signature: CoGroupNode.makeCoGroupWithSolutionSet(int solutionsetInputIndex)
focal_class.full_signature: public void makeCoGroupWithSolutionSet(int solutionsetInputIndex)
focal_class.identifier: makeCoGroupWithSolutionSet
focal_class.modifiers: public
focal_class.parameters: (int solutionsetInputIndex)
focal_class.return: void
focal_class.signature: void makeCoGroupWithSolutionSet(int solutionsetInputIndex)
focal_class.class_method_signature: CoGroupNode.getSemanticPropertiesForLocalPropertyFiltering()
focal_class.full_signature: @Override protected SemanticProperties getSemanticPropertiesForLocalPropertyFiltering()
focal_class.identifier: getSemanticPropertiesForLocalPropertyFiltering
focal_class.modifiers: @Override protected
focal_class.parameters: ()
focal_class.return: SemanticProperties
focal_class.signature: SemanticProperties getSemanticPropertiesForLocalPropertyFiltering()
focal_class.class_method_signature: CoGroupNode.computeOperatorSpecificDefaultEstimates(DataStatistics statistics)
focal_class.full_signature: @Override protected void computeOperatorSpecificDefaultEstimates(DataStatistics statistics)
focal_class.identifier: computeOperatorSpecificDefaultEstimates
focal_class.modifiers: @Override protected
focal_class.parameters: (DataStatistics statistics)
focal_class.return: void
focal_class.signature: void computeOperatorSpecificDefaultEstimates(DataStatistics statistics)
focal_class.class_method_signature: CoGroupNode.initializeDataProperties(Partitioner<?> customPartitioner)
focal_class.full_signature: private List<OperatorDescriptorDual> initializeDataProperties(Partitioner<?> customPartitioner)
focal_class.identifier: initializeDataProperties
focal_class.modifiers: private
focal_class.parameters: (Partitioner<?> customPartitioner)
focal_class.return: List<OperatorDescriptorDual>
focal_class.signature: List<OperatorDescriptorDual> initializeDataProperties(Partitioner<?> customPartitioner)
focal_class.superclass: extends TwoInputNode
focal_method.body: @Override
  	protected SemanticProperties getSemanticPropertiesForLocalPropertyFiltering() {
  
  		// Local properties for CoGroup may only be preserved on key fields.
  		DualInputSemanticProperties origProps = ((DualInputOperator<?, ?, ?, ?>) getOperator()).getSemanticProperties();
  
  		DualInputSemanticProperties filteredProps = new DualInputSemanticProperties();
  		FieldSet readSet1 = origProps.getReadFields(0);
  		FieldSet readSet2 = origProps.getReadFields(1);
  		if(readSet1 != null) {
  			filteredProps.addReadFields(0, readSet1);
  		}
  		if(readSet2 != null) {
  			filteredProps.addReadFields(1, readSet2);
  		}
  
  		// preserve only key fields (first input)
  		for(int f : this.keys1) {
  			FieldSet targets = origProps.getForwardingTargetFields(0, f);
  			for(int t : targets) {
  				filteredProps.addForwardedField(0, f, t);
  			}
  		}
  
  		// preserve only key fields (second input)
  		for(int f : this.keys2) {
  			FieldSet targets = origProps.getForwardingTargetFields(1, f);
  			for(int t : targets) {
  				filteredProps.addForwardedField(1, f, t);
  			}
  		}
  
  		return filteredProps;
  	}
focal_method.class_method_signature: CoGroupNode.getSemanticPropertiesForLocalPropertyFiltering()
focal_method.full_signature: @Override protected SemanticProperties getSemanticPropertiesForLocalPropertyFiltering()
focal_method.identifier: getSemanticPropertiesForLocalPropertyFiltering
focal_method.invocations: getSemanticProperties getOperator getReadFields getReadFields addReadFields addReadFields getForwardingTargetFields addForwardedField getForwardingTargetFields addForwardedField
focal_method.modifiers: @Override protected
focal_method.parameters: ()
focal_method.return: SemanticProperties
focal_method.signature: SemanticProperties getSemanticPropertiesForLocalPropertyFiltering()