override def visit()

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
    }
  }