public DatalogDependencyGraphGenerator(List<CQIE> program) { for (CQIE rule : program) { updateRuleIndexes(rule); updatePredicateDependencyGraph(rule); } generateRuleDependencyGraph(program); generateOrderedDepGraph(); /** * * Intuitively, the extenion predicates in the datalog program without * definitions * * <pre> * extensionalPredicates = vertices(predicateDependencyGraph) - ruleIndex.keys() * </pre> */ extensionalPredicates.addAll(predicateDependencyGraph.vertexSet()); extensionalPredicates.removeAll(ruleIndex.keySet()); }
isOrderBy = queryModifiers.hasModifiers() && !queryModifiers.getSortConditions().isEmpty(); DatalogDependencyGraphGenerator depGraph = new DatalogDependencyGraphGenerator(queryProgram.getRules()); Multimap<Predicate, CQIE> ruleIndex = depGraph.getRuleIndex(); List<Predicate> predicatesInBottomUp = depGraph.getPredicatesInBottomUp(); List<Predicate> extensionalPredicates = depGraph.getExtensionalPredicates();
DatalogDependencyGraphGenerator dependencyGraph = new DatalogDependencyGraphGenerator(rules); List<Predicate> topDownPredicates = Lists.reverse(dependencyGraph.getPredicatesInBottomUp()); throw new InvalidDatalogProgramException("The root predicate must not be a table predicate"); Multimap<Predicate, CQIE> ruleIndex = dependencyGraph.getRuleIndex();
dependencyList.add(bodyAtom.getFunctionSymbol()); } else if (bodyAtom.isAlgebraFunction() || bodyAtom.isOperation()) { updatePredicateDependencyGraph_traverseBodyAtom(dependencyList, bodyAtom);
/** * Removes the old indexes given by a rule. * * @param rule */ public void removeOldRuleIndexByBodyPredicate(CQIE rule) { for (Function bodyAtom : rule.getBody()) { if (bodyAtom.isDataFunction()) { Predicate functionSymbol = bodyAtom.getFunctionSymbol(); if (ruleIndexByBodyPredicate.containsEntry(functionSymbol, rule)){ ruleIndexByBodyPredicate.remove(functionSymbol, rule); } } else if (bodyAtom.isAlgebraFunction() || bodyAtom.isOperation()) { removeRuleIndexByBodyPredicate_traverseBodyAtom(rule, bodyAtom); // BC: should we reintroduce arithmetic functions?//} // else if (bodyAtom.isArithmeticFunction() || bodyAtom.isDataTypeFunction()){ } else if (bodyAtom.isDataTypeFunction()){ continue; } else { throw new IllegalStateException("Unknown Function"); } } }
isOrderBy = queryModifiers.hasModifiers() && !queryModifiers.getSortConditions().isEmpty(); DatalogDependencyGraphGenerator depGraph = new DatalogDependencyGraphGenerator(queryProgram); Multimap<Predicate, CQIE> ruleIndex = depGraph.getRuleIndex(); List<Predicate> predicatesInBottomUp = depGraph.getPredicatesInBottomUp(); List<Predicate> extensionalPredicates = depGraph.getExtensionalPredicates();
List<CQIE> rules = queryProgram.getRules(); DatalogDependencyGraphGenerator dependencyGraph = new DatalogDependencyGraphGenerator(rules); List<Predicate> topDownPredicates = Lists.reverse(dependencyGraph.getPredicatesInBottomUp()); throw new InvalidDatalogProgramException("The root predicate must not be a table predicate"); Multimap<Predicate, CQIE> ruleIndex = dependencyGraph.getRuleIndex();
dependencyList.add(bodyAtom.getFunctionSymbol()); } else if (bodyAtom.isAlgebraFunction() || bodyAtom.isOperation()) { updatePredicateDependencyGraph_traverseBodyAtom(dependencyList, bodyAtom);
DatalogDependencyGraphGenerator depGraph = new DatalogDependencyGraphGenerator( queryProgram); ruleIndex = depGraph.getRuleIndex(); .getPredicatesInBottomUp(); .getExtensionalPredicates();
public DatalogDependencyGraphGenerator(List<CQIE> program) { for (CQIE rule : program) { updateRuleIndexes(rule); updatePredicateDependencyGraph(rule); } generateRuleDependencyGraph(program); generateOrderedDepGraph(); /** * * Intuitively, the extensional predicates in the datalog program without * definitions * * <pre> * extensionalPredicates = vertices(predicateDependencyGraph) - ruleIndex.keys() * </pre> */ extensionalPredicates.addAll(predicateDependencyGraph.vertexSet()); extensionalPredicates.removeAll(ruleIndex.keySet()); }