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 2016/05/03 19:50:46 UTC

[3/5] drill git commit: DRILL-3894: Upgrade functions MaxDir, MinDir... Optional filename parameter - added implementations of functions MAXDIR, IMAXDIR, MINDIR, IMINDIR with one (schema) without filename argument; - added UTest for results comparison of

DRILL-3894: Upgrade functions MaxDir, MinDir... Optional filename parameter - added implementations of functions MAXDIR, IMAXDIR, MINDIR, IMINDIR with one (schema) without filename argument; - added UTest for results comparison of using Query Directory Functions with one and two arguments.

This closes #467


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

Branch: refs/heads/master
Commit: a6a85ab66360cac81ab4777cec20292470ac483d
Parents: 38e1016
Author: Vitalii Diravka <vi...@gmail.com>
Authored: Tue Apr 5 15:07:29 2016 +0000
Committer: Parth Chandra <pa...@apache.org>
Committed: Tue May 3 10:50:09 2016 -0700

----------------------------------------------------------------------
 .../codegen/templates/DirectoryExplorers.java   | 23 ++++++++++++++++++
 .../exec/planner/TestDirectoryExplorerUDFs.java | 25 ++++++++++++++++++++
 2 files changed, 48 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/drill/blob/a6a85ab6/exec/java-exec/src/main/codegen/templates/DirectoryExplorers.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/codegen/templates/DirectoryExplorers.java b/exec/java-exec/src/main/codegen/templates/DirectoryExplorers.java
index 655ff81..a47a541 100644
--- a/exec/java-exec/src/main/codegen/templates/DirectoryExplorers.java
+++ b/exec/java-exec/src/main/codegen/templates/DirectoryExplorers.java
@@ -43,6 +43,11 @@ public class DirectoryExplorers {
            { "name" : "\"imaxdir\"", "functionClassName" : "IMaxDir", "comparison" : "compareToIgnoreCase(curr) < 0", "goal" : "maximum", "comparisonType" : "case-insensitive"},
            { "name" : "\"mindir\"", "functionClassName" : "MinDir", "comparison" : "compareTo(curr) > 0", "goal" : "minimum", "comparisonType" : "case-sensitive"},
            { "name" : "\"imindir\"", "functionClassName" : "IMinDir", "comparison" : "compareToIgnoreCase(curr) > 0", "goal" : "minimum", "comparisonType" : "case-insensitive"}
+
+           { "name" : "\"maxdir\"", "functionClassName" : "MaxDirTwoArg", "comparison" : "compareTo(curr) < 0", "goal" : "maximum", "comparisonType" : "case-sensitive"},
+           { "name" : "\"imaxdir\"", "functionClassName" : "IMaxDirTwoArg", "comparison" : "compareToIgnoreCase(curr) < 0", "goal" : "maximum", "comparisonType" : "case-insensitive"},
+           { "name" : "\"mindir\"", "functionClassName" : "MinDirTwoArg", "comparison" : "compareTo(curr) > 0", "goal" : "minimum", "comparisonType" : "case-sensitive"},
+           { "name" : "\"imindir\"", "functionClassName" : "IMinDirTwoArg", "comparison" : "compareToIgnoreCase(curr) > 0", "goal" : "minimum", "comparisonType" : "case-insensitive"}
   ] as dirAggrProps>
 
 
@@ -50,7 +55,9 @@ public class DirectoryExplorers {
   public static class ${dirAggrProps.functionClassName} implements DrillSimpleFunc {
 
     @Param VarCharHolder schema;
+  <#if dirAggrProps.functionClassName?ends_with("TwoArg")>
     @Param  VarCharHolder table;
+  </#if>
     @Output VarCharHolder out;
     @Inject DrillBuf buffer;
     @Inject org.apache.drill.exec.store.PartitionExplorer partitionExplorer;
@@ -63,23 +70,39 @@ public class DirectoryExplorers {
       try {
         subPartitions = partitionExplorer.getSubPartitions(
             org.apache.drill.exec.expr.fn.impl.StringFunctionHelpers.getStringFromVarCharHolder(schema),
+          <#if dirAggrProps.functionClassName?ends_with("TwoArg")>
             org.apache.drill.exec.expr.fn.impl.StringFunctionHelpers.getStringFromVarCharHolder(table),
+          <#else>
+            ".",
+          </#if>
             new java.util.ArrayList<String>(),
             new java.util.ArrayList<String>());
       } catch (org.apache.drill.exec.store.PartitionNotFoundException e) {
         throw new RuntimeException(
+          <#if dirAggrProps.functionClassName?ends_with("TwoArg")>
             String.format("Error in %s function: Table %s does not exist in schema %s ",
+          <#else>
+            String.format("Error in %s function: Schema/table %s does not exist ",
+          </#if>
                 ${dirAggrProps.name},
+          <#if dirAggrProps.functionClassName?ends_with("TwoArg")>
                 org.apache.drill.exec.expr.fn.impl.StringFunctionHelpers.getStringFromVarCharHolder(table),
+          </#if>
                 org.apache.drill.exec.expr.fn.impl.StringFunctionHelpers.getStringFromVarCharHolder(schema))
         );
       }
       java.util.Iterator partitionIterator = subPartitions.iterator();
       if (!partitionIterator.hasNext()) {
         throw new RuntimeException(
+          <#if dirAggrProps.functionClassName?ends_with("TwoArg")>
             String.format("Error in %s function: Table %s in schema %s does not contain sub-partitions.",
+          <#else>
+            String.format("Error in %s function: Schema/table %s does not contain sub-partitions.",
+          </#if>
                 ${dirAggrProps.name},
+          <#if dirAggrProps.functionClassName?ends_with("TwoArg")>
                 org.apache.drill.exec.expr.fn.impl.StringFunctionHelpers.getStringFromVarCharHolder(table),
+          </#if>
                 org.apache.drill.exec.expr.fn.impl.StringFunctionHelpers.getStringFromVarCharHolder(schema)
             )
         );

http://git-wip-us.apache.org/repos/asf/drill/blob/a6a85ab6/exec/java-exec/src/test/java/org/apache/drill/exec/planner/TestDirectoryExplorerUDFs.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/planner/TestDirectoryExplorerUDFs.java b/exec/java-exec/src/test/java/org/apache/drill/exec/planner/TestDirectoryExplorerUDFs.java
index c3427f6..a5916a5 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/planner/TestDirectoryExplorerUDFs.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/planner/TestDirectoryExplorerUDFs.java
@@ -24,7 +24,9 @@ import com.google.common.collect.ImmutableMap;
 import org.apache.drill.PlanTestBase;
 import org.apache.drill.common.exceptions.UserRemoteException;
 import org.apache.drill.exec.fn.interp.TestConstantFolding;
+import org.apache.drill.exec.store.StoragePluginRegistry;
 import org.apache.drill.exec.util.JsonStringArrayList;
+import org.apache.drill.exec.util.TestUtilities;
 import org.apache.drill.exec.util.Text;
 import org.junit.Before;
 import org.junit.BeforeClass;
@@ -163,4 +165,27 @@ public class TestDirectoryExplorerUDFs extends PlanTestBase {
       test("set `planner.enable_constant_folding` = true;");
     }
   }
+
+  @Test
+  public void testOneArgQueryDirFunctions() throws Exception {
+    //Initially update the location of dfs_test.tmp workspace with "path" temp directory just for use in this UTest
+    final StoragePluginRegistry pluginRegistry = getDrillbitContext().getStorage();
+    try {
+      TestUtilities.updateDfsTestTmpSchemaLocation(pluginRegistry, path);
+
+      //Results comparison of using Query Directory Functions (MAXDIR, IMAXDIR, MINDIR, IMINDIR) with one and two arguments
+      String queryWithTwoArgFunc = "select * from dfs.`" + path + "/*/*.csv` where dir0 = %s('dfs.root','" + path + "')";
+      String queryWithOneArgFunc = "select * from dfs.`" + path + "/*/*.csv` where dir0 = %s('dfs_test.tmp')";
+      for (ConstantFoldingTestConfig config : tests) {
+        testBuilder()
+            .sqlQuery(String.format(queryWithOneArgFunc, config.funcName))
+            .unOrdered()
+            .sqlBaselineQuery(String.format(queryWithTwoArgFunc, config.funcName))
+            .go();
+      }
+    } finally {
+        TestUtilities.updateDfsTestTmpSchemaLocation(pluginRegistry, getDfsTestTmpSchemaLocation());
+    }
+  }
+
 }