def _process_db_rows_iter(self, cursor):
        '''
        Turn the low-level rows from the result of a standard query join
        into higher-level statements, yielded iteratively. Note this might lead to
        idle transaction errors?

        '''
        #Be aware of: http://packages.python.org/psycopg2/faq.html#problems-with-transactions-handling
        #The results will come back grouped by the raw relationship IDs, in order
        for relid, relgroup in groupby(cursor, itemgetter(0)):
            curr_rel = None
            attrs = None
            #Each relgroup are the DB rows corresponding to a single relationship,
            #With redundant origin/rel/target but the sequence of attributes
            for row in relgroup:
                (rawid, origin, rel, target, a_name, a_val) = row
                #self._logger.debug('Row: {0}'.format(repr(row)))
                if not curr_rel: curr_rel = (origin, rel, target)
                if a_name:
                    if not attrs:
                        attrs = {}
                        curr_rel = (origin, rel, target, attrs)
                    attrs[a_name] = a_val
            yield curr_rel
        cursor.close()
        self._conn.rollback() #Finish with the transaction
        return
Turn the low-level rows from the result of a standard query join
        into higher-level statements, yielded iteratively. Note this might lead to
        idle transaction errors?