///////////////////////////////// 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); }