When iterators are used, many operations may be active at once. Tuples pass between
operators as required, supporting pipelining naturally. However, the decision to pipeline
or materialize is dependent upon the operator-specific code that processes the input tuples.
If this code allows input tuples to be processed as they are received, pipelining is used; if
this code processes the same input tuples more than once, materialization is used.