• Lazy evaluation: Execution of the query plan is driven by the loop calling kurts_birthday()->next().

  • As with open, top-level call to next propagates down.

  • Rows are returned up through the calls.

  • Project::next: Calls input->next(), keeps the specified fields and returns the projected row.

  • SelectScan::next: Calls input->next() until a qualifying row is found, and then returns that row.

  • TableScan::next: Returns a row read out of a buffer containing a disk page.