RewriteJoins

slick.compiler.RewriteJoins
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).

Attributes

Source:
RewriteJoins.scala
Graph
Supertypes
trait Phase
trait Logging
class Object
trait Matchable
class Any

Members list

Concise view

Type members

Inherited types

type State

The immutable state of the phase that can also be accessed by other phases.

The immutable state of the phase that can also be accessed by other phases.

Attributes

Inherited from:
Phase
Source:
QueryCompiler.scala

Value members

Concrete methods

def and(ns: IndexedSeq[Node]): Node

Attributes

Source:
RewriteJoins.scala
def and(p1Opt: Option[Node], p2: Node): Node

Attributes

Source:
RewriteJoins.scala

Run the phase

Run the phase

Attributes

Source:
RewriteJoins.scala
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. 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.

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.

Attributes

Source:
RewriteJoins.scala

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.

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.

Attributes

Source:
RewriteJoins.scala
def hasRefTo(n: Node, s: Set[TermSymbol]): Boolean

Attributes

Source:
RewriteJoins.scala

Recursively hoist Filter out of of Bind(_, 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).

Recursively hoist Filter out of of Bind(_, 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).

Attributes

Source:
RewriteJoins.scala
def hoistFilters(j: Join): (Join, Set[TypeSymbol])

Hoist Filter nodes in Join generators into join predicates.

Hoist Filter nodes in Join generators into join predicates.

Attributes

Source:
RewriteJoins.scala
def rearrangeJoinConditions(j: Join, alsoPull: Set[TermSymbol]): Join

In a Join(s1, _, _, Join(_, _, _, _, JoinType.Inner, on2), JoinType.Inner, on1) where parts of on2 refer to s1, merge them into on1. 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.

In a Join(s1, _, _, Join(_, _, _, _, JoinType.Inner, on2), JoinType.Inner, on1) where parts of on2 refer to s1, merge them into on1. 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.

Attributes

Source:
RewriteJoins.scala
def splitConjunctions(n: Node): IndexedSeq[Node]

Attributes

Source:
RewriteJoins.scala
def tr(n: Node): Node

Attributes

Source:
RewriteJoins.scala

Inherited methods

def andThen[A](g: CompilerState => A): T1 => A

Attributes

Inherited from:
Function1
def compose[A](g: A => CompilerState): A => R

Attributes

Inherited from:
Function1
override def toString(): String

Returns a string representation of the object.

Returns a string representation of the object.

The default representation is platform dependent.

Attributes

Returns:

a string representation of the object.

Definition Classes
Function1 -> Any
Inherited from:
Function1

Concrete fields

val name: String

The unique name of the phase

The unique name of the phase

Attributes

Source:
RewriteJoins.scala