sohami closed pull request #1461: DRILL-1248: Allow positional / named aliases 
in group by / having clauses
URL: https://github.com/apache/drill/pull/1461
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillConformance.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillConformance.java
index e6efeb92d1b..4a6aefc86b4 100644
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillConformance.java
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillConformance.java
@@ -21,10 +21,7 @@
 import org.apache.calcite.sql.validate.SqlDelegatingConformance;
 
 /**
- * Drill's SQL conformance is SqlConformanceEnum.DEFAULT except for method 
isApplyAllowed().
- * Since Drill is going to allow OUTER APPLY and CROSS APPLY to allow each row 
from left child of Join
- * to join with output of right side (sub-query or table function that will be 
invoked for each row).
- * Refer to DRILL-5999 for more information.
+ * Drill's SQL conformance is SqlConformanceEnum.DEFAULT with a couple of 
deviations.
  */
 public class DrillConformance extends SqlDelegatingConformance {
 
@@ -36,8 +33,28 @@ public DrillConformance(SqlConformanceEnum flavor) {
     super(flavor);
   }
 
+  /**
+   * Drill allows OUTER APPLY and CROSS APPLY to allow each row from left 
child of Join
+   * to join with output of right side (sub-query or table function that will 
be invoked for each row).
+   * Refer to DRILL-5999 for more information.
+   */
   @Override
   public boolean isApplyAllowed() {
     return true;
   }
+
+  @Override
+  public boolean isGroupByOrdinal() {
+    return true;
+  }
+
+  @Override
+  public boolean isGroupByAlias() {
+    return true;
+  }
+
+  @Override
+  public boolean isHavingAlias() {
+    return true;
+  }
 }
diff --git 
a/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestAggregateFunctions.java
 
b/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestAggregateFunctions.java
index d9564b7d606..f1f74a683b8 100644
--- 
a/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestAggregateFunctions.java
+++ 
b/exec/java-exec/src/test/java/org/apache/drill/exec/fn/impl/TestAggregateFunctions.java
@@ -447,7 +447,7 @@ public void testAggGroupByWithNullDecimal() throws 
Exception {
       alterSession(PlannerSettings.ENABLE_DECIMAL_DATA_TYPE_KEY, true);
       testBuilder()
           .sqlQuery("select sum(cast(a as decimal(9,0))) as s,\n" +
-              "avg(cast(a as decimal(9,0))) as a,\n" +
+              "avg(cast(a as decimal(9,0))) as av,\n" +
               "var_samp(cast(a as decimal(9,0))) as varSamp,\n" +
               "var_pop(cast(a as decimal(9,0))) as varPop,\n" +
               "stddev_pop(cast(a as decimal(9,0))) as stddevPop,\n" +
@@ -455,7 +455,7 @@ public void testAggGroupByWithNullDecimal() throws 
Exception {
               "max(cast(a as decimal(9,0))) as mx," +
             "min(cast(a as decimal(9,0))) as mn from dfs.`%s` t group by a", 
fileName)
           .unOrdered()
-          .baselineColumns("s", "a", "varSamp", "varPop", "stddevPop", 
"stddevSamp", "mx", "mn")
+          .baselineColumns("s", "av", "varSamp", "varPop", "stddevPop", 
"stddevSamp", "mx", "mn")
           .baselineValues(BigDecimal.valueOf(1), new BigDecimal("1.000000"), 
new BigDecimal("0.000000"),
               new BigDecimal("0.000000"), new BigDecimal("0.000000"), new 
BigDecimal("0.000000"),
               BigDecimal.valueOf(1), BigDecimal.valueOf(1))
diff --git 
a/exec/java-exec/src/test/java/org/apache/drill/exec/sql/TestConformance.java 
b/exec/java-exec/src/test/java/org/apache/drill/exec/sql/TestConformance.java
index 4af1a84b84d..f058bd7aaa5 100644
--- 
a/exec/java-exec/src/test/java/org/apache/drill/exec/sql/TestConformance.java
+++ 
b/exec/java-exec/src/test/java/org/apache/drill/exec/sql/TestConformance.java
@@ -17,30 +17,82 @@
  */
 package org.apache.drill.exec.sql;
 
-import org.apache.drill.PlanTestBase;
 import org.apache.drill.categories.SqlTest;
-import org.apache.drill.test.BaseTestQuery;
+import org.apache.drill.test.ClusterFixture;
+import org.apache.drill.test.ClusterFixtureBuilder;
+import org.apache.drill.test.ClusterTest;
+import org.junit.BeforeClass;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
+import static org.junit.Assert.assertTrue;
+
 @Category(SqlTest.class)
-public class TestConformance extends BaseTestQuery {
+public class TestConformance extends ClusterTest {
+
+  @BeforeClass
+  public static void setup() throws Exception {
+    ClusterFixtureBuilder builder = ClusterFixture.builder(dirTestWatcher);
+    startCluster(builder);
+  }
 
   @Test
   public void testApply() throws Exception{
-
     //cross join is not support yet in Drill: DRILL-1921, so we are testing 
OUTER APPLY only
     String query = "SELECT c.c_nationkey, o.orderdate from " +
       "cp.`tpch/customer.parquet` c outer apply " +
       "cp.`tpch/orders.parquet` o " +
       "where c.c_custkey = o.o_custkey";
 
-    PlanTestBase.testPlanMatchingPatterns(query,
-        new String[] {"Join"}, new String[] {}
-    );
+    String plan = queryBuilder().sql(query).explainText();
+    assertTrue(plan.contains("Join(condition="));
+  }
 
-    return;
+  @Test
+  public void testGroupByWithPositionalAlias() throws Exception {
+    testBuilder()
+        .sqlQuery("select length(n_name), n_regionkey from 
cp.`tpch/nation.parquet` group by 1, 2")
+        .unOrdered()
+        .sqlBaselineQuery("select length(n_name), n_regionkey from 
cp.`tpch/nation.parquet` group by length(n_name), n_regionkey")
+        .go();
+  }
+
+  @Test
+  public void testGroupByWithNamedAlias() throws Exception {
+    testBuilder()
+        .sqlQuery("select length(n_name) as len, n_regionkey as key from 
cp.`tpch/nation.parquet` group by len, key")
+        .unOrdered()
+        .sqlBaselineQuery("select length(n_name) as len, n_regionkey as key 
from cp.`tpch/nation.parquet` group by length(n_name), n_regionkey")
+        .go();
   }
 
+  @Test
+  public void testHavingWithNamedAlias() throws Exception {
+    testBuilder()
+        .sqlQuery("select length(n_name) as len, count(*) as cnt from 
cp.`tpch/nation.parquet` " +
+            "group by length(n_name) having cnt > 1")
+        .unOrdered()
+        .sqlBaselineQuery("select length(n_name) as len, count(*) as cnt from 
cp.`tpch/nation.parquet` " +
+            "group by length(n_name) having count(*) > 1")
+        .go();
+  }
+
+  @Test
+  public void testOrderWithPositionalAlias() throws Exception {
+    testBuilder()
+        .sqlQuery("select n_regionkey, n_name from cp.`tpch/nation.parquet` 
order by 1, 2")
+        .unOrdered()
+        .sqlBaselineQuery("select n_regionkey, n_name from 
cp.`tpch/nation.parquet` order by n_regionkey, n_name")
+        .go();
+  }
+
+  @Test
+  public void testOrderWithNamedAlias() throws Exception {
+    testBuilder()
+        .sqlQuery("select n_regionkey as r, n_name as n from 
cp.`tpch/nation.parquet` order by r, n")
+        .unOrdered()
+        .sqlBaselineQuery("select n_regionkey as r, n_name as n from 
cp.`tpch/nation.parquet` order by n_regionkey, n_name")
+        .go();
+  }
 
 }
diff --git a/pom.xml b/pom.xml
index 5bb908fa692..a6e1f41963f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -46,7 +46,7 @@
     <guava.version>19.0</guava.version>
     <forkCount>2</forkCount>
     <parquet.version>1.10.0</parquet.version>
-    <calcite.version>1.17.0-drill-r0</calcite.version>
+    <calcite.version>1.17.0-drill-r1</calcite.version>
     <avatica.version>1.12.0</avatica.version>
     <janino.version>2.7.6</janino.version>
     <sqlline.version>1.1.9-drill-r7</sqlline.version>


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services

Reply via email to