Gibt es eine einfache Möglichkeit, einen Stream als Ausgabe eines RowParsers abzurufen?

GegebenrowParser vom TypRowParser[Photo]Dies ist, wie Sie eine Liste von Zeilen aus einer Tabelle analysieren würdenphotoNach den Code-Beispielen, die ich bisher gesehen habe:

def getPhotos(album: Album): List[Photo] = DB.withConnection { implicit c =>
  SQL("select * from photo where album = {album}").on(
    'album -> album.id
  ).as(rowParser *)
}

Bei dem die* Der Operator erstellt einen Parser vom TypResultSetParser[List[Photo]]. Nun habe ich mich gefragt, ob es genauso möglich ist, einen Parser zu erhalten, der a ergibtStream (Ich denke, dass es immer besser ist, fauler zu sein), aber ich habe mir nur Folgendes ausgedacht:

def getPhotos(album: Album): Stream[Photo] = DB.withConnection { implicit c =>
  SQL("select * from photo where album = {album}").on(
    'album -> album.id
  )() collect (rowParser(_) match { case Success(photo) => photo })
}

Es funktioniert, aber es scheint zu kompliziert. Ich könnte natürlich einfach anrufentoStream auf derList Ich komme von der ersten Funktion, aber mein Ziel war es, mich nur zu bewerbenrowParser in Zeilen, die tatsächlich gelesen werden. Gibt es einen einfacheren Weg, dies zu erreichen?

EDIT: Das weiß ichlimit sollte in der Abfrage verwendet werden, wenn die Anzahl der interessierenden Zeilen im Voraus bekannt ist. Mir ist auch bewusst, dass Sie in vielen Fällen ohnehin das gesamte Ergebnis verwenden werden. Wenn Sie also faul sind, wird die Leistung nicht verbessert. Es kann jedoch vorkommen, dass Sie einige Zyklen speichern, z. Wenn Sie aus irgendeinem Grund Suchkriterien haben, die Sie in SQL nicht ausdrücken können oder möchten. Deshalb fand ich es seltsam, dass Anorm einen Weg bietet, eine zu erhaltenStream vonSqlRowIch habe keinen einfachen Weg gefunden, um eineRowParser auf diesem.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage