docs: 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