in src/spark-project/sparder/src/main/scala/org/apache/kylin/query/runtime/CalciteToSparkPlaner.scala [44:113]
override def visit(node: RelNode, ordinal: Int, parent: RelNode): Unit = {
if (node.isInstanceOf[OlapUnionRel]) {
unionLayer = unionLayer + 1
}
if (node.isInstanceOf[OlapUnionRel] || node.isInstanceOf[OlapMinusRel]) {
setOpStack.offerLast(stack.size())
}
// skip non runtime joins children
// cases to skip children visit
// 1. current node is a OlapJoinRel and is not a runtime join
// 2. current node is a OlapNonEquiJoinRel and is not a runtime join
if (!(node.isInstanceOf[OlapJoinRel] && !node.asInstanceOf[OlapJoinRel].isRuntimeJoin) &&
!(node.isInstanceOf[OlapNonEquiJoinRel] && !node.asInstanceOf[OlapNonEquiJoinRel].isRuntimeJoin)) {
node.childrenAccept(this)
}
stack.offerLast(node match {
case rel: OlapTableScan => convertTableScan(rel)
case rel: OlapFilterRel =>
logTime("filter") {
FilterPlan.filter(stack.pollLast(), rel, dataContext)
}
case rel: OlapProjectRel =>
logTime("project") {
ProjectPlan.select(stack.pollLast(), rel, dataContext)
}
case rel: OlapLimitRel =>
logTime("limit") {
LimitPlan.limit(stack.pollLast(), rel, dataContext)
}
case rel: OlapSortRel =>
logTime("sort") {
SortPlan.sort(stack.pollLast(), rel, dataContext)
}
case rel: OlapWindowRel =>
logTime("window") {
WindowPlan.window(stack.pollLast(), rel, dataContext)
}
case rel: OlapAggregateRel =>
logTime("agg") {
AggregatePlan.agg(stack.pollLast(), rel)
}
case rel: OlapJoinRel => convertJoinRel(rel)
case rel: OlapNonEquiJoinRel => convertNonEquiJoinRel(rel)
case rel: OlapUnionRel =>
val size = setOpStack.pollLast()
var unionBlocks = Range(0, stack.size() - size).map(_ => stack.pollLast())
if (KylinConfig.getInstanceFromEnv.isCollectUnionInOrder) {
unionBlocks = unionBlocks.reverse
}
logTime("union") {
plan.UnionPlan.union(unionBlocks, rel, dataContext)
}
case rel: OlapMinusRel =>
val size = setOpStack.pollLast()
logTime("minus") {
plan.MinusPlan.minus(Range(0, stack.size() - size).map(_ => stack.pollLast()).reverse, rel, dataContext)
}
case rel: OlapValuesRel =>
logTime("values") {
ValuesPlan.values(rel)
}
case rel: OlapModelViewRel =>
logTime("modelview") {
stack.pollLast()
}
})
if (node.isInstanceOf[OlapUnionRel]) {
unionLayer = unionLayer - 1
}
}