Reads a piece of input data and advance to the next one. Implementations
must return null at the end of the input
data set. In a transactional setting, caller might get the same item
twice from successive calls (or otherwise), if the first call was in a
transaction that rolled back.