You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by hy...@apache.org on 2015/05/08 09:52:22 UTC

tajo git commit: TAJO-1452: Improve function listing order (Contributed Dongjoon Hyun, Committed by hyunsik)

Repository: tajo
Updated Branches:
  refs/heads/master e6e1860c8 -> 1baf8dce6


TAJO-1452: Improve function listing order (Contributed Dongjoon Hyun, Committed by hyunsik)

Closes #470


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

Branch: refs/heads/master
Commit: 1baf8dce6521fcab041c2e94b1ba5eb016611bb2
Parents: e6e1860
Author: Hyunsik Choi <hy...@apache.org>
Authored: Fri May 8 00:52:09 2015 -0700
Committer: Hyunsik Choi <hy...@apache.org>
Committed: Fri May 8 00:52:09 2015 -0700

----------------------------------------------------------------------
 CHANGES                                         |  3 ++
 .../apache/tajo/function/FunctionSignature.java | 10 ++++-
 .../org/apache/tajo/function/FunctionUtil.java  | 39 ++++++++++++++++++++
 .../cli/tsql/commands/DescFunctionCommand.java  | 18 ++-------
 .../main/java/org/apache/tajo/util/JSPUtil.java | 14 -------
 .../main/resources/webapps/admin/functions.jsp  |  3 +-
 6 files changed, 55 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tajo/blob/1baf8dce/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 15fc494..9788307 100644
--- a/CHANGES
+++ b/CHANGES
@@ -24,6 +24,9 @@ Release 0.11.0 - unreleased
 
   IMPROVEMENT
 
+    TAJO-1452: Improve function listing order (Contributed Dongjoon Hyun, 
+    Committed by hyunsik)
+
     TAJO-1576: Sometimes DefaultTajoCliOutputFormatter.parseErrorMessage() eliminates 
     an important kind of information. 
     (Contributed by Jongyoung Park, Committed by jihoon)

http://git-wip-us.apache.org/repos/asf/tajo/blob/1baf8dce/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/function/FunctionSignature.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/function/FunctionSignature.java b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/function/FunctionSignature.java
index fc3a056..89ee017 100644
--- a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/function/FunctionSignature.java
+++ b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/function/FunctionSignature.java
@@ -122,14 +122,20 @@ public class FunctionSignature implements Comparable<FunctionSignature>, ProtoOb
       return cmpVal;
     }
 
-    cmpVal = returnType.getType().compareTo(o.returnType.getType());
+    cmpVal = functionType.name().compareTo(o.functionType.name());
+
+    if (cmpVal != 0) {
+      return cmpVal;
+    }
+
+    cmpVal = returnType.getType().name().compareTo(o.returnType.getType().name());
 
     if (cmpVal != 0) {
       return cmpVal;
     }
 
     for (int i = 0; i < Math.min(paramTypes.length, o.paramTypes.length); i++) {
-      cmpVal = paramTypes[i].getType().compareTo(o.paramTypes[i].getType());
+      cmpVal = paramTypes[i].getType().name().compareTo(o.paramTypes[i].getType().name());
 
       if (cmpVal != 0) {
         return cmpVal;

http://git-wip-us.apache.org/repos/asf/tajo/blob/1baf8dce/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/function/FunctionUtil.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/function/FunctionUtil.java b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/function/FunctionUtil.java
index ef70428..713961f 100644
--- a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/function/FunctionUtil.java
+++ b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/function/FunctionUtil.java
@@ -19,13 +19,52 @@
 package org.apache.tajo.function;
 
 import org.apache.tajo.catalog.FunctionDesc;
+import org.apache.tajo.catalog.proto.CatalogProtos;
 
 import java.util.Collection;
+import java.util.Comparator;
 
 import static org.apache.tajo.common.TajoDataTypes.DataType;
 
 public class FunctionUtil {
 
+  public static class FunctionDescProtoComparator implements Comparator<CatalogProtos.FunctionDescProto>
+  {
+    @Override
+    public int compare(CatalogProtos.FunctionDescProto f1, CatalogProtos.FunctionDescProto f2) {
+      CatalogProtos.FunctionSignatureProto s1 = f1.getSignature();
+      CatalogProtos.FunctionSignatureProto s2 = f2.getSignature();
+
+      int cmpVal = s1.getName().compareTo(s2.getName());
+
+      if (cmpVal != 0) {
+        return cmpVal;
+      }
+
+      cmpVal = s1.getType().name().compareTo(s2.getType().name());
+
+      if (cmpVal != 0) {
+        return cmpVal;
+      }
+
+      cmpVal = s1.getReturnType().getType().name().compareTo(s2.getReturnType().getType().name());
+
+      if (cmpVal != 0) {
+        return cmpVal;
+      }
+
+      for (int i = 0; i < Math.min(s1.getParameterTypesCount(), s2.getParameterTypesCount()); i++) {
+        cmpVal = s1.getParameterTypes(i).getType().name().compareTo(s2.getParameterTypes(i).getType().name());
+
+        if (cmpVal != 0) {
+          return cmpVal;
+        }
+      }
+
+      return s2.getParameterTypesCount() - s1.getParameterTypesCount();
+    }
+  }
+
   public static String buildFQFunctionSignature(String funcName, DataType returnType, DataType... paramTypes) {
     return returnType.getType().name().toLowerCase() + " " + buildSimpleFunctionSignature(funcName, paramTypes);
   }

http://git-wip-us.apache.org/repos/asf/tajo/blob/1baf8dce/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/commands/DescFunctionCommand.java
----------------------------------------------------------------------
diff --git a/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/commands/DescFunctionCommand.java b/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/commands/DescFunctionCommand.java
index 295d326..abdbb9c 100644
--- a/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/commands/DescFunctionCommand.java
+++ b/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/commands/DescFunctionCommand.java
@@ -52,17 +52,7 @@ public class DescFunctionCommand extends TajoShellCommand {
     List<CatalogProtos.FunctionDescProto> functions =
         new ArrayList<CatalogProtos.FunctionDescProto>(client.getFunctions(functionName));
 
-    Collections.sort(functions, new Comparator<CatalogProtos.FunctionDescProto>() {
-      @Override
-      public int compare(CatalogProtos.FunctionDescProto f1, CatalogProtos.FunctionDescProto f2) {
-        int nameCompared = f1.getSignature().getName().compareTo(f2.getSignature().getName());
-        if (nameCompared != 0) {
-          return nameCompared;
-        } else {
-          return f1.getSignature().getReturnType().getType().compareTo(f2.getSignature().getReturnType().getType());
-        }
-      }
-    });
+    Collections.sort(functions, new FunctionUtil.FunctionDescProtoComparator());
 
     String[] headers = new String[]{"Name", "Result type", "Argument types", "Description", "Type"};
     float[] columnWidthRates = new float[]{0.15f, 0.15f, 0.2f, 0.4f, 0.1f};
@@ -70,12 +60,12 @@ public class DescFunctionCommand extends TajoShellCommand {
 
     for(CatalogProtos.FunctionDescProto eachFunction: functions) {
       String name = eachFunction.getSignature().getName();
-      String resultDataType = eachFunction.getSignature().getReturnType().getType().toString();
+      String resultDataType = eachFunction.getSignature().getReturnType().getType().toString().toLowerCase();
       String arguments = FunctionUtil.buildParamTypeString(
           eachFunction.getSignature().getParameterTypesList().toArray(
               new DataType[eachFunction.getSignature().getParameterTypesCount()]));
-      String functionType = eachFunction.getSignature().getType().toString();
-      String description = eachFunction.getSupplement().getShortDescription();
+      String functionType = eachFunction.getSignature().getType().toString().toLowerCase();
+      String description = eachFunction.getSupplement().getShortDescription().trim();
 
       int index = 0;
       printLeft(" " + name, columnWidths[index++]);

http://git-wip-us.apache.org/repos/asf/tajo/blob/1baf8dce/tajo-core/src/main/java/org/apache/tajo/util/JSPUtil.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/util/JSPUtil.java b/tajo-core/src/main/java/org/apache/tajo/util/JSPUtil.java
index 875d12b..aee2ced 100644
--- a/tajo-core/src/main/java/org/apache/tajo/util/JSPUtil.java
+++ b/tajo-core/src/main/java/org/apache/tajo/util/JSPUtil.java
@@ -311,20 +311,6 @@ public class JSPUtil {
     }
   }
 
-  public static void sortFunctionDesc(List<FunctionDesc> functions) {
-    Collections.sort(functions, new java.util.Comparator<FunctionDesc>() {
-      @Override
-      public int compare(FunctionDesc f1, FunctionDesc f2) {
-        int nameCompared = f1.getFunctionName().compareTo(f2.getFunctionName());
-        if(nameCompared != 0) {
-          return nameCompared;
-        } else {
-          return f1.getReturnType().getType().compareTo(f2.getReturnType().getType());
-        }
-      }
-    });
-  }
-
   static final DecimalFormat PERCENT_FORMAT = new DecimalFormat("###.#");
   public static String percentFormat(float value) {
     return PERCENT_FORMAT.format(value * 100.0f);

http://git-wip-us.apache.org/repos/asf/tajo/blob/1baf8dce/tajo-core/src/main/resources/webapps/admin/functions.jsp
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/resources/webapps/admin/functions.jsp b/tajo-core/src/main/resources/webapps/admin/functions.jsp
index c805aaa..cf3ddc5 100644
--- a/tajo-core/src/main/resources/webapps/admin/functions.jsp
+++ b/tajo-core/src/main/resources/webapps/admin/functions.jsp
@@ -24,13 +24,12 @@
 <%@ page import="org.apache.tajo.master.*" %>
 <%@ page import="org.apache.tajo.catalog.*" %>
 <%@ page import="org.apache.hadoop.http.HtmlQuoting" %>
-<%@ page import="org.apache.tajo.util.JSPUtil" %>
 <%
     TajoMaster master = (TajoMaster) StaticHttpServer.getInstance().getAttribute("tajo.info.server.object");
     CatalogService catalog = master.getCatalog();
 
     List<FunctionDesc> functions = new ArrayList<FunctionDesc>(catalog.getFunctions());
-    JSPUtil.sortFunctionDesc(functions);
+    Collections.sort(functions);
 %>
 
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">