@@ -291,7 +291,7 @@ final class ZQuery[-R, +E, +A] private (private val step: ZIO[R, Nothing, Result
291
291
* Maps the specified effectual function over the result of this query.
292
292
*/
293
293
final def mapZIO [R1 <: R , E1 >: E , B ](f : A => ZIO [R1 , E1 , B ])(implicit trace : Trace ): ZQuery [R1 , E1 , B ] =
294
- flatMap(a => ZQuery .fromZIO (f(a)))
294
+ flatMap(a => ZQuery .fromZIONow (f(a)))
295
295
296
296
/**
297
297
* Converts this query to one that returns `Some` if data sources return
@@ -378,7 +378,7 @@ final class ZQuery[-R, +E, +A] private (private val step: ZIO[R, Nothing, Result
378
378
case Continue .Effect (query) =>
379
379
ZIO .succeed(Result .blocked(blockedRequests, Continue .effect(race(query, fiber))))
380
380
case Continue .Get (io) =>
381
- ZIO .succeed(Result .blocked(blockedRequests, Continue .effect(race(ZQuery .fromZIO (io), fiber))))
381
+ ZIO .succeed(Result .blocked(blockedRequests, Continue .effect(race(ZQuery .fromZIONow (io), fiber))))
382
382
}
383
383
case Result .Done (value) => fiber.interrupt *> ZIO .succeed(Result .done(value))
384
384
case Result .Fail (cause) => fiber.join.map(_.mapErrorCause(_ && cause))
@@ -534,9 +534,9 @@ final class ZQuery[-R, +E, +A] private (private val step: ZIO[R, Nothing, Result
534
534
ZQuery .suspend {
535
535
val summary = summary0
536
536
for {
537
- start <- ZQuery .fromZIO (summary)
537
+ start <- ZQuery .fromZIONow (summary)
538
538
value <- self
539
- end <- ZQuery .fromZIO (summary)
539
+ end <- ZQuery .fromZIONow (summary)
540
540
} yield (f(start, end), value)
541
541
}
542
542
@@ -966,7 +966,7 @@ object ZQuery {
966
966
* Accesses the whole environment of the query.
967
967
*/
968
968
def environment [R ](implicit trace : Trace ): ZQuery [R , Nothing , ZEnvironment [R ]] =
969
- ZQuery .fromZIO (ZIO .environment )
969
+ ZQuery (ZIO .environmentWith[ R ]( Result .done) )
970
970
971
971
/**
972
972
* Accesses the environment of the effect.
@@ -1160,7 +1160,7 @@ object ZQuery {
1160
1160
Continue .get(io)
1161
1161
} else {
1162
1162
val query = ZQuery .collectAllBatched(effects).flatMap { effects =>
1163
- ZQuery .fromZIO (ZIO .collectAll(gets).map { gets =>
1163
+ ZQuery .fromZIONow (ZIO .collectAll(gets).map { gets =>
1164
1164
val array = Array .ofDim[AnyRef ](index)
1165
1165
val effectsIterator = effects.iterator
1166
1166
val effectIndicesIterator = effectIndices.iterator
@@ -1378,11 +1378,24 @@ object ZQuery {
1378
1378
def fromZIO [R , E , A ](effect : => ZIO [R , E , A ])(implicit trace : Trace ): ZQuery [R , E , A ] =
1379
1379
ZQuery (ZIO .suspendSucceed(effect).foldCause(Result .fail, Result .done))
1380
1380
1381
+ /**
1382
+ * Constructs a query from an effect. Unlike [[fromZIO ]], this method does not
1383
+ * suspend the creation of the effect which can lead to improved performance
1384
+ * in some cases, but it should only be used when the creation of the effect
1385
+ * is side effect-free.
1386
+ *
1387
+ * Note that this is method is meant mostly for internal use, but it's made
1388
+ * public so that library authors can make use of this optimization. Most
1389
+ * users should use [[fromZIO ]] instead.
1390
+ */
1391
+ def fromZIONow [R , E , A ](effect : ZIO [R , E , A ])(implicit trace : Trace ): ZQuery [R , E , A ] =
1392
+ ZQuery (effect.foldCause(Result .fail, Result .done))
1393
+
1381
1394
/**
1382
1395
* Constructs a query that never completes.
1383
1396
*/
1384
1397
def never (implicit trace : Trace ): ZQuery [Any , Nothing , Nothing ] =
1385
- ZQuery .fromZIO (ZIO .never)
1398
+ ZQuery .fromZIONow (ZIO .never)
1386
1399
1387
1400
/**
1388
1401
* Constructs a query that succeds with the empty value.
@@ -1418,7 +1431,7 @@ object ZQuery {
1418
1431
* Accesses the whole environment of the query.
1419
1432
*/
1420
1433
def service [R : Tag ](implicit trace : Trace ): ZQuery [R , Nothing , R ] =
1421
- ZQuery .fromZIO (ZIO .service )
1434
+ ZQuery (ZIO .serviceWith[ R ]( Result .done) )
1422
1435
1423
1436
/**
1424
1437
* Accesses the environment of the effect.
@@ -1526,7 +1539,7 @@ object ZQuery {
1526
1539
ZIO .succeed(Result .blocked(blockedRequests, Continue .effect(race(query, fiber))))
1527
1540
case Continue .Get (io) =>
1528
1541
ZIO .succeed(
1529
- Result .blocked(blockedRequests, Continue .effect(race(ZQuery .fromZIO (io), fiber)))
1542
+ Result .blocked(blockedRequests, Continue .effect(race(ZQuery .fromZIONow (io), fiber)))
1530
1543
)
1531
1544
}
1532
1545
case Result .Done (value) => rightFiber.interrupt *> ZIO .succeed(Result .done(value))
@@ -1537,7 +1550,7 @@ object ZQuery {
1537
1550
)
1538
1551
}
1539
1552
1540
- ZQuery .fromZIO (ZIO .sleep(duration).interruptible.as(b()).fork).flatMap(fiber => race(self.map(f), fiber))
1553
+ ZQuery .fromZIONow (ZIO .sleep(duration).interruptible.as(b()).fork).flatMap(fiber => race(self.map(f), fiber))
1541
1554
}
1542
1555
}
1543
1556
@@ -1634,19 +1647,19 @@ object ZQuery {
1634
1647
.suspend(use(a))
1635
1648
.foldCauseQuery(
1636
1649
cause =>
1637
- ZQuery .fromZIO {
1650
+ ZQuery .fromZIONow {
1638
1651
ZIO
1639
1652
.suspendSucceed(release(a, Exit .failCause(cause)))
1640
1653
.whenZIO(ref.getAndSet(false ))
1641
1654
.mapErrorCause(cause ++ _) *>
1642
1655
ZIO .refailCause(cause)
1643
1656
},
1644
1657
b =>
1645
- ZQuery .fromZIO {
1658
+ ZQuery .fromZIONow {
1646
1659
ZIO
1647
1660
.suspendSucceed(release(a, Exit .succeed(b)))
1648
- .whenZIO(ref.getAndSet(false )) *>
1649
- ZIO .succeed (b)
1661
+ .whenZIO(ref.getAndSet(false ))
1662
+ .as (b)
1650
1663
}
1651
1664
)
1652
1665
}
0 commit comments