Repository: drill
Updated Branches:
  refs/heads/master fb1d3f384 -> 45a82c457


DRILL-1169: Add Calcite's UnionToDistinctRule to DrillRuleSets to implement 
Union-Distinct


Project: http://git-wip-us.apache.org/repos/asf/drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/drill/commit/45a82c45
Tree: http://git-wip-us.apache.org/repos/asf/drill/tree/45a82c45
Diff: http://git-wip-us.apache.org/repos/asf/drill/diff/45a82c45

Branch: refs/heads/master
Commit: 45a82c4577b0c582202e02f5401a559b669dc992
Parents: fb1d3f3
Author: Hsuan-Yi Chu <[email protected]>
Authored: Wed Jun 3 16:55:42 2015 -0700
Committer: Jinfeng Ni <[email protected]>
Committed: Fri Jun 12 14:19:03 2015 -0700

----------------------------------------------------------------------
 .../exec/planner/logical/DrillRuleSets.java     |   8 +-
 .../exec/planner/logical/DrillUnionAllRule.java |  67 ++
 .../exec/planner/logical/DrillUnionRel.java     |   2 +
 .../exec/planner/logical/DrillUnionRule.java    |  61 --
 .../sql/parser/UnsupportedOperatorsVisitor.java |  11 -
 .../apache/drill/TestDisabledFunctionality.java |  18 -
 .../org/apache/drill/TestUnionDistinct.java     | 683 +++++++++++++++++++
 .../TestUnionDistinctQueries/q1.tsv             |   5 +
 .../TestUnionDistinctQueries/q10.tsv            |  30 +
 .../TestUnionDistinctQueries/q11.tsv            |  30 +
 .../TestUnionDistinctQueries/q12.tsv            |  30 +
 .../TestUnionDistinctQueries/q13.tsv            |  20 +
 .../TestUnionDistinctQueries/q14.tsv            |  30 +
 .../TestUnionDistinctQueries/q15.tsv            |   8 +
 .../TestUnionDistinctQueries/q16.tsv            |   3 +
 .../TestUnionDistinctQueries/q17.tsv            |   5 +
 .../TestUnionDistinctQueries/q18_1.tsv          |   4 +
 .../TestUnionDistinctQueries/q18_2.tsv          |  13 +
 .../TestUnionDistinctQueries/q18_3.tsv          |  13 +
 .../TestUnionDistinctQueries/q2.tsv             |   4 +
 .../TestUnionDistinctQueries/q3.tsv             |   5 +
 .../TestUnionDistinctQueries/q4.tsv             |  25 +
 .../TestUnionDistinctQueries/q5.tsv             |   5 +
 .../TestUnionDistinctQueries/q6.tsv             |   6 +
 .../TestUnionDistinctQueries/q6_1.tsv           |  25 +
 .../TestUnionDistinctQueries/q7.tsv             |   2 +
 .../TestUnionDistinctQueries/q8.tsv             |  30 +
 .../TestUnionDistinctQueries/q9.tsv             |  20 +
 ...testAggregationOnUnionDistinctOperator_1.tsv |   4 +
 ...testAggregationOnUnionDistinctOperator_2.tsv |   4 +
 ...jectDownOverUnionDistinctImplicitCasting.tsv |  10 +
 ...tProjectFiltertPushDownOverUnionDistinct.tsv |   6 +
 ...jectPushDownOverUnionDistinctWithProject.tsv |  30 +
 ...tPushDownOverUnionDistinctWithoutProject.tsv |  30 +
 ...tPushDownProjectColumnReorderingAndAlias.tsv |  30 +
 ...tWithExpressionPushDownOverUnionDistinct.tsv |  30 +
 36 files changed, 1214 insertions(+), 93 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillRuleSets.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillRuleSets.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillRuleSets.java
index 655ad92..d9b1354 100644
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillRuleSets.java
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillRuleSets.java
@@ -28,6 +28,7 @@ import org.apache.calcite.rel.rules.JoinPushThroughJoinRule;
 import org.apache.calcite.rel.rules.ProjectRemoveRule;
 import org.apache.calcite.rel.rules.ReduceExpressionsRule;
 import org.apache.calcite.rel.rules.SortRemoveRule;
+import org.apache.calcite.rel.rules.UnionToDistinctRule;
 import org.apache.calcite.tools.RuleSet;
 
 import org.apache.calcite.rel.rules.FilterMergeRule;
@@ -121,6 +122,9 @@ public class DrillRuleSets {
     if (DRILL_BASIC_RULES == null) {
 
       DRILL_BASIC_RULES = new DrillRuleSet(ImmutableSet.<RelOptRule> 
builder().add( //
+      // Add support for Distinct Union (by using Union-All followed by 
Distinct)
+      UnionToDistinctRule.INSTANCE,
+
       // Add support for WHERE style joins.
       DrillFilterJoinRules.DRILL_FILTER_ON_JOIN,
       DrillFilterJoinRules.DRILL_JOIN,
@@ -165,7 +169,7 @@ public class DrillRuleSets {
       DrillLimitRule.INSTANCE,
       DrillSortRule.INSTANCE,
       DrillJoinRule.INSTANCE,
-      DrillUnionRule.INSTANCE,
+      DrillUnionAllRule.INSTANCE,
       DrillValuesRule.INSTANCE
       )
       .build());
@@ -208,8 +212,6 @@ public class DrillRuleSets {
     ruleList.add(UnionAllPrule.INSTANCE);
     ruleList.add(ValuesPrule.INSTANCE);
 
-    // ruleList.add(UnionDistinctPrule.INSTANCE);
-
     if (ps.isHashAggEnabled()) {
       ruleList.add(HashAggPrule.INSTANCE);
     }

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillUnionAllRule.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillUnionAllRule.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillUnionAllRule.java
new file mode 100644
index 0000000..10c0118
--- /dev/null
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillUnionAllRule.java
@@ -0,0 +1,67 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.drill.exec.planner.logical;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Logger;
+
+import org.apache.drill.exec.planner.common.DrillUnionRelBase;
+import org.apache.calcite.rel.InvalidRelException;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.logical.LogicalUnion;
+import org.apache.calcite.plan.Convention;
+import org.apache.calcite.plan.RelOptRule;
+import org.apache.calcite.plan.RelOptRuleCall;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.util.trace.CalciteTrace;
+
+/**
+ * Rule that converts a {@link LogicalUnion} to a {@link DrillUnionRelBase}, 
implemented by a "union" operation.
+ */
+public class DrillUnionAllRule extends RelOptRule {
+  public static final RelOptRule INSTANCE = new DrillUnionAllRule();
+  protected static final Logger tracer = CalciteTrace.getPlannerTracer();
+
+  private DrillUnionAllRule() {
+    super(RelOptHelper.any(LogicalUnion.class, Convention.NONE), 
"DrillUnionRule");
+  }
+
+  @Override
+  public void onMatch(RelOptRuleCall call) {
+    final LogicalUnion union = (LogicalUnion) call.rel(0);
+
+    // This rule applies to Union-All only
+    if(!union.all) {
+      return;
+    }
+
+    final RelTraitSet traits = 
union.getTraitSet().plus(DrillRel.DRILL_LOGICAL);
+    final List<RelNode> convertedInputs = new ArrayList<>();
+    for (RelNode input : union.getInputs()) {
+      final RelNode convertedInput = convert(input, 
input.getTraitSet().plus(DrillRel.DRILL_LOGICAL));
+      convertedInputs.add(convertedInput);
+    }
+    try {
+      call.transformTo(new DrillUnionRel(union.getCluster(), traits, 
convertedInputs, union.all,
+          true /* check compatibility */));
+    } catch (InvalidRelException e) {
+      tracer.warning(e.toString()) ;
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillUnionRel.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillUnionRel.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillUnionRel.java
index 566c558..905b3df 100644
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillUnionRel.java
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillUnionRel.java
@@ -24,6 +24,8 @@ import org.apache.calcite.linq4j.Ord;
 import org.apache.drill.common.logical.data.LogicalOperator;
 import org.apache.drill.common.logical.data.Union;
 import org.apache.drill.exec.planner.common.DrillUnionRelBase;
+import org.apache.drill.exec.planner.cost.DrillCostBase;
+import org.apache.drill.exec.planner.cost.DrillRelOptCostFactory;
 import org.apache.drill.exec.planner.torel.ConversionContext;
 import org.apache.calcite.rel.InvalidRelException;
 import org.apache.calcite.rel.RelNode;

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillUnionRule.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillUnionRule.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillUnionRule.java
deleted file mode 100644
index e0f9e2d..0000000
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillUnionRule.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.drill.exec.planner.logical;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.logging.Logger;
-
-import org.apache.drill.exec.planner.common.DrillUnionRelBase;
-import org.apache.calcite.rel.InvalidRelException;
-import org.apache.calcite.rel.RelNode;
-import org.apache.calcite.rel.logical.LogicalUnion;
-import org.apache.calcite.plan.Convention;
-import org.apache.calcite.plan.RelOptRule;
-import org.apache.calcite.plan.RelOptRuleCall;
-import org.apache.calcite.plan.RelTraitSet;
-import org.apache.calcite.util.trace.CalciteTrace;
-
-/**
- * Rule that converts a {@link LogicalUnion} to a {@link DrillUnionRelBase}, 
implemented by a "union" operation.
- */
-public class DrillUnionRule extends RelOptRule {
-  public static final RelOptRule INSTANCE = new DrillUnionRule();
-  protected static final Logger tracer = CalciteTrace.getPlannerTracer();
-
-  private DrillUnionRule() {
-    super(RelOptHelper.any(LogicalUnion.class, Convention.NONE), 
"DrillUnionRule");
-  }
-
-  @Override
-  public void onMatch(RelOptRuleCall call) {
-    final LogicalUnion union = (LogicalUnion) call.rel(0);
-    final RelTraitSet traits = 
union.getTraitSet().plus(DrillRel.DRILL_LOGICAL);
-    final List<RelNode> convertedInputs = new ArrayList<>();
-    for (RelNode input : union.getInputs()) {
-      final RelNode convertedInput = convert(input, 
input.getTraitSet().plus(DrillRel.DRILL_LOGICAL));
-      convertedInputs.add(convertedInput);
-    }
-    try {
-      call.transformTo(new DrillUnionRel(union.getCluster(), traits, 
convertedInputs, union.all,
-          true /* check compatibility */));
-    } catch (InvalidRelException e) {
-      tracer.warning(e.toString()) ;
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/UnsupportedOperatorsVisitor.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/UnsupportedOperatorsVisitor.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/UnsupportedOperatorsVisitor.java
index b92de3b..f3c54cc 100644
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/UnsupportedOperatorsVisitor.java
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/UnsupportedOperatorsVisitor.java
@@ -138,17 +138,6 @@ public class UnsupportedOperatorsVisitor extends 
SqlShuttle {
       throw new UnsupportedOperationException();
     }
 
-    // Disable unsupported Union
-    if(sqlCall.getKind() == SqlKind.UNION) {
-      SqlSetOperator op = (SqlSetOperator) sqlCall.getOperator();
-      if(!op.isAll()) {
-        
unsupportedOperatorCollector.setException(SqlUnsupportedException.ExceptionType.RELATIONAL,
-            sqlCall.getOperator().getName() + " is not supported\n" +
-            "See Apache Drill JIRA: DRILL-1921");
-        throw new UnsupportedOperationException();
-      }
-    }
-
     // Disable unsupported JOINs
     if(sqlCall.getKind() == SqlKind.JOIN) {
       SqlJoin join = (SqlJoin) sqlCall;

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/test/java/org/apache/drill/TestDisabledFunctionality.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/java/org/apache/drill/TestDisabledFunctionality.java 
b/exec/java-exec/src/test/java/org/apache/drill/TestDisabledFunctionality.java
index 5d8cd95..f53cc0f 100644
--- 
a/exec/java-exec/src/test/java/org/apache/drill/TestDisabledFunctionality.java
+++ 
b/exec/java-exec/src/test/java/org/apache/drill/TestDisabledFunctionality.java
@@ -77,24 +77,6 @@ public class TestDisabledFunctionality extends BaseTestQuery{
     }
   }
 
-  @Test(expected = UnsupportedRelOperatorException.class)  // see DRILL-1921
-  public void testDisabledUnion() throws Exception {
-    try {
-      test("(select n_name as name from cp.`tpch/nation.parquet`) UNION 
(select r_name as name from cp.`tpch/region.parquet`)");
-    } catch(UserException ex) {
-      throwAsUnsupportedException(ex);
-    }
-  }
-
-  @Test(expected = UnsupportedRelOperatorException.class) // see DRILL-1921
-  public void testDisabledUnionDistinct() throws Exception {
-    try {
-      test("(select n_name as name from cp.`tpch/nation.parquet`) UNION 
DISTINCT (select r_name as name from cp.`tpch/region.parquet`)");
-    } catch(UserException ex) {
-      throwAsUnsupportedException(ex);
-    }
-  }
-
   @Test(expected = UnsupportedRelOperatorException.class) // see DRILL-1921
   public void testDisabledIntersect() throws Exception {
     try {

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/test/java/org/apache/drill/TestUnionDistinct.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/java/org/apache/drill/TestUnionDistinct.java 
b/exec/java-exec/src/test/java/org/apache/drill/TestUnionDistinct.java
new file mode 100644
index 0000000..8f85b4d
--- /dev/null
+++ b/exec/java-exec/src/test/java/org/apache/drill/TestUnionDistinct.java
@@ -0,0 +1,683 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.drill;
+
+import org.apache.drill.common.exceptions.UserException;
+import org.apache.drill.common.types.TypeProtos;
+import org.apache.drill.common.util.FileUtils;
+import org.apache.drill.exec.work.foreman.SqlUnsupportedException;
+import org.apache.drill.exec.work.foreman.UnsupportedRelOperatorException;
+import org.junit.Test;
+
+public class TestUnionDistinct extends BaseTestQuery {
+  private static final org.slf4j.Logger logger = 
org.slf4j.LoggerFactory.getLogger(TestUnionDistinct.class);
+
+  @Test  // Simple Unionover two scans
+  public void testUnionDistinct1() throws Exception {
+    String query = "(select n_regionkey from cp.`tpch/nation.parquet`) union 
(select r_regionkey from cp.`tpch/region.parquet`)";
+
+    testBuilder()
+        .sqlQuery(query)
+        .unOrdered()
+        .csvBaselineFile("testframework/testUnionDistinctQueries/q1.tsv")
+        .baselineTypes(TypeProtos.MinorType.INT)
+        .baselineColumns("n_regionkey")
+        .build()
+        .run();
+  }
+
+  @Test  // Union over inner joins
+  public void testUnionDistinct2() throws Exception {
+    String query = "select n1.n_nationkey from cp.`tpch/nation.parquet` n1 
inner join cp.`tpch/region.parquet` r1 on n1.n_regionkey = r1.r_regionkey where 
n1.n_nationkey in (1, 2) \n" +
+        "union \n" +
+        "select n2.n_nationkey from cp.`tpch/nation.parquet` n2 inner join 
cp.`tpch/region.parquet` r2 on n2.n_regionkey = r2.r_regionkey where 
n2.n_nationkey in (1, 2, 3, 4)";
+
+    testBuilder()
+        .sqlQuery(query)
+        .unOrdered()
+        .csvBaselineFile("testframework/testUnionDistinctQueries/q2.tsv")
+        .baselineTypes(TypeProtos.MinorType.INT)
+        .baselineColumns("n_nationkey")
+        .build()
+        .run();
+  }
+
+  @Test  // Union over grouped aggregates
+  public void testUnionDistinct3() throws Exception {
+    String query = "select n1.n_nationkey from cp.`tpch/nation.parquet` n1 
where n1.n_nationkey in (1, 2) group by n1.n_nationkey \n" +
+        "union \n" +
+        "select r1.r_regionkey from cp.`tpch/region.parquet` r1 group by 
r1.r_regionkey";
+
+    testBuilder()
+        .sqlQuery(query)
+        .unOrdered()
+        .csvBaselineFile("testframework/testUnionDistinctQueries/q3.tsv")
+        .baselineTypes(TypeProtos.MinorType.INT)
+        .baselineColumns("n_nationkey")
+        .build()
+        .run();
+  }
+
+  @Test    // Chain of Unions
+  public void testUnionDistinct4() throws Exception {
+    String query = "select n_regionkey from cp.`tpch/nation.parquet` \n" +
+            "union select r_regionkey from cp.`tpch/region.parquet` \n" +
+            "union select n_nationkey from cp.`tpch/nation.parquet` \n" +
+            "union select c_custkey from cp.`tpch/customer.parquet` where 
c_custkey < 5";
+
+    testBuilder()
+        .sqlQuery(query)
+        .unOrdered()
+        .csvBaselineFile("testframework/testUnionDistinctQueries/q4.tsv")
+        .baselineTypes(TypeProtos.MinorType.INT)
+        .baselineColumns("n_regionkey")
+        .build()
+        .run();
+  }
+
+  @Test  // Union of all columns in the table
+  public void testUnionDistinct5() throws Exception {
+    String query = "select r_name, r_comment, r_regionkey from 
cp.`tpch/region.parquet` r1 \n" +
+        "union \n" +
+        "select r_name, r_comment, r_regionkey from cp.`tpch/region.parquet` 
r2";
+
+    testBuilder()
+        .sqlQuery(query)
+        .unOrdered()
+        .csvBaselineFile("testframework/testUnionDistinctQueries/q5.tsv")
+        .baselineTypes(TypeProtos.MinorType.VARCHAR, 
TypeProtos.MinorType.VARCHAR, TypeProtos.MinorType.INT)
+        .baselineColumns("r_name", "r_comment", "r_regionkey")
+        .build()
+        .run();
+  }
+
+  @Test // Union-Distinct where same column is projected twice in right child
+  public void testUnionDistinct6() throws Exception {
+    String query = "select n_nationkey, n_regionkey from 
cp.`tpch/nation.parquet` where n_regionkey = 1 \n" +
+        "union \n" +
+        "select r_regionkey, r_regionkey from cp.`tpch/region.parquet` where 
r_regionkey = 2";
+
+    testBuilder()
+        .sqlQuery(query)
+        .unOrdered()
+        .csvBaselineFile("testframework/testUnionDistinctQueries/q6.tsv")
+        .baselineTypes(TypeProtos.MinorType.INT, TypeProtos.MinorType.INT)
+        .baselineColumns("n_nationkey", "n_regionkey")
+        .build()
+        .run();
+  }
+
+  @Test // Union-Distinct where same column is projected twice in left and 
right child
+  public void testUnionDistinct6_1() throws Exception {
+    String query = "select n_nationkey, n_nationkey from 
cp.`tpch/nation.parquet` union \n" +
+        "select r_regionkey, r_regionkey from cp.`tpch/region.parquet`";
+
+    testBuilder()
+        .sqlQuery(query)
+        .unOrdered()
+        .csvBaselineFile("testframework/testUnionDistinctQueries/q6_1.tsv")
+        .baselineTypes(TypeProtos.MinorType.INT, TypeProtos.MinorType.INT)
+        .baselineColumns("n_nationkey", "n_nationkey0")
+        .build()
+        .run();
+  }
+
+  @Test  // Union-Distinct of two string literals of different lengths
+  public void testUnionDistinct7() throws Exception {
+    String query = "select 'abc' as col from cp.`tpch/region.parquet` union 
\n" +
+        "select 'abcdefgh' from cp.`tpch/region.parquet`";
+
+    testBuilder()
+        .sqlQuery(query)
+        .unOrdered()
+        .csvBaselineFile("testframework/testUnionDistinctQueries/q7.tsv")
+        .baselineTypes(TypeProtos.MinorType.VARCHAR)
+        .baselineColumns("col")
+        .build()
+        .run();
+  }
+
+  @Test  // Union-Distinct of two character columns of different lengths
+  public void testUnionDistinct8() throws Exception {
+    String query = "select n_name, n_nationkey from cp.`tpch/nation.parquet` 
union \n" +
+        "select r_comment, r_regionkey  from cp.`tpch/region.parquet`";
+
+    testBuilder()
+        .sqlQuery(query)
+        .unOrdered()
+        .csvBaselineFile("testframework/testUnionDistinctQueries/q8.tsv")
+        .baselineTypes(TypeProtos.MinorType.VARCHAR, TypeProtos.MinorType.INT)
+        .baselineColumns("n_name", "n_nationkey")
+        .build()
+        .run();
+  }
+
+  @Test // Union-Distinct of * column from JSON files in different directories
+  public void testUnionDistinct9() throws Exception {
+    String file0 = 
FileUtils.getResourceAsFile("/multilevel/json/1994/Q1/orders_94_q1.json").toURI().toString();
+    String file1 = 
FileUtils.getResourceAsFile("/multilevel/json/1995/Q1/orders_95_q1.json").toURI().toString();
+    String query = String.format("select o_custkey, o_orderstatus, 
o_totalprice, o_orderdate, o_orderpriority, o_clerk, o_shippriority, o_comment, 
o_orderkey from dfs_test.`%s` union \n" +
+            "select o_custkey, o_orderstatus, o_totalprice, o_orderdate, 
o_orderpriority, o_clerk, o_shippriority, o_comment, o_orderkey from 
dfs_test.`%s`", file0, file1);
+
+    testBuilder()
+        .sqlQuery(query)
+        .unOrdered()
+        .csvBaselineFile("testframework/testUnionDistinctQueries/q9.tsv")
+        .baselineTypes(TypeProtos.MinorType.BIGINT, 
TypeProtos.MinorType.VARCHAR, TypeProtos.MinorType.FLOAT8, 
TypeProtos.MinorType.VARCHAR,
+            TypeProtos.MinorType.VARCHAR, TypeProtos.MinorType.VARCHAR, 
TypeProtos.MinorType.BIGINT,TypeProtos.MinorType.VARCHAR, 
TypeProtos.MinorType.BIGINT)
+        .baselineColumns("o_custkey", "o_orderstatus", "o_totalprice", 
"o_orderdate",
+            "o_orderpriority", "o_clerk", "o_shippriority", "o_comment", 
"o_orderkey")
+        .build()
+        .run();
+  }
+
+  @Test // Union-Distinct constant literals
+  public void testUnionDistinct10() throws Exception {
+    String query = "(select n_name, 'LEFT' as LiteralConstant, n_nationkey, 
'1' as NumberConstant from cp.`tpch/nation.parquet`) \n" +
+        "union \n" +
+        "(select 'RIGHT', r_name, '2', r_regionkey from 
cp.`tpch/region.parquet`)";
+
+    testBuilder()
+        .sqlQuery(query)
+        .unOrdered()
+        .csvBaselineFile("testframework/testUnionDistinctQueries/q10.tsv")
+        .baselineTypes(TypeProtos.MinorType.VARCHAR, 
TypeProtos.MinorType.VARCHAR, TypeProtos.MinorType.INT, 
TypeProtos.MinorType.INT)
+        .baselineColumns("n_name", "LiteralConstant", "n_nationkey", 
"NumberConstant")
+        .build()
+        .run();
+  }
+
+  @Test
+  public void testUnionDistinctViewExpandableStar() throws Exception {
+    test("use dfs_test.tmp");
+    test("create view nation_view_testunion as select n_name, n_nationkey from 
cp.`tpch/nation.parquet`;");
+    test("create view region_view_testunion as select r_name, r_regionkey from 
cp.`tpch/region.parquet`;");
+
+    String query1 = "(select * from dfs_test.tmp.`nation_view_testunion`) \n" +
+        "union \n" +
+        "(select * from dfs_test.tmp.`region_view_testunion`)";
+
+    String query2 =  "(select r_name, r_regionkey from 
cp.`tpch/region.parquet`)  \n" +
+        "union \n" +
+        "(select * from dfs_test.tmp.`nation_view_testunion`)";
+
+    try {
+      testBuilder()
+          .sqlQuery(query1)
+          .unOrdered()
+          .csvBaselineFile("testframework/testUnionDistinctQueries/q11.tsv")
+          .baselineTypes(TypeProtos.MinorType.VARCHAR, 
TypeProtos.MinorType.INT)
+          .baselineColumns("n_name", "n_nationkey")
+          .build()
+          .run();
+
+      testBuilder()
+          .sqlQuery(query2)
+          .unOrdered()
+          .csvBaselineFile("testframework/testUnionDistinctQueries/q12.tsv")
+          .baselineTypes(TypeProtos.MinorType.VARCHAR, 
TypeProtos.MinorType.INT)
+          .baselineColumns("r_name", "r_regionkey")
+          .build()
+          .run();
+    } finally {
+      test("drop view nation_view_testunion");
+      test("drop view region_view_testunion");
+    }
+  }
+
+  @Test(expected = UnsupportedRelOperatorException.class)
+  public void testUnionDistinctViewUnExpandableStar() throws Exception {
+    test("use dfs_test.tmp");
+    test("create view nation_view_testunion as select * from 
cp.`tpch/nation.parquet`;");
+
+    try {
+      String query = "(select * from dfs_test.tmp.`nation_view_testunion`) \n" 
+
+          "union (select * from cp.`tpch/region.parquet`)";
+      test(query);
+    } catch(UserException ex) {
+      
SqlUnsupportedException.errorClassNameToException(ex.getOrCreatePBError(false).getException().getExceptionClass());
+      throw ex;
+    } finally {
+      test("drop view nation_view_testunion");
+    }
+  }
+
+  @Test
+  public void testDiffDataTypesAndModes() throws Exception {
+    test("use dfs_test.tmp");
+    test("create view nation_view_testunion as select n_name, n_nationkey from 
cp.`tpch/nation.parquet`;");
+    test("create view region_view_testunion as select r_name, r_regionkey from 
cp.`tpch/region.parquet`;");
+
+    String t1 = "(select n_comment, n_regionkey from cp.`tpch/nation.parquet` 
limit 5)";
+    String t2 = "(select * from nation_view_testunion  limit 5)";
+    String t3 = "(select full_name, store_id from cp.`employee.json` limit 5)";
+    String t4 = "(select * from region_view_testunion limit 5)";
+
+    String query1 = t1 + " union " + t2 + " union " + t3 + " union " + t4;
+
+    try {
+      testBuilder()
+          .sqlQuery(query1)
+          .unOrdered()
+          .csvBaselineFile("testframework/testUnionDistinctQueries/q13.tsv")
+          .baselineTypes(TypeProtos.MinorType.VARCHAR, 
TypeProtos.MinorType.BIGINT)
+          .baselineColumns("n_comment", "n_regionkey")
+          .build()
+          .run();
+    } finally {
+      test("drop view nation_view_testunion");
+      test("drop view region_view_testunion");
+    }
+  }
+
+  @Test
+  public void testDistinctOverUnionDistinctwithFullyQualifiedColumnNames() 
throws Exception {
+    String query = "select distinct sq.x1, sq.x2 \n" +
+        "from \n" +
+        "((select n_regionkey as a1, n_name as b1 from 
cp.`tpch/nation.parquet`) \n" +
+        "union \n" +
+        "(select r_regionkey as a2, r_name as b2 from 
cp.`tpch/region.parquet`)) as sq(x1,x2)";
+
+    testBuilder()
+        .sqlQuery(query)
+        .unOrdered()
+        .csvBaselineFile("testframework/testUnionDistinctQueries/q14.tsv")
+        .baselineTypes(TypeProtos.MinorType.INT, TypeProtos.MinorType.VARCHAR)
+        .baselineColumns("x1", "x2")
+        .build()
+        .run();
+  }
+
+  @Test
+  public void testUnionDistinctContainsColumnANumericConstant() throws 
Exception {
+    String query = "(select n_nationkey, n_regionkey, n_name from 
cp.`tpch/nation.parquet`  limit 5) \n" +
+        "union \n" +
+        "(select 1, n_regionkey, 'abc' from cp.`tpch/nation.parquet` limit 5)";
+
+    testBuilder()
+        .sqlQuery(query)
+        .unOrdered()
+        .csvBaselineFile("testframework/testUnionDistinctQueries/q15.tsv")
+        .baselineTypes(TypeProtos.MinorType.INT, TypeProtos.MinorType.INT, 
TypeProtos.MinorType.VARCHAR)
+        .baselineColumns("n_nationkey", "n_regionkey", "n_name")
+        .build().run();
+  }
+
+  @Test
+  public void testUnionDistinctEmptySides() throws Exception {
+    String query1 = "(select n_nationkey, n_regionkey, n_name from 
cp.`tpch/nation.parquet`  limit 0) \n" +
+        "union \n" +
+        "(select 1, n_regionkey, 'abc' from cp.`tpch/nation.parquet` limit 5)";
+
+    String query2 = "(select n_nationkey, n_regionkey, n_name from 
cp.`tpch/nation.parquet`  limit 5) \n" +
+        "union \n" +
+        "(select 1, n_regionkey, 'abc' from cp.`tpch/nation.parquet` limit 0)";
+
+    testBuilder()
+        .sqlQuery(query1)
+        .unOrdered()
+        .csvBaselineFile("testframework/testUnionDistinctQueries/q16.tsv")
+        .baselineTypes(TypeProtos.MinorType.INT, TypeProtos.MinorType.INT, 
TypeProtos.MinorType.VARCHAR)
+        .baselineColumns("n_nationkey", "n_regionkey", "n_name")
+        .build()
+        .run();
+
+    testBuilder()
+        .sqlQuery(query2)
+        .unOrdered()
+        .csvBaselineFile("testframework/testUnionDistinctQueries/q17.tsv")
+        .baselineTypes(TypeProtos.MinorType.INT, TypeProtos.MinorType.INT, 
TypeProtos.MinorType.VARCHAR)
+        .baselineColumns("n_nationkey", "n_regionkey", "n_name")
+        .build()
+        .run();
+  }
+
+  @Test
+  public void testAggregationOnUnionDistinctOperator() throws Exception {
+    String root = 
FileUtils.getResourceAsFile("/store/text/data/t.json").toURI().toString();
+    String query1 = String.format(
+        "(select calc1, max(b1) as `max`, min(b1) as `min`, count(c1) as 
`count` \n" +
+        "from (select a1 + 10 as calc1, b1, c1 from dfs_test.`%s` \n" +
+        "union \n" +
+        "select a1 + 100 as diff1, b1 as diff2, c1 as diff3 from 
dfs_test.`%s`) \n" +
+        "group by calc1 order by calc1)", root, root);
+
+    String query2 = String.format(
+        "(select calc1, min(b1) as `min`, max(b1) as `max`, count(c1) as 
`count` \n" +
+        "from (select a1 + 10 as calc1, b1, c1 from dfs_test.`%s` \n" +
+        "union \n" +
+        "select a1 + 100 as diff1, b1 as diff2, c1 as diff3 from 
dfs_test.`%s`) \n" +
+        "group by calc1 order by calc1)", root, root);
+
+    testBuilder()
+        .sqlQuery(query1)
+        .unOrdered()
+        
.csvBaselineFile("testframework/testUnionDistinctQueries/testAggregationOnUnionDistinctOperator_1.tsv")
+        .baselineTypes(TypeProtos.MinorType.BIGINT, 
TypeProtos.MinorType.BIGINT, TypeProtos.MinorType.BIGINT, 
TypeProtos.MinorType.BIGINT)
+        .baselineColumns("calc1", "max", "min", "count")
+        .build()
+        .run();
+
+    testBuilder()
+        .sqlQuery(query2)
+        .unOrdered()
+        
.csvBaselineFile("testframework/testUnionDistinctQueries/testAggregationOnUnionDistinctOperator_2.tsv")
+        .baselineTypes(TypeProtos.MinorType.BIGINT, 
TypeProtos.MinorType.BIGINT, TypeProtos.MinorType.BIGINT, 
TypeProtos.MinorType.BIGINT)
+        .baselineColumns("calc1", "min", "max", "count")
+        .build()
+        .run();
+  }
+
+  @Test(expected = UserException.class)
+  public void testUnionDistinctImplicitCastingFailure() throws Exception {
+    String rootInt = 
FileUtils.getResourceAsFile("/store/json/intData.json").toURI().toString();
+    String rootBoolean = 
FileUtils.getResourceAsFile("/store/json/booleanData.json").toURI().toString();
+
+    String query = String.format(
+        "(select key from dfs_test.`%s` \n" +
+        "union \n" +
+        "select key from dfs_test.`%s` )", rootInt, rootBoolean);
+
+    test(query);
+  }
+
+  @Test
+  public void testDateAndTimestampJson() throws Exception {
+    String rootDate = 
FileUtils.getResourceAsFile("/store/json/dateData.json").toURI().toString();
+    String rootTimpStmp = 
FileUtils.getResourceAsFile("/store/json/timeStmpData.json").toURI().toString();
+
+    String query1 = String.format(
+        "(select max(key) as key from dfs_test.`%s` \n" +
+        "union \n" +
+        "select key from dfs_test.`%s`)", rootDate, rootTimpStmp);
+
+    String query2 = String.format(
+        "select key from dfs_test.`%s` \n" +
+        "union \n" +
+        "select max(key) as key from dfs_test.`%s`", rootDate, rootTimpStmp);
+
+    String query3 = String.format(
+        "select key from dfs_test.`%s` \n" +
+        "union \n" +
+        "select max(key) as key from dfs_test.`%s`", rootDate, rootTimpStmp);
+
+    testBuilder()
+        .sqlQuery(query1)
+        .unOrdered()
+        .csvBaselineFile("testframework/testUnionDistinctQueries/q18_1.tsv")
+        .baselineTypes(TypeProtos.MinorType.VARCHAR)
+        .baselineColumns("key")
+        .build()
+        .run();
+
+    testBuilder()
+        .sqlQuery(query2)
+        .unOrdered()
+        .csvBaselineFile("testframework/testUnionDistinctQueries/q18_2.tsv")
+        .baselineTypes(TypeProtos.MinorType.VARCHAR)
+        .baselineColumns("key")
+        .build()
+        .run();
+
+    testBuilder()
+        .sqlQuery(query3)
+        .unOrdered()
+        .csvBaselineFile("testframework/testUnionDistinctQueries/q18_3.tsv")
+        .baselineTypes(TypeProtos.MinorType.VARCHAR)
+        .baselineColumns("key")
+        .build()
+        .run();
+  }
+
+  @Test
+  public void testUnionDistinctOneInputContainsAggFunction() throws Exception {
+    String root = 
FileUtils.getResourceAsFile("/multilevel/csv/1994/Q1/orders_94_q1.csv").toURI().toString();
+    String query1 = String.format("select * from ((select count(c1) as ct from 
(select columns[0] c1 from dfs.`%s`)) \n" +
+        "union \n" +
+        "(select columns[0] c2 from dfs.`%s`)) order by ct limit 3", root, 
root);
+
+    String query2 = String.format("select * from ((select columns[0] ct from 
dfs.`%s`) \n" +
+        "union \n" +
+        "(select count(c1) as c2 from (select columns[0] c1 from dfs.`%s`))) 
order by ct limit 3", root, root);
+
+    String query3 = String.format("select * from ((select count(c1) as ct from 
(select columns[0] c1 from dfs.`%s`) )\n" +
+        "union \n" +
+        "(select count(c1) as c2 from (select columns[0] c1 from dfs.`%s`))) 
order by ct", root, root);
+
+    testBuilder()
+        .sqlQuery(query1)
+        .unOrdered()
+        .baselineColumns("ct")
+        .baselineValues((long) 10)
+        .baselineValues((long) 66)
+        .baselineValues((long) 99)
+        .build()
+        .run();
+
+    testBuilder()
+        .sqlQuery(query2)
+        .unOrdered()
+        .baselineColumns("ct")
+        .baselineValues((long) 10)
+        .baselineValues((long) 66)
+        .baselineValues((long) 99)
+        .build()
+        .run();
+
+    testBuilder()
+        .sqlQuery(query3)
+        .unOrdered()
+        .baselineColumns("ct")
+        .baselineValues((long) 10)
+        .build()
+        .run();
+  }
+
+  @Test
+  public void testUnionDistinctDiffTypesAtPlanning() throws Exception {
+    String query = "select count(c1) as ct from (select cast(r_regionkey as 
int) c1 from cp.`tpch/region.parquet`) \n" +
+        "union \n" +
+        "(select cast(r_regionkey as int) c2 from cp.`tpch/region.parquet`)";
+    testBuilder()
+        .sqlQuery(query)
+        .unOrdered()
+        .baselineColumns("ct")
+        .baselineValues((long) 5)
+        .baselineValues((long) 0)
+        .baselineValues((long) 1)
+        .baselineValues((long) 2)
+        .baselineValues((long) 3)
+        .baselineValues((long) 4)
+        .build()
+        .run();
+  }
+
+  @Test
+  public void testUnionDistinctRightEmptyJson() throws Exception {
+    String rootEmpty = 
FileUtils.getResourceAsFile("/project/pushdown/empty.json").toURI().toString();
+    String rootSimple = 
FileUtils.getResourceAsFile("/store/json/booleanData.json").toURI().toString();
+
+    String queryRightEmpty = String.format(
+        "select key from dfs_test.`%s` \n" +
+        "union \n" +
+        "select key from dfs_test.`%s`", rootSimple, rootEmpty);
+
+    testBuilder()
+        .sqlQuery(queryRightEmpty)
+        .unOrdered()
+        .baselineColumns("key")
+        .baselineValues(true)
+        .baselineValues(false)
+        .build()
+        .run();
+  }
+
+  @Test
+  public void testFilterPushDownOverUnionDistinct() throws Exception {
+    String query = "select n_regionkey from \n"
+        + "(select n_regionkey from cp.`tpch/nation.parquet` union select 
r_regionkey from cp.`tpch/region.parquet`) \n"
+        + "where n_regionkey > 0 and n_regionkey < 2 \n"
+        + "order by n_regionkey";
+
+    testBuilder()
+        .sqlQuery(query)
+        .ordered()
+        .baselineColumns("n_regionkey")
+        .baselineValues(1)
+        .build()
+        .run();
+  }
+
+  @Test
+  public void testInListPushDownOverUnionDistinct() throws Exception {
+    String query = "select n_nationkey \n" +
+        "from (select n1.n_nationkey from cp.`tpch/nation.parquet` n1 inner 
join cp.`tpch/region.parquet` r1 on n1.n_regionkey = r1.r_regionkey \n" +
+        "union \n" +
+        "select n2.n_nationkey from cp.`tpch/nation.parquet` n2 inner join 
cp.`tpch/region.parquet` r2 on n2.n_regionkey = r2.r_regionkey) \n" +
+        "where n_nationkey in (1, 2)";
+
+    testBuilder()
+        .sqlQuery(query)
+        .unOrdered()
+        .baselineColumns("n_nationkey")
+        .baselineValues(1)
+        .baselineValues(2)
+        .build()
+        .run();
+  }
+
+  @Test
+  public void testFilterPushDownOverUnionDistinctCSV() throws Exception {
+    String root = 
FileUtils.getResourceAsFile("/multilevel/csv/1994/Q1/orders_94_q1.csv").toURI().toString();
+    String query = String.format("select ct \n" +
+        "from ((select count(c1) as ct from (select columns[0] c1 from 
dfs.`%s`)) \n" +
+        "union \n" +
+        "(select columns[0] c2 from dfs.`%s`)) \n" +
+        "where ct < 100", root, root);
+
+    testBuilder()
+        .sqlQuery(query)
+        .ordered()
+        .baselineColumns("ct")
+        .baselineValues((long) 10)
+        .baselineValues((long) 66)
+        .baselineValues((long) 99)
+        .build()
+        .run();
+  }
+
+  @Test
+  public void testProjectPushDownOverUnionDistinctWithProject() throws 
Exception {
+    String query = "select n_nationkey, n_name from \n" +
+        "(select n_nationkey, n_name, n_comment from cp.`tpch/nation.parquet` 
\n" +
+        "union select r_regionkey, r_name, r_comment  from 
cp.`tpch/region.parquet`)";
+
+    testBuilder()
+        .sqlQuery(query)
+        .unOrdered()
+        
.csvBaselineFile("testframework/testUnionDistinctQueries/testProjectPushDownOverUnionDistinctWithProject.tsv")
+        .baselineTypes(TypeProtos.MinorType.INT, TypeProtos.MinorType.VARCHAR)
+        .baselineColumns("n_nationkey", "n_name")
+        .build()
+        .run();
+  }
+
+  @Test
+  public void testProjectPushDownOverUnionDistinctWithoutProject() throws 
Exception {
+    String query = "select n_nationkey from \n" +
+        "(select n_nationkey, n_name, n_comment from cp.`tpch/nation.parquet` 
\n" +
+        "union select r_regionkey, r_name, r_comment  from 
cp.`tpch/region.parquet`)";
+
+    testBuilder()
+        .sqlQuery(query)
+        .unOrdered()
+        
.csvBaselineFile("testframework/testUnionDistinctQueries/testProjectPushDownOverUnionDistinctWithoutProject.tsv")
+        .baselineTypes(TypeProtos.MinorType.INT)
+        .baselineColumns("n_nationkey")
+        .build()
+        .run();
+  }
+
+  @Test
+  public void testProjectWithExpressionPushDownOverUnionDistinct() throws 
Exception {
+    String query = "select 2 * n_nationkey as col from \n" +
+        "(select n_nationkey, n_name, n_comment from cp.`tpch/nation.parquet` 
\n" +
+        "union select r_regionkey, r_name, r_comment  from 
cp.`tpch/region.parquet`)";
+
+    // Validate the result
+    testBuilder()
+        .sqlQuery(query)
+        .unOrdered()
+        
.csvBaselineFile("testframework/testUnionDistinctQueries/testProjectWithExpressionPushDownOverUnionDistinct.tsv")
+        .baselineTypes(TypeProtos.MinorType.INT)
+        .baselineColumns("col")
+        .build()
+        .run();
+  }
+
+  @Test
+  public void testProjectDownOverUnionDistinctImplicitCasting() throws 
Exception {
+    String root = 
FileUtils.getResourceAsFile("/store/text/data/nations.csv").toURI().toString();
+    String query = String.format("select 2 * n_nationkey as col from \n" +
+        "(select n_nationkey, n_name, n_comment from cp.`tpch/nation.parquet` 
\n" +
+        "union select columns[0], columns[1], columns[2] from dfs.`%s`) \n" +
+        "order by col limit 10", root);
+
+    testBuilder()
+        .sqlQuery(query)
+        .unOrdered()
+        
.csvBaselineFile("testframework/testUnionDistinctQueries/testProjectDownOverUnionDistinctImplicitCasting.tsv")
+        .baselineTypes(TypeProtos.MinorType.INT)
+        .baselineColumns("col")
+        .build()
+        .run();
+  }
+
+  @Test
+  public void testProjectPushDownProjectColumnReorderingAndAlias() throws 
Exception {
+    String query = "select n_comment as col1, n_nationkey as col2, n_name as 
col3 from \n" +
+        "(select n_nationkey, n_name, n_comment from cp.`tpch/nation.parquet` 
\n" +
+        "union select r_regionkey, r_name, r_comment  from 
cp.`tpch/region.parquet`)";
+
+    testBuilder()
+        .sqlQuery(query)
+        .unOrdered()
+        
.csvBaselineFile("testframework/testUnionDistinctQueries/testProjectPushDownProjectColumnReorderingAndAlias.tsv")
+        .baselineTypes(TypeProtos.MinorType.VARCHAR, TypeProtos.MinorType.INT, 
TypeProtos.MinorType.VARCHAR)
+        .baselineColumns("col1", "col2", "col3")
+        .build()
+        .run();
+  }
+
+  @Test
+  public void testProjectFiltertPushDownOverUnionDistinct() throws Exception {
+    String query = "select n_nationkey from \n" +
+        "(select n_nationkey, n_name, n_comment from cp.`tpch/nation.parquet` 
\n" +
+        "union select r_regionkey, r_name, r_comment  from 
cp.`tpch/region.parquet`) \n" +
+        "where n_nationkey > 0 and n_nationkey < 4";
+
+    testBuilder()
+        .sqlQuery(query)
+        .unOrdered()
+        
.csvBaselineFile("testframework/testUnionDistinctQueries/testProjectFiltertPushDownOverUnionDistinct.tsv")
+        .baselineTypes(TypeProtos.MinorType.INT)
+        .baselineColumns("n_nationkey")
+        .build()
+        .run();
+  }
+}

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q1.tsv
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q1.tsv
 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q1.tsv
new file mode 100644
index 0000000..0254fe8
--- /dev/null
+++ 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q1.tsv
@@ -0,0 +1,5 @@
+0
+1
+4
+3
+2
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q10.tsv
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q10.tsv
 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q10.tsv
new file mode 100644
index 0000000..c883125
--- /dev/null
+++ 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q10.tsv
@@ -0,0 +1,30 @@
+ALGERIA        LEFT    0       1
+ARGENTINA      LEFT    1       1
+BRAZIL LEFT    2       1
+CANADA LEFT    3       1
+EGYPT  LEFT    4       1
+ETHIOPIA       LEFT    5       1
+FRANCE LEFT    6       1
+GERMANY        LEFT    7       1
+INDIA  LEFT    8       1
+INDONESIA      LEFT    9       1
+IRAN   LEFT    10      1
+IRAQ   LEFT    11      1
+JAPAN  LEFT    12      1
+JORDAN LEFT    13      1
+KENYA  LEFT    14      1
+MOROCCO        LEFT    15      1
+MOZAMBIQUE     LEFT    16      1
+PERU   LEFT    17      1
+CHINA  LEFT    18      1
+ROMANIA        LEFT    19      1
+SAUDI ARABIA   LEFT    20      1
+VIETNAM        LEFT    21      1
+RUSSIA LEFT    22      1
+UNITED KINGDOM LEFT    23      1
+UNITED STATES  LEFT    24      1
+RIGHT  AFRICA  2       0
+RIGHT  AMERICA 2       1
+RIGHT  ASIA    2       2
+RIGHT  EUROPE  2       3
+RIGHT  MIDDLE EAST     2       4
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q11.tsv
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q11.tsv
 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q11.tsv
new file mode 100644
index 0000000..2d5b701
--- /dev/null
+++ 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q11.tsv
@@ -0,0 +1,30 @@
+ALGERIA        0
+ARGENTINA      1
+BRAZIL 2
+CANADA 3
+EGYPT  4
+ETHIOPIA       5
+FRANCE 6
+GERMANY        7
+INDIA  8
+INDONESIA      9
+IRAN   10
+IRAQ   11
+JAPAN  12
+JORDAN 13
+KENYA  14
+MOROCCO        15
+MOZAMBIQUE     16
+PERU   17
+CHINA  18
+ROMANIA        19
+SAUDI ARABIA   20
+VIETNAM        21
+RUSSIA 22
+UNITED KINGDOM 23
+UNITED STATES  24
+AFRICA 0
+AMERICA        1
+ASIA   2
+EUROPE 3
+MIDDLE EAST    4
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q12.tsv
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q12.tsv
 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q12.tsv
new file mode 100644
index 0000000..44f9209
--- /dev/null
+++ 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q12.tsv
@@ -0,0 +1,30 @@
+AFRICA 0
+AMERICA        1
+ASIA   2
+EUROPE 3
+MIDDLE EAST    4
+ALGERIA        0
+ARGENTINA      1
+BRAZIL 2
+CANADA 3
+EGYPT  4
+ETHIOPIA       5
+FRANCE 6
+GERMANY        7
+INDIA  8
+INDONESIA      9
+IRAN   10
+IRAQ   11
+JAPAN  12
+JORDAN 13
+KENYA  14
+MOROCCO        15
+MOZAMBIQUE     16
+PERU   17
+CHINA  18
+ROMANIA        19
+SAUDI ARABIA   20
+VIETNAM        21
+RUSSIA 22
+UNITED KINGDOM 23
+UNITED STATES  24
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q13.tsv
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q13.tsv
 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q13.tsv
new file mode 100644
index 0000000..a207902
--- /dev/null
+++ 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q13.tsv
@@ -0,0 +1,20 @@
+ haggle. carefully final deposits detect slyly agai    0
+al foxes promise slyly according to the regular accounts. bold requests alon   
1
+y alongside of the pending deposits. carefully special packages are about the 
ironic forges. slyly special     1
+eas hang ironic, silent packages. slyly regular packages are furiously over 
the tithes. fluffily bold  1
+y above the carefully unusual theodolites. final dugouts are quickly across 
the furiously regular d    4
+ALGERIA        0
+ARGENTINA      1
+BRAZIL 2
+CANADA 3
+EGYPT  4
+Sheri Nowmer   0
+Derrick Whelply        0
+Michael Spence 0
+Maya Gutierrez 0
+Roberta Damstra        0
+AFRICA 0
+AMERICA        1
+ASIA   2
+EUROPE 3
+MIDDLE EAST    4
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q14.tsv
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q14.tsv
 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q14.tsv
new file mode 100644
index 0000000..754dca8
--- /dev/null
+++ 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q14.tsv
@@ -0,0 +1,30 @@
+0      ALGERIA
+1      ARGENTINA
+1      BRAZIL
+1      CANADA
+4      EGYPT
+0      ETHIOPIA
+3      FRANCE
+3      GERMANY
+2      INDIA
+2      INDONESIA
+4      IRAN
+4      IRAQ
+2      JAPAN
+4      JORDAN
+0      KENYA
+0      MOROCCO
+0      MOZAMBIQUE
+1      PERU
+2      CHINA
+3      ROMANIA
+4      SAUDI ARABIA
+2      VIETNAM
+3      RUSSIA
+3      UNITED KINGDOM
+1      UNITED STATES
+0      AFRICA
+1      AMERICA
+2      ASIA
+3      EUROPE
+4      MIDDLE EAST
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q15.tsv
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q15.tsv
 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q15.tsv
new file mode 100644
index 0000000..e142333
--- /dev/null
+++ 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q15.tsv
@@ -0,0 +1,8 @@
+0      0       ALGERIA
+1      1       ARGENTINA
+2      1       BRAZIL
+3      1       CANADA
+4      4       EGYPT
+1      0       abc
+1      1       abc
+1      4       abc
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q16.tsv
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q16.tsv
 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q16.tsv
new file mode 100644
index 0000000..aa6e733
--- /dev/null
+++ 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q16.tsv
@@ -0,0 +1,3 @@
+1      0       abc
+1      1       abc
+1      4       abc
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q17.tsv
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q17.tsv
 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q17.tsv
new file mode 100644
index 0000000..27aa989
--- /dev/null
+++ 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q17.tsv
@@ -0,0 +1,5 @@
+0      0       ALGERIA
+1      1       ARGENTINA
+2      1       BRAZIL
+3      1       CANADA
+4      4       EGYPT
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q18_1.tsv
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q18_1.tsv
 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q18_1.tsv
new file mode 100644
index 0000000..5cb3a5e
--- /dev/null
+++ 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q18_1.tsv
@@ -0,0 +1,4 @@
+2011-07-26
+2015-03-26 19:04:55.542
+2015-03-26 19:04:55.543
+2015-03-26 19:04:55.544
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q18_2.tsv
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q18_2.tsv
 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q18_2.tsv
new file mode 100644
index 0000000..123efc6
--- /dev/null
+++ 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q18_2.tsv
@@ -0,0 +1,13 @@
+2009-03-03
+2001-08-27
+2011-07-26
+1970-09-02
+1983-04-24
+2007-02-01
+1977-08-03
+1962-05-14
+1950-02-16
+1983-09-05
+2000-09-09
+1960-08-18
+2015-03-26 19:04:55.544
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q18_3.tsv
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q18_3.tsv
 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q18_3.tsv
new file mode 100644
index 0000000..123efc6
--- /dev/null
+++ 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q18_3.tsv
@@ -0,0 +1,13 @@
+2009-03-03
+2001-08-27
+2011-07-26
+1970-09-02
+1983-04-24
+2007-02-01
+1977-08-03
+1962-05-14
+1950-02-16
+1983-09-05
+2000-09-09
+1960-08-18
+2015-03-26 19:04:55.544
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q2.tsv
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q2.tsv
 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q2.tsv
new file mode 100644
index 0000000..b178657
--- /dev/null
+++ 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q2.tsv
@@ -0,0 +1,4 @@
+1
+2
+3
+4
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q3.tsv
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q3.tsv
 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q3.tsv
new file mode 100644
index 0000000..59dd464
--- /dev/null
+++ 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q3.tsv
@@ -0,0 +1,5 @@
+1
+2
+0
+3
+4
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q4.tsv
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q4.tsv
 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q4.tsv
new file mode 100644
index 0000000..7472138
--- /dev/null
+++ 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q4.tsv
@@ -0,0 +1,25 @@
+0
+1
+4
+3
+2
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q5.tsv
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q5.tsv
 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q5.tsv
new file mode 100644
index 0000000..b803523
--- /dev/null
+++ 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q5.tsv
@@ -0,0 +1,5 @@
+AFRICA lar deposits. blithely final packages cajole. regular waters are final 
requests. regular accounts are according to      0
+AMERICA        hs use ironic, even requests. s 1
+ASIA   ges. thinly even pinto beans ca 2
+EUROPE ly final courts cajole furiously final excuse   3
+MIDDLE EAST    uickly special accounts cajole carefully blithely close 
requests. carefully final asymptotes haggle furiousl    4
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q6.tsv
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q6.tsv
 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q6.tsv
new file mode 100644
index 0000000..e7127dd
--- /dev/null
+++ 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q6.tsv
@@ -0,0 +1,6 @@
+1      1
+2      1
+3      1
+17     1
+24     1
+2      2
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q6_1.tsv
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q6_1.tsv
 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q6_1.tsv
new file mode 100644
index 0000000..d32c846
--- /dev/null
+++ 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q6_1.tsv
@@ -0,0 +1,25 @@
+0      0
+1      1
+2      2
+3      3
+4      4
+5      5
+6      6
+7      7
+8      8
+9      9
+10     10
+11     11
+12     12
+13     13
+14     14
+15     15
+16     16
+17     17
+18     18
+19     19
+20     20
+21     21
+22     22
+23     23
+24     24
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q7.tsv
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q7.tsv
 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q7.tsv
new file mode 100644
index 0000000..3e75b5f
--- /dev/null
+++ 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q7.tsv
@@ -0,0 +1,2 @@
+abc
+abcdefgh
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q8.tsv
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q8.tsv
 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q8.tsv
new file mode 100644
index 0000000..4e9cb34
--- /dev/null
+++ 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q8.tsv
@@ -0,0 +1,30 @@
+ALGERIA        0
+ARGENTINA      1
+BRAZIL 2
+CANADA 3
+EGYPT  4
+ETHIOPIA       5
+FRANCE 6
+GERMANY        7
+INDIA  8
+INDONESIA      9
+IRAN   10
+IRAQ   11
+JAPAN  12
+JORDAN 13
+KENYA  14
+MOROCCO        15
+MOZAMBIQUE     16
+PERU   17
+CHINA  18
+ROMANIA        19
+SAUDI ARABIA   20
+VIETNAM        21
+RUSSIA 22
+UNITED KINGDOM 23
+UNITED STATES  24
+lar deposits. blithely final packages cajole. regular waters are final 
requests. regular accounts are according to     0
+hs use ironic, even requests. s        1
+ges. thinly even pinto beans ca        2
+ly final courts cajole furiously final excuse  3
+uickly special accounts cajole carefully blithely close requests. carefully 
final asymptotes haggle furiousl   4
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q9.tsv
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q9.tsv
 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q9.tsv
new file mode 100644
index 0000000..2fd5e7b
--- /dev/null
+++ 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/q9.tsv
@@ -0,0 +1,20 @@
+1292   F       104190.66       1994-01-20T00:00:00.000-08:00   5-LOW   
Clerk#000000743 0       y pending requests integrate    66
+890    F       108594.87       1994-03-13T00:00:00.000-08:00   4-NOT SPECIFIED 
Clerk#000000973 0       e carefully ironic packages. pending    99
+1180   F       67636.54        1994-01-01T00:00:00.000-08:00   4-NOT SPECIFIED 
Clerk#000000735 0       efully dogged deposits. furiou  290
+1411   F       88375.89        1994-03-13T00:00:00.000-08:00   1-URGENT        
Clerk#000000923 0       dolites. carefully regular pinto beans cajol    291
+392    F       121127.17       1994-03-26T00:00:00.000-08:00   1-URGENT        
Clerk#000000959 0       arefully pending foxes sleep blithely. slyly express 
accoun     323
+1066   F       25542.02        1994-03-08T00:00:00.000-08:00   2-HIGH  
Clerk#000000932 0       ke slyly bold pinto beans. blithely regular accounts 
against the spe    352
+1270   F       3266.69 1994-02-17T00:00:00.000-08:00   2-HIGH  Clerk#000000062 
0       ing to the regular asymptotes. final, pending foxes about the blithely 
sil      389
+547    F       132531.73       1994-02-06T00:00:00.000-08:00   3-MEDIUM        
Clerk#000000468 0       ironic, even packages. thinly unusual accounts sleep 
along the slyly unusual    417
+793    F       34950.94        1994-03-10T00:00:00.000-08:00   1-URGENT        
Clerk#000000448 0        special pinto beans use quickly furiously even depende 
673
+553    F       53948.73        1994-02-13T00:00:00.000-08:00   3-MEDIUM        
Clerk#000000437 0       ts haggle quickly across the slyl       833
+163    P       95469.44        1995-03-18T00:00:00.000-08:00   1-URGENT        
Clerk#000000632 0       ular requests are blithely pending orbits-- even 
requests against the deposit   65
+602    F       119718.02       1995-01-25T00:00:00.000-08:00   2-HIGH  
Clerk#000000648 0        haggle quickly. stealthily bold asymptotes haggle 
among the furiously even re  386
+475    P       213638.07       1995-03-05T00:00:00.000-08:00   4-NOT SPECIFIED 
Clerk#000000293 0       d theodolites. boldly bold foxes since the pack 450
+578    P       261882.19       1995-03-25T00:00:00.000-08:00   2-HIGH  
Clerk#000000354 0       g dependencies. regular accounts        643
+1333   F       75392.93        1995-03-18T00:00:00.000-08:00   1-URGENT        
Clerk#000000191 0       kly express requests. fluffily silent accounts poach 
furiously  775
+1367   F       192178.48       1995-01-05T00:00:00.000-08:00   1-URGENT        
Clerk#000000516 0       posits. ironic, pending requests cajole. even theodol   
802
+490    P       88281.28        1995-03-20T00:00:00.000-08:00   1-URGENT        
Clerk#000000316 0        wake quickly against   897
+658    F       315638.02       1995-03-02T00:00:00.000-08:00   5-LOW   
Clerk#000000450 0       ithely express pinto beans.     928
+275    F       41838.38        1995-02-11T00:00:00.000-08:00   1-URGENT        
Clerk#000000125 0       t, even deposits hang about the slyly special i 1056
+1232   P       131664.83       1995-03-04T00:00:00.000-08:00   3-MEDIUM        
Clerk#000000006 0       re quickly along the blithe     1092
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/testAggregationOnUnionDistinctOperator_1.tsv
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/testAggregationOnUnionDistinctOperator_1.tsv
 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/testAggregationOnUnionDistinctOperator_1.tsv
new file mode 100644
index 0000000..d114555
--- /dev/null
+++ 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/testAggregationOnUnionDistinctOperator_1.tsv
@@ -0,0 +1,4 @@
+10     2       1       4
+20     5       3       4
+100    2       1       4
+110    5       3       4
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/testAggregationOnUnionDistinctOperator_2.tsv
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/testAggregationOnUnionDistinctOperator_2.tsv
 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/testAggregationOnUnionDistinctOperator_2.tsv
new file mode 100644
index 0000000..53d874e
--- /dev/null
+++ 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/testAggregationOnUnionDistinctOperator_2.tsv
@@ -0,0 +1,4 @@
+10     1       2       4
+20     3       5       4
+100    1       2       4
+110    3       5       4
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/testProjectDownOverUnionDistinctImplicitCasting.tsv
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/testProjectDownOverUnionDistinctImplicitCasting.tsv
 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/testProjectDownOverUnionDistinctImplicitCasting.tsv
new file mode 100644
index 0000000..7c84ba7
--- /dev/null
+++ 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/testProjectDownOverUnionDistinctImplicitCasting.tsv
@@ -0,0 +1,10 @@
+0
+0
+2
+2
+4
+4
+6
+6
+8
+8
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/testProjectFiltertPushDownOverUnionDistinct.tsv
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/testProjectFiltertPushDownOverUnionDistinct.tsv
 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/testProjectFiltertPushDownOverUnionDistinct.tsv
new file mode 100644
index 0000000..c7a7ace
--- /dev/null
+++ 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/testProjectFiltertPushDownOverUnionDistinct.tsv
@@ -0,0 +1,6 @@
+1
+2
+3
+1
+2
+3
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/testProjectPushDownOverUnionDistinctWithProject.tsv
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/testProjectPushDownOverUnionDistinctWithProject.tsv
 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/testProjectPushDownOverUnionDistinctWithProject.tsv
new file mode 100644
index 0000000..7d708b0
--- /dev/null
+++ 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/testProjectPushDownOverUnionDistinctWithProject.tsv
@@ -0,0 +1,30 @@
+0      ALGERIA
+1      ARGENTINA
+2      BRAZIL
+3      CANADA
+4      EGYPT
+5      ETHIOPIA
+6      FRANCE
+7      GERMANY
+8      INDIA
+9      INDONESIA
+10     IRAN
+11     IRAQ
+12     JAPAN
+13     JORDAN
+14     KENYA
+15     MOROCCO
+16     MOZAMBIQUE
+17     PERU
+18     CHINA
+19     ROMANIA
+20     SAUDI ARABIA
+21     VIETNAM
+22     RUSSIA
+23     UNITED KINGDOM
+24     UNITED STATES
+0      AFRICA
+1      AMERICA
+2      ASIA
+3      EUROPE
+4      MIDDLE EAST
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/testProjectPushDownOverUnionDistinctWithoutProject.tsv
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/testProjectPushDownOverUnionDistinctWithoutProject.tsv
 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/testProjectPushDownOverUnionDistinctWithoutProject.tsv
new file mode 100644
index 0000000..c977edd
--- /dev/null
+++ 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/testProjectPushDownOverUnionDistinctWithoutProject.tsv
@@ -0,0 +1,30 @@
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+0
+1
+2
+3
+4
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/testProjectPushDownProjectColumnReorderingAndAlias.tsv
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/testProjectPushDownProjectColumnReorderingAndAlias.tsv
 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/testProjectPushDownProjectColumnReorderingAndAlias.tsv
new file mode 100644
index 0000000..05bb0ff
--- /dev/null
+++ 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/testProjectPushDownProjectColumnReorderingAndAlias.tsv
@@ -0,0 +1,30 @@
+ haggle. carefully final deposits detect slyly agai    0       ALGERIA
+al foxes promise slyly according to the regular accounts. bold requests alon   
1       ARGENTINA
+y alongside of the pending deposits. carefully special packages are about the 
ironic forges. slyly special     2       BRAZIL
+eas hang ironic, silent packages. slyly regular packages are furiously over 
the tithes. fluffily bold  3       CANADA
+y above the carefully unusual theodolites. final dugouts are quickly across 
the furiously regular d    4       EGYPT
+ven packages wake quickly. regu        5       ETHIOPIA
+refully final requests. regular, ironi 6       FRANCE
+l platelets. regular accounts x-ray: unusual, regular acco     7       GERMANY
+ss excuses cajole slyly across the packages. deposits print aroun      8       
INDIA
+ slyly express asymptotes. regular deposits haggle slyly. carefully ironic 
hockey players sleep blithely. carefull     9       INDONESIA
+efully alongside of the slyly final dependencies.      10      IRAN
+nic deposits boost atop the quickly final requests? quickly regula     11      
IRAQ
+ously. final, express gifts cajole a   12      JAPAN
+ic deposits are blithely about the carefully regular pa        13      JORDAN
+ pending excuses haggle furiously deposits. pending, express pinto beans wake 
fluffily past t  14      KENYA
+rns. blithely bold courts among the closely regular packages use furiously 
bold platelets?     15      MOROCCO
+s. ironic, unusual asymptotes wake blithely r  16      MOZAMBIQUE
+platelets. blithely pending dependencies use fluffily across the even pinto 
beans. carefully silent accoun     17      PERU
+c dependencies. furiously express notornis sleep slyly regular accounts. ideas 
sleep. depos    18      CHINA
+ular asymptotes are about the furious multipliers. express dependencies nag 
above the ironically ironic account        19      ROMANIA
+ts. silent requests haggle. closely express packages sleep across the blithely 
20      SAUDI ARABIA
+hely enticingly express accounts. even, final  21      VIETNAM
+ requests against the platelets use never according to the quickly regular 
pint        22      RUSSIA
+eans boost carefully special requests. accounts are. carefull  23      UNITED 
KINGDOM
+y final packages. slow foxes cajole quickly. quickly silent platelets breach 
ironic accounts. unusual pinto be 24      UNITED STATES
+lar deposits. blithely final packages cajole. regular waters are final 
requests. regular accounts are according to     0       AFRICA
+hs use ironic, even requests. s        1       AMERICA
+ges. thinly even pinto beans ca        2       ASIA
+ly final courts cajole furiously final excuse  3       EUROPE
+uickly special accounts cajole carefully blithely close requests. carefully 
final asymptotes haggle furiousl   4       MIDDLE EAST
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/drill/blob/45a82c45/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/testProjectWithExpressionPushDownOverUnionDistinct.tsv
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/testProjectWithExpressionPushDownOverUnionDistinct.tsv
 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/testProjectWithExpressionPushDownOverUnionDistinct.tsv
new file mode 100644
index 0000000..4a9efcd
--- /dev/null
+++ 
b/exec/java-exec/src/test/resources/testframework/TestUnionDistinctQueries/testProjectWithExpressionPushDownOverUnionDistinct.tsv
@@ -0,0 +1,30 @@
+0
+2
+4
+6
+8
+10
+12
+14
+16
+18
+20
+22
+24
+26
+28
+30
+32
+34
+36
+38
+40
+42
+44
+46
+48
+0
+2
+4
+6
+8
\ No newline at end of file

Reply via email to