From d707caa2f489d21de58f16df742001d64bb4398e Mon Sep 17 00:00:00 2001 From: Adam Fraser Date: Wed, 27 Jul 2022 17:59:41 -0700 Subject: [PATCH] Optimize ZQuery.collectAllPar For Very Small Collections (#349) * optimize * format --- zio-query/shared/src/main/scala/zio/query/ZQuery.scala | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/zio-query/shared/src/main/scala/zio/query/ZQuery.scala b/zio-query/shared/src/main/scala/zio/query/ZQuery.scala index 0ad59e87..23dacc77 100644 --- a/zio-query/shared/src/main/scala/zio/query/ZQuery.scala +++ b/zio-query/shared/src/main/scala/zio/query/ZQuery.scala @@ -1118,7 +1118,15 @@ object ZQuery { )( f: A => ZQuery[R, E, B] )(implicit bf: BuildFrom[Collection[A], B, Collection[B]], trace: Trace): ZQuery[R, E, Collection[B]] = - ZQuery(ZIO.foreachPar(Chunk.fromIterable(as))(f(_).step).map(Result.collectAllPar(_).map(bf.fromSpecific(as)))) + ZQuery.suspend { + val size = as.size + if (size == 0) + ZQuery.succeed(bf.newBuilder(as).result()) + else if (size == 1) + f(as.head).map(bf.newBuilder(as) += _).map(_.result()) + else + ZQuery(ZIO.foreachPar(Chunk.fromIterable(as))(f(_).step).map(Result.collectAllPar(_).map(bf.fromSpecific(as)))) + } /** * Performs a query for each element in a Set, collecting the results