/** * TODO: explain and comment */ private Optional<IQ> convertDatalogDefinitions(Predicate datalogAtomPredicate, Multimap<Predicate, CQIE> datalogRuleIndex, Collection<Predicate> tablePredicates, Optional<ImmutableQueryModifiers> optionalModifiers) throws InvalidDatalogProgramException { Collection<CQIE> atomDefinitions = datalogRuleIndex.get(datalogAtomPredicate); return convertDatalogDefinitions(atomDefinitions,tablePredicates,optionalModifiers); }
Optional<ImmutableQueryModifiers> topQueryModifiers = convertModifiers(queryProgram.getQueryModifiers()); IQ iq = convertDatalogDefinitions(rootPredicate, ruleIndex, tablePredicates, topQueryModifiers).get(); Optional<IQ> optionalSubQuery = convertDatalogDefinitions(datalogAtomPredicate, ruleIndex, tablePredicates, NO_QUERY_MODIFIER); if (optionalSubQuery.isPresent()) { return enforceSignature(iq, signature);
Optional<ImmutableQueryModifiers> topQueryModifiers = convertModifiers(queryProgram.getQueryModifiers()); IntermediateQuery intermediateQuery = convertDatalogDefinitions(dbMetadata, rootPredicate, ruleIndex, tablePredicates, topQueryModifiers, executorRegistry).get(); Optional<IntermediateQuery> optionalSubQuery = convertDatalogDefinitions(dbMetadata, datalogAtomPredicate, ruleIndex, tablePredicates, NO_QUERY_MODIFIER, executorRegistry); if (optionalSubQuery.isPresent()) { ImmutableSet<IntensionalDataNode> intensionalMatches = findIntensionalDataNodes(intermediateQuery, optionalSubQuery.get().getProjectionAtom());