Skip to content

Commit

Permalink
Modularize rewritePaths and improve query compiler debug logging
Browse files Browse the repository at this point in the history
  • Loading branch information
szeiger committed Jul 17, 2012
1 parent 05b237e commit 1bc6c36
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 11 deletions.
8 changes: 6 additions & 2 deletions src/main/scala/scala/slick/compiler/QueryCompiler.scala
Expand Up @@ -51,7 +51,7 @@ class QueryCompiler(val phases: Vector[Phase]) extends Logging {
if(t2 ne tree) {
state.ast = t2
logger.debug("After phase "+p.name+":", t2)
}
} else logger.debug("After phase "+p.name+": (no change)")
t2
}
}
Expand All @@ -71,7 +71,9 @@ object QueryCompiler {
Phase.expandRefs,
Phase.replaceFieldSymbols,
// PathRewriter
Phase.rewritePaths
Phase.rewritePaths,
Phase.relabelUnions,
Phase.pruneFields
)

val relationalPhases = Vector(
Expand Down Expand Up @@ -113,6 +115,8 @@ object Phase {
val expandRefs = new ExpandRefs
val replaceFieldSymbols = new ReplaceFieldSymbols
val rewritePaths = new RewritePaths
val relabelUnions = new RelabelUnions
val pruneFields = new PruneFields
val resolveZipJoins = new ResolveZipJoins
val convertToComprehensions = new ConvertToComprehensions
val fuseComprehensions = new FuseComprehensions
Expand Down
27 changes: 18 additions & 9 deletions src/main/scala/scala/slick/compiler/RewritePaths.scala
Expand Up @@ -130,11 +130,7 @@ class RewritePaths extends Phase {
if(n2 ne n) logger.debug("Expansions removed, ProductNodes rewritten to StructNodes", n2)
val n3 = replaceRefs(n2)
if(n3 ne n2) logger.debug("Refs replaced", n3)
val n4 = relabelUnions(n3)
if(n4 ne n3) logger.debug("Unions relabled", n4)
val n5 = prune.repeat(n4)
if(n5 ne n4) logger.debug("Pruned", n5)
n5
n3
}

def findFieldSymbol(n: Node, path: List[Symbol]): Option[Symbol] = (path, n) match {
Expand All @@ -149,17 +145,30 @@ class RewritePaths extends Phase {
case TableRefExpansion(_, ref, cols) => cols
case n => n
}
}

/** Assign the AnonSymbols of fields from the left side of a Union to the
* right side. This ensures that both sides are protected when we prune
* unused references pointing to left-side Symbols. */
class RelabelUnions extends Phase {
val name = "relabelUnions"

def apply(n: Node, state: CompilationState) = relabelUnions(n)

/** Assign the AnonSymbols of fields from the left side of a Union to the
* right side. This ensures that both sides are protected when we prune
* unused references pointing to left-side Symbols. */
def relabelUnions(n: Node): Node = n match {
case u @ Union(l @ Bind(_, _, Pure(StructNode(ls))), rb @ Bind(_, _, Pure(StructNode(rs))), _, _, _)
if ls.size == rs.size =>
if ls.size == rs.size =>
val rs2 = (ls, rs).zipped.map { case ((s, _), (_, n)) => (s, n) }
u.copy(right = rb.copy(select = Pure(StructNode(rs2)))).nodeMapChildren(relabelUnions)
case n => n.nodeMapChildren(relabelUnions)
}
}

/** Remove unreferenced fields from StructNodes */
class PruneFields extends Phase {
val name = "pruneFields"

def apply(n: Node, state: CompilationState) = prune.repeat(n)

val prune = new Transformer {
val refs = new HashSet[Symbol]()
Expand Down
2 changes: 2 additions & 0 deletions src/test/resources/logback-test.xml
Expand Up @@ -20,6 +20,8 @@
<logger name="scala.slick.compiler.ExpandRefs" level="${log.qcomp.expandRefs:-inherited}" />
<logger name="scala.slick.compiler.ReplaceFieldSymbols" level="${log.qcomp.replaceFieldSymbols:-inherited}" />
<logger name="scala.slick.compiler.RewritePaths" level="${log.qcomp.rewritePaths:-inherited}" />
<logger name="scala.slick.compiler.RelabelUnions" level="${log.qcomp.relabelUnions:-inherited}" />
<logger name="scala.slick.compiler.PruneFields" level="${log.qcomp.pruneFields:-inherited}" />
<logger name="scala.slick.compiler.ResolveZipJoins" level="${log.qcomp.resolveZipJoins:-inherited}" />
<logger name="scala.slick.compiler.ConvertToComprehensions" level="${log.qcomp.convertToComprehensions:-inherited}" />
<logger name="scala.slick.compiler.FuseComprehensions" level="${log.qcomp.fuseComprehensions:-inherited}" />
Expand Down

0 comments on commit 1bc6c36

Please sign in to comment.