/** * Return the intervals which are missing but not volatile. * These intervals will be pruned from the result set. * * @return the simplified interval list of times which are to be filtered for partiality */ private SimplifiedIntervalList getMissingNotVolatile() { return missingIntervals.subtract(volatileIntervalSupply.get()); }
/** * Calculates the MISSING intervals for a given a availability and datasource constraint. * * @param availability The availability to find the missing intervals for * @param constraint The constraint for the query * @return the missing intervals */ private SimplifiedIntervalList getBoundedMissingIntervalsWithConstraint( Availability availability, PhysicalDataSourceConstraint constraint ) { SimplifiedIntervalList availableIntervals = availability.getAvailableIntervals(constraint); DateTime expectedStart = availability.getExpectedStartDate(constraint).orElse(Availability.DISTANT_PAST); DateTime expectedEnd = availability.getExpectedEndDate(constraint).orElse(Availability.FAR_FUTURE); return new SimplifiedIntervalList(Collections.singleton(new Interval(expectedStart, expectedEnd))) .subtract(availableIntervals); }
/** * Calculate the missing intervals based on the subpartitions availability. * formula is: * Union(subpart availabilitiy) - Union(subpart missing intervals) * * @param constraint The filtering constraint * * @return The intervals which are available for the given constraint */ private SimplifiedIntervalList mergeAvailabilities(PhysicalDataSourceConstraint constraint) { SimplifiedIntervalList unionOfAvailableIntervals = new SimplifiedIntervalList(); SimplifiedIntervalList unionOfMissingIntervals = new SimplifiedIntervalList(); for (Availability availability : filteredAvailabilities(constraint).collect(Collectors.toSet())) { unionOfAvailableIntervals = unionOfAvailableIntervals.union(availability.getAvailableIntervals(constraint)); unionOfMissingIntervals = unionOfMissingIntervals.union( getBoundedMissingIntervalsWithConstraint(availability, constraint) ); } return unionOfAvailableIntervals.subtract(unionOfMissingIntervals); }