class ResolveZipJoins extends Phase
Rewrite zip joins into a form suitable for SQL using inner joins and RowNumber columns.
We rely on having a Bind around every Join and both of its generators, which should have been
generated by Phase.forceOuterBinds. The inner Binds need to select Pure(StructNode(...))
which should be the outcome of Phase.flattenProjections.
- Source
- ResolveZipJoins.scala
- Alphabetic
- By Inheritance
- ResolveZipJoins
- Phase
- Logging
- Function1
- AnyRef
- Any
- by any2stringadd
- by StringFormat
- by Ensuring
- by ArrowAssoc
- Hide All
- Show All
- Public
- Protected
Instance Constructors
- new ResolveZipJoins(rownumStyle: Boolean = false)
- rownumStyle
Whether to use
Subquery
boundaries suitable for Oracle-style ROWNUM semantics instead of standard ROW_NUMBER().
Type Members
- type State = Boolean
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.
- Definition Classes
- ResolveZipJoins → Phase
Value Members
- 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
- ResolveZipJoins → Phase → Function1
- def compose[A](g: (A) => CompilerState): (A) => CompilerState
- Definition Classes
- Function1
- Annotations
- @unspecialized()
- val condAbove: Condition
- val condBelow: Condition
- val name: String
The unique name of the phase
The unique name of the phase
- Definition Classes
- ResolveZipJoins → Phase
- def toString(): String
- Definition Classes
- Function1 → AnyRef → Any
- def transformZip(s1: TermSymbol, jlsym: TermSymbol, jrsym: TermSymbol, l: Bind, ldefs: ConstArray[(TermSymbol, Node)], r: Bind, rdefs: ConstArray[(TermSymbol, Node)], sel: Node): Node
Transform a
zip
operation of the formBind(s1, Join(jlsym, jrsym, l @ Bind(_, _, Pure(StructNode(ldefs), _)), r @ Bind(_, _, Pure(StructNode(rdefs), _)), JoinType.Zip, LiteralNode(true)), sel)
into an equivalent mapping operation usingRowNum
by first transforming both sides of the join intozipWithIndex
and then usingtransformZipWithIndex
on those. - def transformZipWithIndex(s1: TermSymbol, ls: TermSymbol, from: Node, defs: ConstArray[(TermSymbol, Node)], offset: Long, p: Node): Node
Transform a
zipWithIndex
operation of the formBind(s1, Join(_, _, Bind(ls, from, Pure(StructNode(defs), _)), RangeFrom(offset), JoinType.Zip, LiteralNode(true)), p)
into an equivalent mapping operation usingRowNum
.Transform a
zipWithIndex
operation of the formBind(s1, Join(_, _, Bind(ls, from, Pure(StructNode(defs), _)), RangeFrom(offset), JoinType.Zip, LiteralNode(true)), p)
into an equivalent mapping operation usingRowNum
. This method can be overridden in subclasses to implement non-standard translations.
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...