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 StringFormat
- by Ensuring
- by ArrowAssoc
- Hide All
- Show All
- Public
- Protected
Instance Constructors
- new RewriteJoins()
Type Members
Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- def ->[B](y: B): (RewriteJoins, B)
- Implicit
- This member is added by an implicit conversion from RewriteJoins toArrowAssoc[RewriteJoins] performed by method ArrowAssoc in scala.Predef.
- Definition Classes
- ArrowAssoc
- Annotations
- @inline()
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- 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
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @HotSpotIntrinsicCandidate() @native()
- 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 ensuring(cond: (RewriteJoins) => Boolean, msg: => Any): RewriteJoins
- Implicit
- This member is added by an implicit conversion from RewriteJoins toEnsuring[RewriteJoins] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
- def ensuring(cond: (RewriteJoins) => Boolean): RewriteJoins
- Implicit
- This member is added by an implicit conversion from RewriteJoins toEnsuring[RewriteJoins] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
- def ensuring(cond: Boolean, msg: => Any): RewriteJoins
- Implicit
- This member is added by an implicit conversion from RewriteJoins toEnsuring[RewriteJoins] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
- def ensuring(cond: Boolean): RewriteJoins
- Implicit
- This member is added by an implicit conversion from RewriteJoins toEnsuring[RewriteJoins] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- 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. - final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @HotSpotIntrinsicCandidate() @native()
- def hasRefTo(n: Node, s: Set[TermSymbol]): Boolean
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @HotSpotIntrinsicCandidate() @native()
- 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. - final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- lazy val logger: SlickLogger
- Attributes
- protected[this]
- Definition Classes
- Logging
- val name: String
The unique name of the phase
The unique name of the phase
- Definition Classes
- RewriteJoins → Phase
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @HotSpotIntrinsicCandidate() @native()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @HotSpotIntrinsicCandidate() @native()
- 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]
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- Function1 → AnyRef → Any
- def tr(n: Node): Node
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
Deprecated Value Members
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable]) @Deprecated
- Deprecated
(Since version 9)
- def formatted(fmtstr: String): String
- Implicit
- This member is added by an implicit conversion from RewriteJoins toStringFormat[RewriteJoins] performed by method StringFormat in scala.Predef.
- Definition Classes
- StringFormat
- Annotations
- @deprecated @inline()
- Deprecated
(Since version 2.12.16) Use
formatString.format(value)
instead ofvalue.formatted(formatString)
, or use thef""
string interpolator. In Java 15 and later,formatted
resolves to the new method in String which has reversed parameters.
- def →[B](y: B): (RewriteJoins, B)
- Implicit
- This member is added by an implicit conversion from RewriteJoins toArrowAssoc[RewriteJoins] performed by method ArrowAssoc in scala.Predef.
- Definition Classes
- ArrowAssoc
- Annotations
- @deprecated
- Deprecated
(Since version 2.13.0) Use
->
instead. If you still wish to display it as one character, consider using a font with programming ligatures such as Fira Code.
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...