private static Optional<Function> extractOptionalGroupAtom(List<Function> atoms) throws DatalogProgram2QueryConverterImpl.InvalidDatalogProgramException { List<Function> groupAtoms = atoms.filter(atom -> atom.getFunctionSymbol().equals( DatalogAlgebraOperatorPredicates.SPARQL_GROUP)); switch(groupAtoms.length()) { case 0: return Optional.empty(); case 1: return Optional.of(groupAtoms.head()); default: throw new DatalogProgram2QueryConverterImpl.InvalidDatalogProgramException("Multiple GROUP atoms found in the same body! " + groupAtoms); } }
throw new InvalidDatalogProgramException("The root predicate must not be a table predicate");
throw new DatalogProgram2QueryConverterImpl.InvalidDatalogProgramException("The datalog predicate " + datalogAtomPredicate + " is not an AtomPredicate!");
throw new DatalogProgram2QueryConverterImpl.InvalidDatalogProgramException(e.getMessage());
throw new DatalogProgram2QueryConverterImpl.InvalidDatalogProgramException("Unsupported predicate: " + atomPredicate); throw new DatalogProgram2QueryConverterImpl.InvalidDatalogProgramException("Unsupported non-data atom: " + atom);
throw new InvalidDatalogProgramException("The root predicate must not be a table predicate");
throw new DatalogProgram2QueryConverterImpl.InvalidDatalogProgramException("Empty join found");
throw new DatalogProgram2QueryConverterImpl.InvalidDatalogProgramException("GROUP atom found inside a LJ meta-atom"); throw new DatalogProgram2QueryConverterImpl.InvalidDatalogProgramException("Empty join found");
throw new DatalogProgram2QueryConverterImpl.InvalidDatalogProgramException("Unsupported predicate: " + atomPredicate); throw new DatalogProgram2QueryConverterImpl.InvalidDatalogProgramException("Unsupported non-data atom: " + atom);
private IQ createDefinition(ConstructionNode topConstructionNode, Optional<ImmutableQueryModifiers> optionalModifiers, DistinctVariableOnlyDataAtom projectionAtom, Collection<Predicate> tablePredicates, List<Function> bodyAtoms, IntermediateQueryFactory iqFactory) throws DatalogProgram2QueryConverterImpl.InvalidDatalogProgramException { try { IQTree bodyTree = convertAtoms(bodyAtoms, tablePredicates, iqFactory); IQTree constructionTree = iqFactory.createUnaryIQTree(topConstructionNode, bodyTree); IQTree tree = optionalModifiers .map(m -> m.insertAbove(constructionTree, iqFactory)) .orElse(constructionTree); return iqFactory.createIQ(projectionAtom, tree); } catch (IntermediateQueryBuilderException e) { throw new DatalogProgram2QueryConverterImpl.InvalidDatalogProgramException(e.getMessage()); } }
protected AtomClassification(List<Function> atoms) throws DatalogProgram2QueryConverterImpl.InvalidDatalogProgramException { dataAndCompositeAtoms = DatalogTools.filterDataAndCompositeAtoms(atoms); List<Function> otherAtoms = DatalogTools.filterNonDataAndCompositeAtoms(atoms); booleanAtoms = DatalogTools.filterBooleanAtoms(otherAtoms); if (dataAndCompositeAtoms.isEmpty()) throw new DatalogProgram2QueryConverterImpl.InvalidDatalogProgramException("No data or composite atom in " + atoms); optionalGroupAtom = extractOptionalGroupAtom(otherAtoms); /* * May throw a NotSupportedConversionException */ checkNonDataOrCompositeAtomSupport(otherAtoms, booleanAtoms, optionalGroupAtom); }
protected AtomClassification(List<Function> atoms, DatalogTools datalogTools) throws DatalogProgram2QueryConverterImpl.InvalidDatalogProgramException { dataAndCompositeAtoms = datalogTools.filterDataAndCompositeAtoms(atoms); List<Function> otherAtoms = datalogTools.filterNonDataAndCompositeAtoms(atoms); booleanAtoms = datalogTools.filterBooleanAtoms(otherAtoms); if (dataAndCompositeAtoms.isEmpty()) throw new DatalogProgram2QueryConverterImpl.InvalidDatalogProgramException("No data or composite atom in " + atoms); /* * May throw a NotSupportedConversionException */ checkNonDataOrCompositeAtomSupport(otherAtoms, booleanAtoms); }