Function datafusion_optimizer::push_down_limit::combine_limit

source ·
pub fn combine_limit(
    parent_skip: usize,
    parent_fetch: Option<usize>,
    child_skip: usize,
    child_fetch: Option<usize>,
) -> (usize, Option<usize>)
Expand description

Computes the skip and fetch parameters of a single limit that would be equivalent to two consecutive limits with the given skip/fetch parameters.

There are multiple cases to consider:

§Case 0: Parent and child are disjoint (child_fetch <= skip).

  Before merging:
                    |........skip........|---fetch-->|     Parent limit
   |...child_skip...|---child_fetch-->|                    Child limit

After merging:

   |.........(child_skip + skip).........|

§Case 1: Parent is beyond child’s range (skip < child_fetch <= skip + fetch).

Before merging:

                    |...skip...|------------fetch------------>|   Parent limit
   |...child_skip...|-------------child_fetch------------>|       Child limit

After merging:

   |....(child_skip + skip)....|---(child_fetch - skip)-->|

§Case 2: Parent is within child’s range (skip + fetch < child_fetch).

Before merging:

                    |...skip...|---fetch-->|                   Parent limit
   |...child_skip...|-------------child_fetch------------>|    Child limit

After merging:

   |....(child_skip + skip)....|---fetch-->|