Czy istnieje prosty sposób na uzyskanie strumienia jako wyjścia RowParser?

DanyrowParser typuRowParser[Photo]w ten sposób analizujesz listę wierszy pochodzących z tabeliphoto, według przykładów kodu, które widziałem do tej pory:

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

Gdzie* operator tworzy parser typuResultSetParser[List[Photo]]. Zastanawiałem się teraz, czy możliwe jest uzyskanie parsera dającego aStream (myśląc, że bycie bardziej leniwym jest zawsze lepsze), ale wymyśliłem to tylko:

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 })
}

To działa, ale wydaje się zbyt skomplikowane. Mogę oczywiście zadzwonićtoStream naList Dostaję od pierwszej funkcji, ale moim celem było tylko zastosowanierowParser w wierszach, które są faktycznie czytane. Czy istnieje łatwiejszy sposób osiągnięcia tego celu?

EDIT: Wiem tolimit należy użyć w zapytaniu, jeśli liczba interesujących wierszy jest znana wcześniej. Jestem również świadomy, że w wielu przypadkach i tak wykorzystasz cały wynik, więc bycie leniwym nie poprawi wydajności. Ale może się zdarzyć, że zaoszczędzisz kilka cykli, np. jeśli z jakiegoś powodu masz kryteria wyszukiwania, których nie możesz lub nie chcesz wyrazić w SQL. Pomyślałem więc, że to dziwne, biorąc pod uwagę fakt, że anorm zapewnia sposób na uzyskanieStream zSqlRow, Nie znalazłem prostego sposobu na zastosowanieRowParser Na tym.

questionAnswers(3)

yourAnswerToTheQuestion