docs: def _get_subject_list_generator(cursor):
      """Return all subjects (tags) in the database except "internal" scheme."""
      subject = None
      last_tagid = None
      cursor.execute(SQL['get-subject-list'])
      for s in cursor.fetchall():
          tagid, tagname, portal_type, count = s
  
          if tagid != last_tagid:
              # It's a new subject, create a new dict and initialize count
              if subject:
                  yield subject
              subject = {'id': tagid,
                         'name': tagname,
                         'count': {'module': 0, 'collection': 0}, }
              last_tagid = tagid
  
          if tagid == last_tagid and portal_type:
              # Just need to update the count
              subject['count'][portal_type.lower()] = count
  
      if subject:
          yield subject