You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@drill.apache.org by pa...@apache.org on 2015/03/24 20:41:10 UTC

[4/5] drill git commit: DRILL-2094: Add SqlOrderBy rule for CompoundIdentifierConverter

DRILL-2094: Add SqlOrderBy rule for CompoundIdentifierConverter


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

Branch: refs/heads/master
Commit: 07a981797dd6094ad0706c7e45d6afc0899a5510
Parents: c7cf883
Author: Hsuan-Yi Chu <hs...@usc.edu>
Authored: Wed Mar 18 08:59:04 2015 -0700
Committer: Parth Chandra <pc...@maprtech.com>
Committed: Tue Mar 24 12:12:19 2015 -0700

----------------------------------------------------------------------
 .../sql/parser/CompoundIdentifierConverter.java | 16 +++++++++++++
 .../org/apache/drill/TestExampleQueries.java    | 20 ++++++++++++++++
 .../store/json/orderByArrayElement.json         | 24 ++++++++++++++++++++
 3 files changed, 60 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/drill/blob/07a98179/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/CompoundIdentifierConverter.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/CompoundIdentifierConverter.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/CompoundIdentifierConverter.java
index 061524d..eb97941 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/CompoundIdentifierConverter.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/CompoundIdentifierConverter.java
@@ -24,6 +24,7 @@ import org.eigenbase.sql.SqlCall;
 import org.eigenbase.sql.SqlIdentifier;
 import org.eigenbase.sql.SqlJoin;
 import org.eigenbase.sql.SqlNode;
+import org.eigenbase.sql.SqlOrderBy;
 import org.eigenbase.sql.SqlSelect;
 import org.eigenbase.sql.util.SqlShuttle;
 import org.eigenbase.sql.util.SqlVisitor;
@@ -125,6 +126,18 @@ public class CompoundIdentifierConverter extends SqlShuttle {
     final RewriteType D =RewriteType.DISABLE;
     final RewriteType U =RewriteType.UNCHANGED;
 
+    /*
+    This map stores the rules that instruct each SqlCall class which data field needs
+    to be rewritten if that data field is a CompoundIdentifier
+
+    Key  : Each rule corresponds to a SqlCall class;
+    value: It is an array of RewriteType, each being associated with a data field
+           in that class.
+
+           For example, there are four data fields (query, orderList, offset, fetch)
+           in org.eigenbase.sql.SqlOrderBy. Since only orderList needs to be written,
+           RewriteType[] should be R(D, E, D, D).
+    */
     Map<Class<? extends SqlCall>, RewriteType[]> rules = Maps.newHashMap();
 
   //SqlNodeList keywordList,
@@ -146,9 +159,12 @@ public class CompoundIdentifierConverter extends SqlShuttle {
     rules.put(SqlShowSchemas.class, R(D, D));
     rules.put(SqlUseSchema.class, R(D));
     rules.put(SqlJoin.class, R(D, D, D, D, D, E));
+    rules.put(SqlOrderBy.class, R(D, E, D, D));
     REWRITE_RULES = ImmutableMap.copyOf(rules);
   }
 
+  // Each type in the input arguments refers to
+  // each data field in the class
   private static RewriteType[] R(RewriteType... types){
     return types;
   }

http://git-wip-us.apache.org/repos/asf/drill/blob/07a98179/exec/java-exec/src/test/java/org/apache/drill/TestExampleQueries.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/TestExampleQueries.java b/exec/java-exec/src/test/java/org/apache/drill/TestExampleQueries.java
index d2d97f8..1d59a11 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/TestExampleQueries.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/TestExampleQueries.java
@@ -736,4 +736,24 @@ public class TestExampleQueries extends BaseTestQuery{
         .baselineValues((long) 2, (long) 2)
         .build().run();
   }
+
+  @Test // DRILL-2094
+  public void testOrderbyArrayElement() throws Exception {
+    String root = FileUtils.getResourceAsFile("/store/json/orderByArrayElement.json").toURI().toString();
+
+    String query = String.format("select t.id, t.list[0] as SortingElem " +
+        "from dfs_test.`%s` t " +
+        "order by t.list[0]", root);
+
+    testBuilder()
+        .sqlQuery(query)
+        .ordered()
+        .baselineColumns("id", "SortingElem")
+        .baselineValues((long) 1, (long) 1)
+        .baselineValues((long) 5, (long) 2)
+        .baselineValues((long) 4, (long) 3)
+        .baselineValues((long) 2, (long) 5)
+        .baselineValues((long) 3, (long) 6)
+        .build().run();
+  }
 }

http://git-wip-us.apache.org/repos/asf/drill/blob/07a98179/exec/java-exec/src/test/resources/store/json/orderByArrayElement.json
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/store/json/orderByArrayElement.json b/exec/java-exec/src/test/resources/store/json/orderByArrayElement.json
new file mode 100644
index 0000000..d2236c8
--- /dev/null
+++ b/exec/java-exec/src/test/resources/store/json/orderByArrayElement.json
@@ -0,0 +1,24 @@
+{
+  "id" : 1,
+  "list" : [1,2]
+}
+
+{
+  "id" : 2,
+  "list" : [5,4]
+}
+
+{
+  "id" : 3,
+  "list" : [6,6]
+}
+
+{
+  "id" : 4,
+  "list" : [3,8]
+}
+
+{
+  "id" : 5,
+  "list" : [2,10]
+}
\ No newline at end of file