sealed trait 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
, may fail with an E
, and may succeed with an A
. All
requests that do not need to be performed sequentially, as expressed by
flatMap
or combinators derived from it, will automatically be batched,
allowing for aggressive data source specific optimizations. Requests will
also automatically 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
Abstract Value Members
Concrete 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
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
-
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
flatMap
or combinators derived from it will be executed sequentially and will not be batched, though deduplication and caching of requests will still be applied. -
final
def
fold[B](failure: (E) ⇒ B, success: (A) ⇒ B): 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
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
map[B](f: (A) ⇒ B): ZQuery[R, E, B]
Maps the specified function over the successful result of this query.
-
final
def
mapError[E1](f: (E) ⇒ E1): ZQuery[R, E1, A]
Maps the specified function over the failed 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
provide(name: String)(r: R): ZQuery[Any, E, A]
Provides this query with its required environment.
-
final
def
provideSome[R0](name: String)(f: (R0) ⇒ R): ZQuery[R0, E, A]
Provides this query with part of its required environment.
-
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.
Returns an effect that models executing this query with the specified cache. This can be useful for deterministically "replaying" a query without executing any new requests.
-
final
def
runLog: ZIO[R, E, (Cache, A)]
Returns an effect that models executing this query, returning the query result along with the cache containing a complete log of all requests executed and their results.
Returns an effect that models executing this query, returning the query result along with the cache containing a complete log of all requests executed and their results. This can be useful for logging or analysis of query execution.
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
- Definition Classes
- AnyRef → Any
-
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
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.
-
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
zipWithPar
or combinators derived from it will be batched and deduplication and caching of requests will be applied.