@Override public OrderByNode clone() { return iqFactory.createOrderByNode(comparators); }
private OrderByNode replaceTermsByProjectedVariables(OrderByNode formerOrderByNode, ImmutableSubstitution<ImmutableTerm> substitution) throws OntopInternalBugException { ImmutableList<OrderByNode.OrderComparator> newComparators = formerOrderByNode.getComparators().stream() .map(c -> convertComparator(c, substitution)) .collect(ImmutableCollectors.toList()); return iqFactory.createOrderByNode(newComparators); }
private OrderByNode applySubstitution(ImmutableSubstitution<? extends ImmutableTerm> substitution) { ImmutableList<OrderComparator> newComparators = comparators.stream() .flatMap(c -> Stream.of(substitution.apply(c.getTerm())) .filter(t -> t instanceof NonGroundTerm) .map(t -> iqFactory.createOrderComparator((NonGroundTerm) t, c.isAscending()))) .collect(ImmutableCollectors.toList()); return iqFactory.createOrderByNode(newComparators); }
/** * Top-down order */ private ImmutableList<UnaryOperatorNode> extractModifierNodes(IntermediateQueryFactory iqFactory) { long correctedOffset = offset > 0 ? offset : 0; Optional<SliceNode> sliceNode = Optional.of(limit) .filter(l -> l >= 0) .map(l -> Optional.of(iqFactory.createSliceNode(correctedOffset, l))) .orElseGet(() -> Optional.of(correctedOffset) .filter(o -> o > 0) .map(iqFactory::createSliceNode)); Optional<UnaryOperatorNode> distinctNode = isDistinct() ? Optional.of(iqFactory.createDistinctNode()) : Optional.empty(); ImmutableList<OrderByNode.OrderComparator> orderComparators = getSortConditions().stream() .map(o -> iqFactory.createOrderComparator(o.getVariable(), o.getDirection() == OrderCondition.ORDER_ASCENDING)) .collect(ImmutableCollectors.toList()); Optional<UnaryOperatorNode> orderByNode = orderComparators.isEmpty() ? Optional.empty() : Optional.of(iqFactory.createOrderByNode(orderComparators)); return Stream.of(sliceNode, distinctNode, orderByNode) .filter(Optional::isPresent) .map(Optional::get) .collect(ImmutableCollectors.toList()); }
@Override public OrderByNode transform(OrderByNode orderByNode) { ImmutableList<OrderByNode.OrderComparator> newComparators = orderByNode.getComparators().stream() .map(c -> iqFactory.createOrderComparator( renamingSubstitution.applyToNonGroundTerm(c.getTerm()), c.isAscending())) .collect(ImmutableCollectors.toList()); return iqFactory.createOrderByNode(newComparators); }