Current Calcite can only deal with the case when call.rel(2) is a setop and topOp's input size is 2. See L116 in core/src/main/java/org/apache/calcite/rel/rules/UnionMergeRule.java. The test cases introduced in
CALCITE-1448 can only deal with 2 levels of unions. When we are trying to apply this rule to Hive, we found its limitation when we have multi-levels (>2) of unions. (e.g. union30.q in Hive test case). This jira is trying to extend that rule to deal with more levels.