You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by ji...@apache.org on 2014/01/26 11:23:37 UTC

git commit: TAJO-551: Fix bug getFunction can get wrong function that have invalid parameters. (DaeMyung Kang via jihoon)

Updated Branches:
  refs/heads/master e23e78ccd -> 9d5be90a7


TAJO-551: Fix bug getFunction can get wrong function that have invalid parameters. (DaeMyung Kang via jihoon)


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

Branch: refs/heads/master
Commit: 9d5be90a74b04a5fa68a7924c98abcce56dec729
Parents: e23e78c
Author: Jihoon Son <ji...@apache.org>
Authored: Sun Jan 26 19:22:56 2014 +0900
Committer: Jihoon Son <ji...@apache.org>
Committed: Sun Jan 26 19:22:56 2014 +0900

----------------------------------------------------------------------
 CHANGES.txt                                      |  3 +++
 .../tajo/catalog/AbstractCatalogClient.java      |  7 ++-----
 .../org/apache/tajo/catalog/CatalogServer.java   |  9 ++++++---
 .../org/apache/tajo/catalog/TestCatalog.java     | 19 +++++++++++++++++++
 .../apache/tajo/engine/function/string/Lpad.java |  5 +++--
 .../apache/tajo/engine/function/string/Rpad.java |  3 ++-
 .../tajo/engine/function/string/Substr.java      |  7 +++++--
 7 files changed, 40 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/9d5be90a/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index c04b2d4..35c7f26 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -229,6 +229,9 @@ Release 0.8.0 - unreleased
 
   BUG FIXES
 
+    TAJO-551: Fix bug getFunction can get wrong function that have invalid 
+    parameters. (DaeMyung Kang via jihoon)
+
     TAJO-544: Thread pool abusing. (Min Zhou via hyunsik)
 
     TAJO-493: maven pom.xml should enforce protobuf 2.5. (jaehwa)

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/9d5be90a/tajo-catalog/tajo-catalog-client/src/main/java/org/apache/tajo/catalog/AbstractCatalogClient.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-client/src/main/java/org/apache/tajo/catalog/AbstractCatalogClient.java b/tajo-catalog/tajo-catalog-client/src/main/java/org/apache/tajo/catalog/AbstractCatalogClient.java
index 322faed..981e062 100644
--- a/tajo-catalog/tajo-catalog-client/src/main/java/org/apache/tajo/catalog/AbstractCatalogClient.java
+++ b/tajo-catalog/tajo-catalog-client/src/main/java/org/apache/tajo/catalog/AbstractCatalogClient.java
@@ -337,10 +337,7 @@ public abstract class AbstractCatalogClient implements CatalogService {
     if (descProto == null) {
       throw new NoSuchFunctionException(signature);
     }
-    if(descProto == null) {
-      LOG.error("No matched function:" + signature + "," + funcType + "," + paramTypes);
-      return null;
-    }
+
     try {
       return new FunctionDesc(descProto);
     } catch (ClassNotFoundException e) {
@@ -378,4 +375,4 @@ public abstract class AbstractCatalogClient implements CatalogService {
       return false;
     }
   }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/9d5be90a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/CatalogServer.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/CatalogServer.java b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/CatalogServer.java
index 38686e3..c69487a 100644
--- a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/CatalogServer.java
+++ b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/CatalogServer.java
@@ -430,6 +430,10 @@ public class CatalogServer extends AbstractService {
       return found != null && found.size() > 0;
     }
 
+    private boolean containFunction(String signature, List<DataType> params) {
+      return findFunction(signature, params) != null;
+    }
+
     private boolean containFunction(String signature, FunctionType type, List<DataType> params) {
       return findFunction(signature, type, params) != null;
     }
@@ -441,8 +445,7 @@ public class CatalogServer extends AbstractService {
     private FunctionDescProto findFunction(String signature, List<DataType> params) {
       if (functions.containsKey(signature)) {
         for (FunctionDescProto existing : functions.get(signature)) {
-          if (existing.getParameterTypesList().containsAll(params) &&
-              params.containsAll(existing.getParameterTypesList())) {
+          if (existing.getParameterTypesList() != null && existing.getParameterTypesList().equals(params)) {
             return existing;
           }
         }
@@ -527,7 +530,7 @@ public class CatalogServer extends AbstractService {
         returnValue = containFunction(request.getSignature(), request.getFunctionType(),
             request.getParameterTypesList());
       } else {
-        returnValue = containFunction(request.getSignature());
+        returnValue = containFunction(request.getSignature(), request.getParameterTypesList());
       }
 
       return BoolProto.newBuilder().setValue(returnValue).build();

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/9d5be90a/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalog.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalog.java b/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalog.java
index a562531..9b10f90 100644
--- a/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalog.java
+++ b/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalog.java
@@ -174,6 +174,25 @@ public class TestCatalog {
     }
   }
 
+  @Test(expected = NoSuchFunctionException.class)
+	public final void testRegisterAndFindFunc() throws Exception { 
+		assertFalse(catalog.containFunction("test10", FunctionType.GENERAL));
+		FunctionDesc meta = new FunctionDesc("test10", TestFunc2.class, FunctionType.GENERAL,
+        CatalogUtil.newSimpleDataType(Type.INT4),
+        CatalogUtil.newSimpleDataTypeArray(Type.INT4, Type.BLOB));
+
+    catalog.createFunction(meta);
+		assertTrue(catalog.containFunction("test10", CatalogUtil.newSimpleDataTypeArray(Type.INT4, Type.BLOB)));
+		FunctionDesc retrived = catalog.getFunction("test10", CatalogUtil.newSimpleDataTypeArray(Type.INT4, Type.BLOB));
+
+		assertEquals(retrived.getSignature(),"test10");
+		assertEquals(retrived.getFuncClass(),TestFunc2.class);
+		assertEquals(retrived.getFuncType(),FunctionType.GENERAL);
+
+		catalog.getFunction("test10", CatalogUtil.newSimpleDataTypeArray(Type.BLOB, Type.INT4));
+	}
+  
+
 	@Test
 	public final void testRegisterFunc() throws Exception { 
 		assertFalse(catalog.containFunction("test2", FunctionType.UDF));

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/9d5be90a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Lpad.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Lpad.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Lpad.java
index 8b5b96b..bc0031e 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Lpad.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Lpad.java
@@ -43,7 +43,8 @@ import org.apache.tajo.storage.Tuple;
   example = "> SELECT lpad('hi', 5, 'xy');\n"
       + "xyxhi",
   returnType = TajoDataTypes.Type.TEXT,
-  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT, TajoDataTypes.Type.INT4, TajoDataTypes.Type.TEXT})}
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT, TajoDataTypes.Type.INT4}),
+                @ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT, TajoDataTypes.Type.INT4, TajoDataTypes.Type.TEXT})}
 )
 public class Lpad extends GeneralFunction {
   @Expose private boolean hasFillCharacters;
@@ -86,4 +87,4 @@ public class Lpad extends GeneralFunction {
       return DatumFactory.createText(StringUtils.leftPad(datum.asChars(), lengthDatum.asInt4(), fillText.asChars()));
     }
   }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/9d5be90a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Rpad.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Rpad.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Rpad.java
index 35c1afa..225777b 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Rpad.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Rpad.java
@@ -44,7 +44,8 @@ import org.apache.tajo.storage.Tuple;
   example = "> SELECT rpad('hi', 5, 'xy');\n"
       + "hixyx",
   returnType = TajoDataTypes.Type.TEXT,
-  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT, TajoDataTypes.Type.INT4, TajoDataTypes.Type.TEXT})}
+  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT, TajoDataTypes.Type.INT4}),
+                @ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT, TajoDataTypes.Type.INT4, TajoDataTypes.Type.TEXT})}
 )
 public class Rpad extends GeneralFunction {
   @Expose private boolean hasFillCharacters;

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/9d5be90a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Substr.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Substr.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Substr.java
index 8f6cf21..74492b1 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Substr.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/function/string/Substr.java
@@ -39,8 +39,11 @@ import org.apache.tajo.storage.Tuple;
   example = "> SELECT substr('alphabet', 3, 2);\n"
           + "ph",
   returnType = TajoDataTypes.Type.TEXT,
-  paramTypes = {@ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT,
-          TajoDataTypes.Type.INT4,TajoDataTypes.Type.INT4})}
+  paramTypes = {
+    @ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT,TajoDataTypes.Type.INT4}),
+    @ParamTypes(paramTypes = {TajoDataTypes.Type.TEXT,TajoDataTypes.Type.INT4,
+                              TajoDataTypes.Type.INT4})
+  } 
 )
 public class Substr extends GeneralFunction {
   public Substr() {