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]): ZQuery[R1, E1, B]
A symbolic alias for
zipParRight. -
final
def
*>[R1 <: R, E1 >: E, B](that: ZQuery[R1, E1, B]): ZQuery[R1, E1, B]
A symbolic alias for
zipRight. -
final
def
<&[R1 <: R, E1 >: E, B](that: ZQuery[R1, E1, B]): ZQuery[R1, E1, A]
A symbolic alias for
zipParLeft. -
final
def
<&>[R1 <: R, E1 >: E, B](that: ZQuery[R1, E1, B]): ZQuery[R1, E1, (A, B)]
A symbolic alias for
zipPar. -
final
def
<*[R1 <: R, E1 >: E, B](that: ZQuery[R1, E1, B]): ZQuery[R1, E1, A]
A symbolic alias for
zipLeft. -
final
def
<*>[R1 <: R, E1 >: E, B](that: ZQuery[R1, E1, B]): ZQuery[R1, E1, (A, B)]
A symbolic alias for
zip. -
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
>>=[R1 <: R, E1 >: E, B](f: (A) ⇒ ZQuery[R1, E1, B]): ZQuery[R1, E1, B]
A symbolic alias for
flatMap. -
final
def
@@[R1 <: R](aspect: DataSourceAspect[R1]): ZQuery[R1, E, A]
Syntax for adding aspects.
-
def
absolve[E1 >: E, B](implicit ev: <:<[A, Either[E1, B]]): 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): 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: ZQuery[R, Option[E], A]
Lifts the error channel into a
Somevalue for composition with other optional queriesLifts the error channel into a
Somevalue for composition with other optional queries- See also
-
final
def
bimap[E1, B](f: (E) ⇒ E1, g: (A) ⇒ B)(implicit ev: CanFail[E]): ZQuery[R, E1, B]
Returns a query whose failure and success channels have been mapped by the specified pair of functions,
fandg. -
def
catchAll[R1 <: R, E2, A1 >: A](h: (E) ⇒ ZQuery[R1, E2, A1])(implicit ev: CanFail[E]): ZQuery[R1, E2, A1]
Recovers from all errors.
-
def
catchAllCause[R1 <: R, E2, A1 >: A](h: (Cause[E]) ⇒ ZQuery[R1, E2, A1]): ZQuery[R1, E2, A1]
Recovers from all errors with provided Cause.
Recovers from all errors with provided Cause.
- See also
ZQuery.sandbox - other functions that can recover from defects
-
def
clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
-
def
collectSome[E1](implicit ev: <:<[E, Option[E1]]): ZQuery[R, E1, Option[A]]
Moves a
Nonevalue in the error channel into the value channel while converting the existing value into aSomeMoves a
Nonevalue in the error channel into the value channel while converting the existing value into aSomeInverse of ZQuery.some
-
final
def
either(implicit ev: CanFail[E]): 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
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]): 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: <:<[A, ZQuery[R1, E1, B]]): 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]): 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
foldCauseM[R1 <: R, E1, B](failure: (Cause[E]) ⇒ ZQuery[R1, E1, B], success: (A) ⇒ ZQuery[R1, E1, B]): ZQuery[R1, E1, B]
A more powerful version of
foldMthat allows recovering from any type of failure except interruptions. -
final
def
foldM[R1 <: R, E1, B](failure: (E) ⇒ ZQuery[R1, E1, B], success: (A) ⇒ ZQuery[R1, E1, B])(implicit ev: CanFail[E]): 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: <:<[A, Either[B, C]]): ZQuery[R, Option[E], B]
Returns a successful query if the value is
Left, or fails with the errorNone. -
final
def
leftOrFail[B, C, E1 >: E](e: ⇒ E1)(implicit ev: <:<[A, Either[B, C]]): ZQuery[R, E1, B]
Returns a successful query if the value is
Left, or fails with the error e. -
final
def
leftOrFailWith[B, C, E1 >: E](e: (C) ⇒ E1)(implicit ev: <:<[A, Either[B, C]]): ZQuery[R, E1, B]
Returns a successful query if the value is
Left, or fails with the given error function 'e'. -
final
def
map[B](f: (A) ⇒ B): ZQuery[R, E, B]
Maps the specified function over the successful result of this query.
-
final
def
mapDataSources[R1 <: R](f: DataSourceAspect[R1]): 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]): ZQuery[R, E1, A]
Maps the specified function over the failed result of this query.
-
def
mapErrorCause[E2](h: (Cause[E]) ⇒ Cause[E2]): 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.- See also
sandbox, catchAllCause - other functions for dealing with defects
-
final
def
mapM[R1 <: R, E1 >: E, B](f: (A) ⇒ ZIO[R1, E1, B]): 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: 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: <:<[E, Throwable], ev2: CanFail[E]): 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]): 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
provide(r: Described[R])(implicit ev: NeedsEnv[R]): ZQuery[Any, E, A]
Provides this query with its required environment.
-
final
def
provideCustomLayer[E1 >: E, R1 <: Has[_]](layer: Described[ZLayer[zio.ZEnv, E1, R1]])(implicit ev: <:<[zio.ZEnv with R1, R], tag: zio.Tag[R1]): ZQuery[zio.ZEnv, E1, A]
Provides the part of the environment that is not part of the
ZEnv, leaving a query that only depends on theZEnv. -
final
def
provideLayer[E1 >: E, R0, R1 <: Has[_]](layer: Described[ZLayer[R0, E1, R1]])(implicit ev1: <:<[R1, R], ev2: NeedsEnv[R]): ZQuery[R0, E1, A]
Provides a layer to this query, which translates it to another level.
-
final
def
provideSome[R0](f: Described[(R0) ⇒ R])(implicit ev: NeedsEnv[R]): ZQuery[R0, E, A]
Provides this query with part of its required environment.
-
final
def
provideSomeLayer[R0 <: Has[_]]: ProvideSomeLayer[R0, R, E, A]
Splits the environment into two parts, providing one part using the specified layer and leaving the remainder
R0. -
def
refineOrDie[E1](pf: PartialFunction[E, E1])(implicit ev1: <:<[E, Throwable], ev2: CanFail[E]): 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]): 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. -
def
right[B, C](implicit ev: <:<[A, Either[B, C]]): ZQuery[R, Option[E], C]
Returns a successful effect if the value is
Right, or fails with the errorNone. -
def
rightOrFail[B, C, E1 >: E](e: ⇒ E1)(implicit ev: <:<[A, Either[B, C]]): ZQuery[R, E1, C]
Returns a successful effect if the value is
Right, or fails with the given error 'e'. -
def
rightOrFailWith[B, C, E1 >: E](e: (B) ⇒ E1)(implicit ev: <:<[A, Either[B, C]]): ZQuery[R, E1, C]
Returns a successful effect if the value is
Right, or fails with the given error function 'e'. -
final
val
run: ZIO[R, E, A]
Returns an effect that models executing this query.
-
final
def
runCache(cache: Cache): ZIO[R, E, A]
Returns an effect that models executing this query with the specified cache.
-
final
def
runLog: ZIO[R, E, (Cache, A)]
Returns an effect that models executing this query, returning the query result along with the cache.
-
def
sandbox: 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]): 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: <:<[A, Option[B]]): 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.collectSome
-
final
def
someOrFail[B, E1 >: E](e: ⇒ E1)(implicit ev: <:<[A, Option[B]]): ZQuery[R, E1, B]
Extracts the optional value or fails with the given error
e. -
final
def
summarized[R1 <: R, E1 >: E, B, C](summary: ZIO[R1, E1, B])(f: (B, B) ⇒ C): 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: ZQuery[R with Clock, E, (Duration, A)]
Returns a new query that executes this one and times the execution.
-
def
toString(): String
- Definition Classes
- AnyRef → Any
-
final
def
unrefine[E1 >: E](pf: PartialFunction[Throwable, E1]): ZQuery[R, E1, A]
Takes some fiber failures and converts them into errors.
-
final
def
unrefineTo[E1 >: E](implicit arg0: ClassTag[E1]): ZQuery[R, E1, A]
Takes some fiber failures and converts them into errors.
-
final
def
unrefineWith[E1](pf: PartialFunction[Throwable, E1])(f: (E) ⇒ E1): ZQuery[R, E1, A]
Takes some fiber failures and converts them into errors, using the specified function to convert the
Einto anE1. -
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]): ZQuery[R1, E1, (A, B)]
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]): ZQuery[R1, E1, (A, B)]
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]): 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]): 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]): 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]): ZQuery[R1, E1, (A, B)]
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]): 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]): 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]): 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): 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): 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): 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.