TargetAtom targetAtom = datalogConversionTools.convertFromDatalogDataAtom(atom); ImmutableSubstitution<ImmutableTerm> bindings = targetAtom.getSubstitution(); DataAtom dataAtom = bindings.applyToDataAtom(targetAtom.getProjectionAtom()); return datalogConversionTools.createDataNode(iqFactory, dataAtom, tablePredicates);
/** * TODO: describe */ public IQ convertDatalogRule(CQIE datalogRule, Collection<Predicate> tablePredicates, Optional<ImmutableQueryModifiers> optionalModifiers, IntermediateQueryFactory iqFactory) throws DatalogProgram2QueryConverterImpl.InvalidDatalogProgramException { TargetAtom targetAtom = datalogConversionTools.convertFromDatalogDataAtom(datalogRule.getHead()); DistinctVariableOnlyDataAtom projectionAtom = targetAtom.getProjectionAtom(); ConstructionNode topConstructionNode = iqFactory.createConstructionNode(projectionAtom.getVariables(), targetAtom.getSubstitution()); List<Function> bodyAtoms = List.iterableList(datalogRule.getBody()); if (bodyAtoms.isEmpty()) { return createFact(topConstructionNode, optionalModifiers, projectionAtom, iqFactory); } else { return createDefinition(topConstructionNode, optionalModifiers, projectionAtom, tablePredicates, bodyAtoms, iqFactory); } }
/** * TODO: describe */ public static IntermediateQuery convertDatalogRule(DBMetadata dbMetadata, CQIE datalogRule, Collection<Predicate> tablePredicates, Optional<ImmutableQueryModifiers> optionalModifiers, IntermediateQueryFactory iqFactory, ExecutorRegistry executorRegistry) throws DatalogProgram2QueryConverterImpl.InvalidDatalogProgramException { TargetAtom targetAtom = DatalogConversionTools.convertFromDatalogDataAtom(datalogRule.getHead()); DistinctVariableOnlyDataAtom projectionAtom = targetAtom.getProjectionAtom(); ConstructionNode rootNode = iqFactory.createConstructionNode(projectionAtom.getVariables(), targetAtom.getSubstitution(), optionalModifiers); List<Function> bodyAtoms = List.iterableList(datalogRule.getBody()); if (bodyAtoms.isEmpty()) { return createFact(dbMetadata, rootNode, projectionAtom, executorRegistry, iqFactory); } else { AtomClassification atomClassification = new AtomClassification(bodyAtoms); return createDefinition(dbMetadata, rootNode, projectionAtom, tablePredicates, atomClassification.dataAndCompositeAtoms, atomClassification.booleanAtoms, atomClassification.optionalGroupAtom, iqFactory, executorRegistry); } }
TargetAtom targetAtom = DatalogConversionTools.convertFromDatalogDataAtom(atom); ImmutableSubstitution<ImmutableTerm> bindings = targetAtom.getSubstitution(); DataAtom dataAtom = bindings.applyToDataAtom(targetAtom.getProjectionAtom()); DataNode currentNode = DatalogConversionTools.createDataNode(queryBuilder.getFactory(), dataAtom, tablePredicates); queryBuilder.addChild(parentNode, currentNode, optionalPosition);