final class ZQuery[-R, +E, +A] extends AnyRef
A ZQuery[R, E, A] is a purely functional description of an effectual query
that may contain requests from one or more data sources, requires an
environment R, and may fail with an E or succeed with an A.
Requests that can be performed in parallel, as expressed by zipWithPar and
combinators derived from it, will automatically be batched. Requests that
must be performed sequentially, as expressed by zipWith and combinators
derived from it, will automatically be pipelined. This allows for aggressive
data source specific optimizations. Requests can also be deduplicated and
cached.
This allows for writing queries in a high level, compositional style, with confidence that they will automatically be optimized. For example, consider the following query from a user service.
val getAllUserIds: ZQuery[Any, Nothing, List[Int]] = ??? def getUserNameById(id: Int): ZQuery[Any, Nothing, String] = ??? for { userIds <- getAllUserIds userNames <- ZQuery.foreachPar(userIds)(getUserNameById) } yield userNames
This would normally require N + 1 queries, one for getAllUserIds and one
for each call to getUserNameById. In contrast, ZQuery will automatically
optimize this to two queries, one for userIds and one for userNames,
assuming an implementation of the user service that supports batching.
Based on "There is no Fork: an Abstraction for Efficient, Concurrent, and Concise Data Access" by Simon Marlow, Louis Brandy, Jonathan Coens, and Jon Purdy. http://simonmar.github.io/bib/papers/haxl-icfp14.pdf
- Self Type
- ZQuery[R, E, A]
- Alphabetic
- By Inheritance
- ZQuery
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
final
def
&>[R1 <: R, E1 >: E, B](that: ⇒ ZQuery[R1, E1, B])(implicit trace: Trace): ZQuery[R1, E1, B]
A symbolic alias for
zipParRight. -
final
def
*>[R1 <: R, E1 >: E, B](that: ⇒ ZQuery[R1, E1, B])(implicit trace: Trace): ZQuery[R1, E1, B]
A symbolic alias for
zipRight. -
final
def
<&[R1 <: R, E1 >: E, B](that: ⇒ ZQuery[R1, E1, B])(implicit trace: Trace): ZQuery[R1, E1, A]
A symbolic alias for
zipParLeft. -
final
def
<&>[R1 <: R, E1 >: E, B](that: ⇒ ZQuery[R1, E1, B])(implicit zippable: Zippable[A, B], trace: Trace): ZQuery[R1, E1, Out]
A symbolic alias for
zipPar. -
final
def
<*[R1 <: R, E1 >: E, B](that: ⇒ ZQuery[R1, E1, B])(implicit trace: Trace): ZQuery[R1, E1, A]
A symbolic alias for
zipLeft. -
final
def
<*>[R1 <: R, E1 >: E, B](that: ⇒ ZQuery[R1, E1, B])(implicit zippable: Zippable[A, B], trace: Trace): ZQuery[R1, E1, Out]
A symbolic alias for
zip. -
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
@@[R1 <: R](aspect: ⇒ DataSourceAspect[R1])(implicit trace: Trace): ZQuery[R1, E, A]
Syntax for adding aspects.
-
def
absolve[E1 >: E, B](implicit ev: IsSubtypeOfOutput[A, Either[E1, B]], trace: Trace): ZQuery[R, E1, B]
Returns a query which submerges the error case of
Eitherinto the error channel of the queryReturns a query which submerges the error case of
Eitherinto the error channel of the queryThe inverse of ZQuery.either
-
final
def
as[B](b: ⇒ B)(implicit trace: Trace): ZQuery[R, E, B]
Maps the success value of this query to the specified constant value.
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
asSomeError(implicit trace: Trace): ZQuery[R, Option[E], A]
Lifts the error channel into a
Somevalue for composition with other optional queries -
def
cached(implicit trace: Trace): ZQuery[R, E, A]
Enables caching for this query.
Enables caching for this query. Note that caching is enabled by default so this will only be effective to enable caching in part of a larger query in which caching has been disabled.
-
def
catchAll[R1 <: R, E2, A1 >: A](h: (E) ⇒ ZQuery[R1, E2, A1])(implicit ev: CanFail[E], trace: Trace): ZQuery[R1, E2, A1]
Recovers from all errors.
-
def
catchAllCause[R1 <: R, E2, A1 >: A](h: (Cause[E]) ⇒ ZQuery[R1, E2, A1])(implicit trace: Trace): ZQuery[R1, E2, A1]
Recovers from all errors with provided Cause.
-
def
clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
-
final
def
either(implicit ev: CanFail[E], trace: Trace): ZQuery[R, Nothing, Either[E, A]]
Returns a query whose failure and success have been lifted into an
Either.Returns a query whose failure and success have been lifted into an
Either. The resulting query cannot fail, because the failure case has been exposed as part of theEithersuccess case. -
final
def
ensuring[R1 <: R](finalizer: ⇒ ZQuery[R1, Nothing, Any])(implicit trace: Trace): ZQuery[R1, E, A]
Ensures that if this query starts executing, the specified query will be executed immediately after this query completes execution, whether by success or failure.
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
final
def
flatMap[R1 <: R, E1 >: E, B](f: (A) ⇒ ZQuery[R1, E1, B])(implicit trace: Trace): ZQuery[R1, E1, B]
Returns a query that models execution of this query, followed by passing its result to the specified function that returns a query.
Returns a query that models execution of this query, followed by passing its result to the specified function that returns a query. Requests composed with
flatMapor combinators derived from it will be executed sequentially and will not be pipelined, though deduplication and caching of requests may still be applied. -
final
def
flatten[R1 <: R, E1 >: E, B](implicit ev: IsSubtypeOfOutput[A, ZQuery[R1, E1, B]], trace: Trace): ZQuery[R1, E1, B]
Returns a query that performs the outer query first, followed by the inner query, yielding the value of the inner query.
Returns a query that performs the outer query first, followed by the inner query, yielding the value of the inner query.
This method can be used to "flatten" nested queries.
-
final
def
fold[B](failure: (E) ⇒ B, success: (A) ⇒ B)(implicit ev: CanFail[E], trace: Trace): ZQuery[R, Nothing, B]
Folds over the failed or successful result of this query to yield a query that does not fail, but succeeds with the value returned by the left or right function passed to
fold. -
final
def
foldCauseQuery[R1 <: R, E1, B](failure: (Cause[E]) ⇒ ZQuery[R1, E1, B], success: (A) ⇒ ZQuery[R1, E1, B])(implicit trace: Trace): ZQuery[R1, E1, B]
A more powerful version of
foldQuerythat allows recovering from any type of failure except interruptions. -
final
def
foldQuery[R1 <: R, E1, B](failure: (E) ⇒ ZQuery[R1, E1, B], success: (A) ⇒ ZQuery[R1, E1, B])(implicit ev: CanFail[E], trace: Trace): ZQuery[R1, E1, B]
Recovers from errors by accepting one query to execute for the case of an error, and one query to execute for the case of success.
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
final
def
left[B, C](implicit ev: IsSubtypeOfOutput[A, Either[B, C]], trace: Trace): ZQuery[R, Either[E, C], B]
"Zooms in" on the value in the
Leftside of anEither, moving the possibility that the value is aRightto the error channel. -
final
def
map[B](f: (A) ⇒ B)(implicit trace: Trace): ZQuery[R, E, B]
Maps the specified function over the successful result of this query.
-
final
def
mapBoth[E1, B](f: (E) ⇒ E1, g: (A) ⇒ B)(implicit ev: CanFail[E], trace: Trace): ZQuery[R, E1, B]
Returns a query whose failure and success channels have been mapped by the specified pair of functions,
fandg. -
final
def
mapDataSources[R1 <: R](f: ⇒ DataSourceAspect[R1])(implicit trace: Trace): ZQuery[R1, E, A]
Transforms all data sources with the specified data source aspect.
-
final
def
mapError[E1](f: (E) ⇒ E1)(implicit ev: CanFail[E], trace: Trace): ZQuery[R, E1, A]
Maps the specified function over the failed result of this query.
-
def
mapErrorCause[E2](h: (Cause[E]) ⇒ Cause[E2])(implicit trace: Trace): ZQuery[R, E2, A]
Returns a query with its full cause of failure mapped using the specified function.
Returns a query with its full cause of failure mapped using the specified function. This can be used to transform errors while preserving the original structure of
Cause. -
final
def
mapZIO[R1 <: R, E1 >: E, B](f: (A) ⇒ ZIO[R1, E1, B])(implicit trace: Trace): ZQuery[R1, E1, B]
Maps the specified effectual function over the result of this query.
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
optional(implicit trace: Trace): ZQuery[R, E, Option[A]]
Converts this query to one that returns
Someif data sources return results for all requests received andNoneotherwise. -
final
def
orDie(implicit ev1: IsSubtypeOfError[E, Throwable], ev2: CanFail[E], trace: Trace): ZQuery[R, Nothing, A]
Converts this query to one that dies if a query failure occurs.
-
final
def
orDieWith(f: (E) ⇒ Throwable)(implicit ev: CanFail[E], trace: Trace): ZQuery[R, Nothing, A]
Converts this query to one that dies if a query failure occurs, using the specified function to map the error to a
Throwable. -
final
def
provideEnvironment(r: ⇒ Described[ZEnvironment[R]])(implicit trace: Trace): ZQuery[Any, E, A]
Provides this query with its required environment.
-
final
def
provideLayer[E1 >: E, R0](layer: ⇒ Described[ZLayer[R0, E1, R]])(implicit trace: Trace): ZQuery[R0, E1, A]
Provides a layer to this query, which translates it to another level.
-
final
def
provideSomeEnvironment[R0](f: ⇒ Described[(ZEnvironment[R0]) ⇒ ZEnvironment[R]])(implicit trace: Trace): ZQuery[R0, E, A]
Provides this query with part of its required environment.
-
final
def
provideSomeLayer[R0]: ProvideSomeLayer[R0, R, E, A]
Splits the environment into two parts, providing one part using the specified layer and leaving the remainder
R0. -
def
race[R1 <: R, E1 >: E, A1 >: A](that: ⇒ ZQuery[R1, E1, A1])(implicit trace: Trace): ZQuery[R1, E1, A1]
Races this query with the specified query, returning the result of the first to complete successfully and safely interrupting the other.
-
def
refineOrDie[E1](pf: PartialFunction[E, E1])(implicit ev1: IsSubtypeOfError[E, Throwable], ev2: CanFail[E], trace: Trace): ZQuery[R, E1, A]
Keeps some of the errors, and terminates the query with the rest
-
def
refineOrDieWith[E1](pf: PartialFunction[E, E1])(f: (E) ⇒ Throwable)(implicit ev: CanFail[E], trace: Trace): ZQuery[R, E1, A]
Keeps some of the errors, and terminates the query with the rest, using the specified function to convert the
Einto aThrowable. -
final
def
right[B, C](implicit ev: IsSubtypeOfOutput[A, Either[B, C]], trace: Trace): ZQuery[R, Either[B, E], C]
"Zooms in" on the value in the
Rightside of anEither, moving the possibility that the value is aLeftto the error channel. -
final
def
run(implicit trace: Trace): ZIO[R, E, A]
Returns an effect that models executing this query.
-
final
def
runCache(cache: ⇒ Cache)(implicit trace: Trace): ZIO[R, E, A]
Returns an effect that models executing this query with the specified cache.
-
final
def
runLog(implicit trace: Trace): ZIO[R, E, (Cache, A)]
Returns an effect that models executing this query, returning the query result along with the cache.
-
def
sandbox(implicit trace: Trace): ZQuery[R, Cause[E], A]
Expose the full cause of failure of this query
-
def
sandboxWith[R1 <: R, E2, B](f: (ZQuery[R1, Cause[E], A]) ⇒ ZQuery[R1, Cause[E2], B])(implicit trace: Trace): ZQuery[R1, E2, B]
Companion helper to
sandbox.Companion helper to
sandbox. Allows recovery, and partial recovery, from errors and defects alike, as in: -
def
some[B](implicit ev: IsSubtypeOfOutput[A, Option[B]], trace: Trace): ZQuery[R, Option[E], B]
Extracts a Some value into the value channel while moving the None into the error channel for easier composition
Extracts a Some value into the value channel while moving the None into the error channel for easier composition
Inverse of ZQuery.unoption
-
def
someOrElse[B](default: ⇒ B)(implicit ev: <:<[A, Option[B]], trace: Trace): ZQuery[R, E, B]
Extracts the optional value or succeeds with the given 'default' value.
-
final
def
someOrElseZIO[B, R1 <: R, E1 >: E](default: ZQuery[R1, E1, B])(implicit ev: <:<[A, Option[B]], trace: Trace): ZQuery[R1, E1, B]
Extracts the optional value or executes the given 'default' query.
-
final
def
someOrFail[B, E1 >: E](e: ⇒ E1)(implicit ev: IsSubtypeOfOutput[A, Option[B]], trace: Trace): ZQuery[R, E1, B]
Extracts the optional value or fails with the given error
e. -
final
def
summarized[R1 <: R, E1 >: E, B, C](summary0: ZIO[R1, E1, B])(f: (B, B) ⇒ C)(implicit trace: Trace): ZQuery[R1, E1, (C, A)]
Summarizes a query by computing some value before and after execution, and then combining the values to produce a summary, together with the result of execution.
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
final
def
timed(implicit trace: Trace): ZQuery[R, E, (zio.Duration, A)]
Returns a new query that executes this one and times the execution.
-
final
def
timeout(duration: ⇒ zio.Duration)(implicit trace: Trace): ZQuery[R, E, Option[A]]
Returns an effect that will timeout this query, returning
Noneif the timeout elapses before the query was completed. -
final
def
timeoutFail[E1 >: E](e: ⇒ E1)(duration: ⇒ zio.Duration)(implicit trace: Trace): ZQuery[R, E1, A]
The same as timeout, but instead of producing a
Nonein the event of timeout, it will produce the specified error. -
final
def
timeoutFailCause[E1 >: E](cause: ⇒ Cause[E1])(duration: ⇒ zio.Duration)(implicit trace: Trace): ZQuery[R, E1, A]
The same as timeout, but instead of producing a
Nonein the event of timeout, it will produce the specified failure. -
final
def
timeoutTo[B](b: ⇒ B): TimeoutTo[R, E, A, B]
Returns a query that will timeout this query, returning either the default value if the timeout elapses before the query has completed or the result of applying the function
fto the successful result of the query. -
def
toString(): String
- Definition Classes
- AnyRef → Any
-
def
uncached(implicit trace: Trace): ZQuery[R, E, A]
Disables caching for this query.
-
final
def
unleft[E1, B](implicit ev: IsSubtypeOfError[E, Either[E1, B]], trace: Trace): ZQuery[R, E1, Either[A, B]]
Converts a
ZQuery[R, Either[E, B], A]into aZQuery[R, E, Either[A, B]].Converts a
ZQuery[R, Either[E, B], A]into aZQuery[R, E, Either[A, B]]. The inverse ofleft. -
final
def
unoption[E1](implicit ev: IsSubtypeOfError[E, Option[E1]], trace: Trace): ZQuery[R, E1, Option[A]]
Converts an option on errors into an option on values.
-
final
def
unrefine[E1 >: E](pf: PartialFunction[Throwable, E1])(implicit trace: Trace): ZQuery[R, E1, A]
Takes some fiber failures and converts them into errors.
-
final
def
unrefineTo[E1 >: E](implicit arg0: ClassTag[E1], trace: Trace): ZQuery[R, E1, A]
Takes some fiber failures and converts them into errors.
-
final
def
unrefineWith[E1](pf: PartialFunction[Throwable, E1])(f: (E) ⇒ E1)(implicit trace: Trace): ZQuery[R, E1, A]
Takes some fiber failures and converts them into errors, using the specified function to convert the
Einto anE1. -
final
def
unright[E1, B](implicit ev: IsSubtypeOfError[E, Either[B, E1]], trace: Trace): ZQuery[R, E1, Either[B, A]]
Converts a
ZQuery[R, Either[B, E], A]into aZQuery[R, E, Either[B, A]].Converts a
ZQuery[R, Either[B, E], A]into aZQuery[R, E, Either[B, A]]. The inverse ofright. -
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
-
final
def
zip[R1 <: R, E1 >: E, B](that: ⇒ ZQuery[R1, E1, B])(implicit zippable: Zippable[A, B], trace: Trace): ZQuery[R1, E1, Out]
Returns a query that models the execution of this query and the specified query sequentially, combining their results into a tuple.
-
final
def
zipBatched[R1 <: R, E1 >: E, B](that: ⇒ ZQuery[R1, E1, B])(implicit zippable: Zippable[A, B], trace: Trace): ZQuery[R1, E1, Out]
Returns a query that models the execution of this query and the specified query, batching requests to data sources and combining their results into a tuple.
-
final
def
zipBatchedLeft[R1 <: R, E1 >: E, B](that: ⇒ ZQuery[R1, E1, B])(implicit trace: Trace): ZQuery[R1, E1, A]
Returns a query that models the execution of this query and the specified query, batching requests to data sources and returning the result of this query.
-
final
def
zipBatchedRight[R1 <: R, E1 >: E, B](that: ⇒ ZQuery[R1, E1, B])(implicit trace: Trace): ZQuery[R1, E1, B]
Returns a query that models the execution of this query and the specified query, batching requests to data sources and returning the result of the specified query.
-
final
def
zipLeft[R1 <: R, E1 >: E, B](that: ⇒ ZQuery[R1, E1, B])(implicit trace: Trace): ZQuery[R1, E1, A]
Returns a query that models the execution of this query and the specified query sequentially, returning the result of this query.
-
final
def
zipPar[R1 <: R, E1 >: E, B](that: ⇒ ZQuery[R1, E1, B])(implicit zippable: Zippable[A, B], trace: Trace): ZQuery[R1, E1, Out]
Returns a query that models the execution of this query and the specified query in parallel, combining their results into a tuple.
-
final
def
zipParLeft[R1 <: R, E1 >: E, B](that: ⇒ ZQuery[R1, E1, B])(implicit trace: Trace): ZQuery[R1, E1, A]
Returns a query that models the execution of this query and the specified query in parallel, returning the result of this query.
-
final
def
zipParRight[R1 <: R, E1 >: E, B](that: ⇒ ZQuery[R1, E1, B])(implicit trace: Trace): ZQuery[R1, E1, B]
Returns a query that models the execution of this query and the specified query in parallel, returning the result of the specified query.
-
final
def
zipRight[R1 <: R, E1 >: E, B](that: ⇒ ZQuery[R1, E1, B])(implicit trace: Trace): ZQuery[R1, E1, B]
Returns a query that models the execution of this query and the specified query sequentially, returning the result of the specified query.
-
final
def
zipWith[R1 <: R, E1 >: E, B, C](that: ⇒ ZQuery[R1, E1, B])(f: (A, B) ⇒ C)(implicit trace: Trace): ZQuery[R1, E1, C]
Returns a query that models the execution of this query and the specified query sequentially, combining their results with the specified function.
Returns a query that models the execution of this query and the specified query sequentially, combining their results with the specified function. Requests composed with
zipWithor combinators derived from it will automatically be pipelined. -
final
def
zipWithBatched[R1 <: R, E1 >: E, B, C](that: ⇒ ZQuery[R1, E1, B])(f: (A, B) ⇒ C)(implicit trace: Trace): ZQuery[R1, E1, C]
Returns a query that models the execution of this query and the specified query, batching requests to data sources.
-
final
def
zipWithPar[R1 <: R, E1 >: E, B, C](that: ⇒ ZQuery[R1, E1, B])(f: (A, B) ⇒ C)(implicit trace: Trace): ZQuery[R1, E1, C]
Returns a query that models the execution of this query and the specified query in parallel, combining their results with the specified function.
Returns a query that models the execution of this query and the specified query in parallel, combining their results with the specified function. Requests composed with
zipWithParor combinators derived from it will automatically be batched.