<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def getAllIterator(cls, where=None, buffer=100, useObject=None, orderBy=None):
 """Retrieve every object as an iterator. Possibly limitted by the where list of clauses that will be AND-ed. Since an iterator is returned, only ``buffer`` rows are loaded from the database at once. This is useful if you need to process all objects. If useObject is given, this object is returned each time, but with new data. This can be used to avoid creating many new objects when only one object is needed each time. """

        (sql, fields) = cls._prepareSQL("SELECTALL", where, orderBy=orderBy)
        curs = cls.cursor()
        fetchedAt = time.time()
        curs.execute(sql)

        # We might start eating memory at this point

        def getNext(rows=[]):
            forgetter = cls
            if not rows:
                rows += curs.fetchmany(buffer)
            if not rows:
                curs.close()
                return None
            row = rows[0]
            del rows[0]
            try:
                idPositions = [fields.index(key) for key in cls._sqlPrimary]
            except ValueError:
                raise "Bad sqlPrimary, should be a list or tuple: %s" % cls._sqlPrimary
            ids = [row[pos] for pos in idPositions]
            if useObject:
                result = useObject
                result.reset()
                result._setID(ids)
            else:
                result = forgetter(*ids)
            result._loadFromRow(row, fields, curs)
            result._updated = fetchedAt
            return result

        return iter(getNext, None)