def METHOD_NAME(row: sqlite3.Row, db_path: PathLike, locator_schema: str) -> Results:
    text = row["text"]
    urls = extract_urls(text)
    if not urls:
        return
    dt = from_epoch(row["time"] // 1000)  # timestamps are stored x100 this db
    mid: str = row["mid"]
    # TODO perhaps we could be defensive with null sender/chat etc and still emit the Visit
    sender: str = row["sender"]
    chatname: str = row["chatname"]
    tags: str = row["tags"]
    url_title: str = row["url_title"]
    assert (
        text and mid and sender and chatname
    ), f"sql-query should eliminate messages without 'http' or missing ids: {row}"
    if tags and tags.strip():
        tags = join_tags(tags.split())
        text = f"{text}\n\n{tags}"
    if url_title:
        text = f"title: {url_title}\n\n{text}"
    for u in urls:
        yield Visit(
            url=u,  # URLs in Viber's SQLite are not quoted
            dt=dt,
            context=text,
            locator=Loc.make(
                title=f"chat({mid}) from {sender}@{chatname}",
                href=f"{locator_schema}://{db_path}#!Messages.EventId={mid}",
            ),
        )