/////////////////////////////////   HYPERGRAPH NODE
 // /////////////////////////////////////////////////
 private ISkolemPart generateHyperGraphSkolemFunction(
     SkolemFunctionGenerator generator, MappingTask mappingTask) {
   // initialize data structures
   Map<SetAlias, List<GeneratorWithPath>> generatorsByAlias =
       new HashMap<SetAlias, List<GeneratorWithPath>>();
   Map<SetAlias, ISkolemPart> partsByAlias = new HashMap<SetAlias, ISkolemPart>();
   Map<VariableJoinCondition, ISkolemPart> partsForJoins =
       new HashMap<VariableJoinCondition, ISkolemPart>();
   initializeDataStructures(
       generator, generatorsByAlias, partsByAlias, partsForJoins, mappingTask);
   // generate tuple strings
   ISkolemPart partForTuples = generatePartForTuples(partsByAlias, mappingTask);
   ISkolemPart partForJoins = generatePartForJoins(generator, partsForJoins, mappingTask);
   ISkolemPart partForVariable = generatePartForVariable(generator, partsForJoins, mappingTask);
   ISkolemPart result = new AppendSkolemPart();
   result.addChild(new StringSkolemPart("SK("));
   result.addChild(new StringSkolemPart("Tuples="));
   result.addChild(partForTuples);
   result.addChild(new StringSkolemPart("**Joins="));
   result.addChild(partForJoins);
   if (generator.getTgd().getTargetView().getAllJoinConditions().size() > 1) {
     result.addChild(new StringSkolemPart("**Var="));
     result.addChild(partForVariable);
   }
   if (generator.getPosition() != null) {
     result.addChild(new StringSkolemPart("**Pos=" + generator.getPosition()));
   }
   result.addChild(new StringSkolemPart(")"));
   return result;
 }
 /////////////////////////////////   LOCAL NODE   /////////////////////////////////////////////////
 private ISkolemPart generateLocalSkolemFunction(
     SkolemFunctionGenerator generator, MappingTask mappingTask) {
   StringBuilder functionName = new StringBuilder();
   functionName.append("SK_");
   functionName.append("TGD").append(compactHashCode(generator.getTgd().hashCode())).append("_");
   functionName
       .append("N")
       .append(compactHashCode(generator.getJoinConditions().toString().hashCode()));
   if (generator.getPosition() != null) {
     functionName.append("_Pos=").append(generator.getPosition());
   }
   return generateAppendWithFunctionName(functionName.toString(), generator, mappingTask);
 }
 /////////////////////////////////   KEY NODE   /////////////////////////////////////////////////
 private ISkolemPart generateSkolemFunctionForKey(
     SkolemFunctionGenerator generator, MappingTask mappingTask) {
   StringBuilder functionName = new StringBuilder();
   functionName.append("SK_");
   //
   // functionName.append("TGD_").append(compactHashCode(generator.getTgd().hashCode())).append("_");
   functionName
       .append("KEY_")
       .append(compactHashCode(generator.getFunctionalDependencies().get(0).hashCode()));
   if (generator.getPosition() != null) {
     functionName.append("_Pos=").append(generator.getPosition());
   }
   return generateAppendWithFunctionName(functionName.toString(), generator, mappingTask);
 }