docs: def gen_items_from_sql_csv(s: str) -> Generator[str, None, None]:
      """
      Splits a comma-separated list of quoted SQL values, with ``'`` as the quote
      character. Allows escaping of the quote character by doubling it. Returns
      the quotes (and escaped quotes) as part of the result. Allows newlines etc.
      within the string passed.
      """
      # csv.reader will not both process the quotes and return the quotes;
      # we need them to distinguish e.g. NULL from 'NULL'.
      # log.warning('gen_items_from_sql_csv: s = {0!r}', s)
      if not s:
          return
      n = len(s)
      startpos = 0
      pos = 0
      in_quotes = False
      while pos < n:
          if not in_quotes:
              if s[pos] == COMMA:
                  # end of chunk
                  chunk = s[startpos:pos]  # does not include s[pos]
                  result = chunk.strip()
                  # log.warning('yielding: {0!r}', result)
                  yield result
                  startpos = pos + 1
              elif s[pos] == SQUOTE:
                  # start of quote
                  in_quotes = True
          else:
              if pos < n - 1 and s[pos] == SQUOTE and s[pos + 1] == SQUOTE:
                  # double quote, '', is an escaped quote, not end of quote
                  pos += 1  # skip one more than we otherwise would
              elif s[pos] == SQUOTE:
                  # end of quote
                  in_quotes = False
          pos += 1
      # Last chunk
      result = s[startpos:].strip()
      # log.warning('yielding last: {0!r}', result)
      yield result