class RewriteJoins extends Phase
Rewrite monadic joins to applicative joins. After this phase all Bind
nodes are of the
form Bind(_, _, Pure(_, _))
(i.e. flatMap
has been reduced to map
).
- Source
- RewriteJoins.scala
- Alphabetic
- By Inheritance
- RewriteJoins
- Phase
- Logging
- Function1
- AnyRef
- Any
- by any2stringadd
- by StringFormat
- by Ensuring
- by ArrowAssoc
- Hide All
- Show All
- Public
- Protected
Instance Constructors
- new RewriteJoins()
Type Members
Value Members
- def and(p1Opt: Option[Node], p2: Node): Node
- def and(ns: IndexedSeq[Node]): Node
- def andThen[A](g: (CompilerState) => A): (CompilerState) => A
- Definition Classes
- Function1
- Annotations
- @unspecialized()
- def apply(state: CompilerState): CompilerState
Run the phase
Run the phase
- Definition Classes
- RewriteJoins → Phase → Function1
- def compose[A](g: (A) => CompilerState): (A) => CompilerState
- Definition Classes
- Function1
- Annotations
- @unspecialized()
- def eliminateIllegalRefs(j: Join, illegal: Set[TermSymbol], outsideRef: TermSymbol): (Join, Map[List[TermSymbol], Node])
Recursively push refs from the right-hand side of a Join to the left-hand side out of the join.
Recursively push refs from the right-hand side of a Join to the left-hand side out of the join. This is only possible when they occur in a a mapping
Bind(_, _, Pure(StructNode))
directly at the RHS of a Join. Returns the (possibly transformed) Join and replacements for forward paths into it.TODO: If the remainder of the mapping Bind is purely aliasing, eliminate it entirely.
- def flattenAliasingMap(b: Bind): Bind
Merge nested mapping operations of the form
Bind(_, Bind(_, _, Pure(StructNode(p1), _)), Pure(StructNode(p2), _))
into a single Bind, provided that each element of either p1 or p2 contains not more than one path.Merge nested mapping operations of the form
Bind(_, Bind(_, _, Pure(StructNode(p1), _)), Pure(StructNode(p2), _))
into a single Bind, provided that each element of either p1 or p2 contains not more than one path. This transformation is not required for the correctness of join rewriting but it keeps the tree smaller to speed up subsequent phases. - def hasRefTo(n: Node, s: Set[TermSymbol]): Boolean
- def hoistFilterFromBind(b: Bind): (Node, Set[TypeSymbol])
Recursively hoist
Filter
out of ofBind(_, Filter, Pure(StructNode))
.Recursively hoist
Filter
out of ofBind(_, Filter, Pure(StructNode))
. Returns the possibly modified tree plus a set of invalidated TypeSymbols (non-empty if additional columns have to be added to the base projection for the filters). - def hoistFilters(j: Join): (Join, Set[TypeSymbol])
Hoist
Filter
nodes inJoin
generators into join predicates. - val name: String
The unique name of the phase
The unique name of the phase
- Definition Classes
- RewriteJoins → Phase
- def rearrangeJoinConditions(j: Join, alsoPull: Set[TermSymbol]): Join
In a
Join(s1, _, _, Join(_, _, _, _, JoinType.Inner, on2), JoinType.Inner, on1)
where parts ofon2
refer tos1
, merge them intoon1
.In a
Join(s1, _, _, Join(_, _, _, _, JoinType.Inner, on2), JoinType.Inner, on1)
where parts ofon2
refer tos1
, merge them intoon1
. Nested joins are processed recursively. The same is done in the opposite direction, pushing predicates down into sub-joins if they only reference one side of the join. - def splitConjunctions(n: Node): IndexedSeq[Node]
- def toString(): String
- Definition Classes
- Function1 → AnyRef → Any
- def tr(n: Node): Node
edit this text on github
Scala Language-Integrated Connection Kit
This is the API documentation for the Slick database library. It should be used as an additional resource to the user manual.
Further documentation for Slick can be found on the documentation pages.
To the slick package list...