@Override public Function f(Function firstAtom, Function secondAtom) { return DATALOG_FACTORY.getSPARQLJoin(firstAtom, secondAtom, TRUE_EQ); } }, firstAtom);
private Function getSPARQLJoin(List<Function> atoms, Optional<Function> optionalCondition) { int atomCount = atoms.size(); Function rightTerm; switch (atomCount) { case 0: case 1: throw new IllegalArgumentException("A join requires at least two atoms"); case 2: rightTerm = atoms.get(1); break; default: rightTerm = getSPARQLJoin(atoms.subList(1, atomCount), Optional.empty()); break; } return optionalCondition.isPresent() ? datalogFactory.getSPARQLJoin(atoms.get(0), rightTerm, optionalCondition.get()) : datalogFactory.getSPARQLJoin(atoms.get(0), rightTerm); }
private Function getSPARQLJoin(List<Function> atoms, Optional<Function> optionalCondition) { int atomCount = atoms.size(); Function rightTerm; switch (atomCount) { case 0: case 1: throw new IllegalArgumentException("A join requires at least two atoms"); case 2: rightTerm = atoms.get(1); break; default: rightTerm = getSPARQLJoin(atoms.subList(1, atomCount), Optional.empty()); break; } return optionalCondition.isPresent() ? DATALOG_FACTORY.getSPARQLJoin(atoms.get(0), rightTerm, optionalCondition.get()) : DATALOG_FACTORY.getSPARQLJoin(atoms.get(0), rightTerm); }
/** * Folds a list of data/composite atoms and joining conditions into a JOIN(...) with a 3-arity. * */ public static Function foldJoin(List<Function> dataOrCompositeAtoms, Function joiningCondition) { int length = dataOrCompositeAtoms.length(); if (length < 2) { throw new IllegalArgumentException("At least two atoms should be given"); } Function firstAtom = dataOrCompositeAtoms.head(); Function secondAtom = foldJoin(dataOrCompositeAtoms.tail()); return DATALOG_FACTORY.getSPARQLJoin(firstAtom, secondAtom, joiningCondition); }
Function joinAtom = datalogFactory.getSPARQLJoin(dataAtoms.remove(0), dataAtoms.remove(0)); joinAtom.getTerms().addAll(booleanAtoms); booleanAtoms.clear();
Function joinAtom = DATALOG_FACTORY.getSPARQLJoin(dataAtoms.remove(0), dataAtoms.remove(0)); joinAtom.getTerms().addAll(booleanAtoms); booleanAtoms.clear();
Function body = datalogFactory.getSPARQLJoin(wrapNonTriplePattern(a1), wrapNonTriplePattern(a2));