AnalyzeExprVisitor.scala
package org.wikidata.query.rdf.spark.transform.queries.sparql.visitors
import scala.collection.mutable
import scala.collection.JavaConverters._
import org.apache.jena.sparql.expr._
class AnalyzeExprVisitor(
nodeVisitor: AnalyzeNodeVisitor,
//pathVisitor: AnalyzePathVisitor,
opVisitor: AnalyzeOpVisitor
) extends ExprVisitor {
val exprVisited: mutable.Map[String, Long] = new mutable.HashMap[String, Long]().withDefaultValue(0L)
private def incExprVisited(e: Expr) = exprVisited(e.toString) = exprVisited(e.toString) + 1L
override def visit(exprFunction0: ExprFunction0): Unit = {
incExprVisited(exprFunction0)
()
}
override def visit(exprFunction1: ExprFunction1): Unit = {
incExprVisited(exprFunction1)
exprFunction1.getArg.visit(this)
}
override def visit(exprFunction2: ExprFunction2): Unit = {
incExprVisited(exprFunction2)
exprFunction2.getArg1.visit(this)
exprFunction2.getArg2.visit(this)
}
override def visit(exprFunction3: ExprFunction3): Unit = {
incExprVisited(exprFunction3)
exprFunction3.getArg1.visit(this)
exprFunction3.getArg2.visit(this)
exprFunction3.getArg3.visit(this)
}
override def visit(exprFunctionN: ExprFunctionN): Unit = {
incExprVisited(exprFunctionN)
exprFunctionN.getArgs.asScala.foreach(_.visit(this))
}
override def visit(exprFunctionOp: ExprFunctionOp): Unit = {
incExprVisited(exprFunctionOp)
// Not used: exprFunctionOp.getElement.visit(new AnalyzeElementVisitor(nodeVisitor, pathVisitor, this, opVisitor))
exprFunctionOp.getGraphPattern.visit(opVisitor)
}
override def visit(nodeValue: NodeValue): Unit = {
nodeValue.asNode().visitWith(nodeVisitor)
}
override def visit(exprVar: ExprVar): Unit = {
exprVar.getAsNode.visitWith(nodeVisitor)
}
override def visit(exprAggregator: ExprAggregator): Unit = {
incExprVisited(exprAggregator)
exprAggregator.getAggVar.getAsNode.visitWith(nodeVisitor)
}
override def visit(exprNone: ExprNone): Unit = {
incExprVisited(exprNone)
()
}
}