private Stream<IntermediateQuery> lift(IntermediateQuery query) { try { return Stream.of(bindingLiftOptimizer.optimize(query)); } catch (EmptyQueryException e) { return Stream.empty(); } }
/** * Lift substitutions and query modifiers, and get rid of resulting idle construction nodes. * Then flatten nested unions. */ private IntermediateQuery normalizeIQ(IntermediateQuery query) { try { IntermediateQuery queryAfterBindingLift = bindingLifter.optimize(query); IntermediateQuery queryAfterCNodeCleaning = constructionNodeCleaner.optimize(queryAfterBindingLift); return unionFlattener.optimize(queryAfterCNodeCleaning); }catch (EmptyQueryException e){ throw new IllegalStateException("The query should not be emptied by applying this normalization"); } } }
/** * Lift substitutions and query modifiers, and get rid of resulting idle construction nodes. * Then flatten nested unions, and enforce non-nullability */ @Override public IntermediateQuery normalize(IntermediateQuery query) { IntermediateQuery queryAfterUnionNormalization; try { IntermediateQuery queryAfterBindingLift = bindingLifter.optimize(query); IntermediateQuery queryAfterCNodeCleaning = constructionNodeCleaner.optimize(queryAfterBindingLift); queryAfterUnionNormalization = mappingUnionNormalizer.optimize(queryAfterCNodeCleaning); } catch (EmptyQueryException e) { throw new DatalogConversionException("The query should not become empty"); } return noNullValueEnforcer.transform(queryAfterUnionNormalization); } }
intermediateQuery = bindingLiftOptimizer.optimize(intermediateQuery); log.debug("New query after substitution lift optimization: \n" + intermediateQuery.toString());