You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by la...@apache.org on 2016/06/19 05:09:46 UTC

phoenix git commit: PHOENIX-3006 Fix all ScalarFunctions to implement clone(List) or (List). (James Taylor & Lars Hofhansl)

Repository: phoenix
Updated Branches:
  refs/heads/4.x-HBase-0.98 bf6702d2d -> 40ca90742


PHOENIX-3006 Fix all ScalarFunctions to implement clone(List) or <init>(List). (James Taylor & Lars Hofhansl)


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

Branch: refs/heads/4.x-HBase-0.98
Commit: 40ca90742452bf1d97f43e11c367f82355215ef1
Parents: bf6702d
Author: Lars Hofhansl <la...@apache.org>
Authored: Sat Jun 18 22:10:55 2016 -0700
Committer: Lars Hofhansl <la...@apache.org>
Committed: Sat Jun 18 22:10:55 2016 -0700

----------------------------------------------------------------------
 .../expression/function/CeilDateExpression.java |  2 +-
 .../function/CeilDecimalExpression.java         | 12 ++++------
 .../function/CeilTimestampExpression.java       | 14 +++++------
 .../function/FloorDateExpression.java           |  2 +-
 .../function/FloorDecimalExpression.java        | 12 ++++------
 .../function/RoundDateExpression.java           |  2 +-
 .../function/RoundDecimalExpression.java        |  2 +-
 .../function/RoundTimestampExpression.java      |  2 +-
 .../BuiltinFunctionConstructorTest.java         | 25 ++++++++++----------
 9 files changed, 35 insertions(+), 38 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/phoenix/blob/40ca9074/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilDateExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilDateExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilDateExpression.java
index a3bf6f8..e3cd985 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilDateExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilDateExpression.java
@@ -76,7 +76,7 @@ public class CeilDateExpression extends RoundDateExpression {
         
     }
     
-    CeilDateExpression(List<Expression> children) {
+    public CeilDateExpression(List<Expression> children) {
         super(children);
     }
     

http://git-wip-us.apache.org/repos/asf/phoenix/blob/40ca9074/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilDecimalExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilDecimalExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilDecimalExpression.java
index 208d5ee..9c64896 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilDecimalExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilDecimalExpression.java
@@ -17,6 +17,7 @@
  */
 package org.apache.phoenix.expression.function;
 
+import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.sql.SQLException;
 import java.util.List;
@@ -24,16 +25,13 @@ import java.util.List;
 import org.apache.phoenix.expression.Determinism;
 import org.apache.phoenix.expression.Expression;
 import org.apache.phoenix.expression.LiteralExpression;
-import org.apache.phoenix.schema.types.PDecimal;
-
-import com.google.common.collect.Lists;
-
-import java.math.BigDecimal;
-
 import org.apache.phoenix.query.KeyRange;
+import org.apache.phoenix.schema.types.PDecimal;
 import org.apache.phoenix.schema.types.PInteger;
 import org.apache.phoenix.schema.types.PLong;
 
+import com.google.common.collect.Lists;
+
 /**
  *
  * Class encapsulating the CEIL operation on a {@link org.apache.phoenix.schema.types.PDecimal}
@@ -45,7 +43,7 @@ public class CeilDecimalExpression extends RoundDecimalExpression {
 
     public CeilDecimalExpression() {}
 
-    private CeilDecimalExpression(List<Expression> children) {
+    public CeilDecimalExpression(List<Expression> children) {
         super(children);
     }
 

http://git-wip-us.apache.org/repos/asf/phoenix/blob/40ca9074/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilTimestampExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilTimestampExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilTimestampExpression.java
index c2d7daf..f69f2f8 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilTimestampExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilTimestampExpression.java
@@ -22,19 +22,19 @@ import java.sql.Timestamp;
 import java.util.List;
 
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
-
-import com.google.common.collect.Lists;
 import org.apache.phoenix.expression.CoerceExpression;
 import org.apache.phoenix.expression.Expression;
 import org.apache.phoenix.expression.LiteralExpression;
+import org.apache.phoenix.schema.SortOrder;
+import org.apache.phoenix.schema.tuple.Tuple;
+import org.apache.phoenix.schema.types.PDataType;
+import org.apache.phoenix.schema.types.PDataType.PDataCodec;
 import org.apache.phoenix.schema.types.PDate;
 import org.apache.phoenix.schema.types.PTimestamp;
 import org.apache.phoenix.schema.types.PUnsignedDate;
 import org.apache.phoenix.schema.types.PUnsignedTimestamp;
-import org.apache.phoenix.schema.SortOrder;
-import org.apache.phoenix.schema.types.PDataType;
-import org.apache.phoenix.schema.types.PDataType.PDataCodec;
-import org.apache.phoenix.schema.tuple.Tuple;
+
+import com.google.common.collect.Lists;
 
 /**
  * 
@@ -49,7 +49,7 @@ public class CeilTimestampExpression extends CeilDateExpression {
     
     public CeilTimestampExpression() {}
     
-    private CeilTimestampExpression(List<Expression> children) {
+    public CeilTimestampExpression(List<Expression> children) {
         super(children);
     }
     

http://git-wip-us.apache.org/repos/asf/phoenix/blob/40ca9074/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FloorDateExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FloorDateExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FloorDateExpression.java
index 4dc840e..c0eca8a 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FloorDateExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FloorDateExpression.java
@@ -46,7 +46,7 @@ public class FloorDateExpression extends RoundDateExpression {
     
     public FloorDateExpression() {}
     
-    protected FloorDateExpression(List<Expression> children) {
+    public FloorDateExpression(List<Expression> children) {
         super(children);
     }
     

http://git-wip-us.apache.org/repos/asf/phoenix/blob/40ca9074/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FloorDecimalExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FloorDecimalExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FloorDecimalExpression.java
index 2d81c2e..7351cca 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FloorDecimalExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FloorDecimalExpression.java
@@ -17,6 +17,7 @@
  */
 package org.apache.phoenix.expression.function;
 
+import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.sql.SQLException;
 import java.util.List;
@@ -24,16 +25,13 @@ import java.util.List;
 import org.apache.phoenix.expression.Determinism;
 import org.apache.phoenix.expression.Expression;
 import org.apache.phoenix.expression.LiteralExpression;
-import org.apache.phoenix.schema.types.PDecimal;
-
-import com.google.common.collect.Lists;
-
-import java.math.BigDecimal;
-
 import org.apache.phoenix.query.KeyRange;
+import org.apache.phoenix.schema.types.PDecimal;
 import org.apache.phoenix.schema.types.PInteger;
 import org.apache.phoenix.schema.types.PLong;
 
+import com.google.common.collect.Lists;
+
 /**
  *
  * Class encapsulating the FLOOR operation on 
@@ -46,7 +44,7 @@ public class FloorDecimalExpression extends RoundDecimalExpression {
 
     public FloorDecimalExpression() {}
 
-    private FloorDecimalExpression(List<Expression> children) {
+    public FloorDecimalExpression(List<Expression> children) {
         super(children);
     }
 

http://git-wip-us.apache.org/repos/asf/phoenix/blob/40ca9074/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundDateExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundDateExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundDateExpression.java
index af4f422..e2483ac 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundDateExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundDateExpression.java
@@ -119,7 +119,7 @@ public class RoundDateExpression extends ScalarFunction {
         return LiteralExpression.newConstant(multiplier, PInteger.INSTANCE, Determinism.ALWAYS);
     }
     
-    RoundDateExpression(List<Expression> children) {
+    public RoundDateExpression(List<Expression> children) {
         super(children.subList(0, 1));
         int numChildren = children.size();
         Object timeUnitValue = ((LiteralExpression)children.get(1)).getValue();

http://git-wip-us.apache.org/repos/asf/phoenix/blob/40ca9074/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundDecimalExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundDecimalExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundDecimalExpression.java
index 7f44082..65ffacb 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundDecimalExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundDecimalExpression.java
@@ -92,7 +92,7 @@ public class RoundDecimalExpression extends ScalarFunction {
 
     public RoundDecimalExpression() {}
 
-    protected RoundDecimalExpression(List<Expression> children) {
+    public RoundDecimalExpression(List<Expression> children) {
         super(children);
         LiteralExpression scaleChild = (LiteralExpression)children.get(1);
         PDataType scaleType = scaleChild.getDataType();

http://git-wip-us.apache.org/repos/asf/phoenix/blob/40ca9074/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundTimestampExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundTimestampExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundTimestampExpression.java
index 9129285..7b5ba93 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundTimestampExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundTimestampExpression.java
@@ -54,7 +54,7 @@ public class RoundTimestampExpression extends RoundDateExpression {
 
     public RoundTimestampExpression() {}
     
-    private RoundTimestampExpression(List<Expression> children) {
+    public RoundTimestampExpression(List<Expression> children) {
         super(children);
     }
     

http://git-wip-us.apache.org/repos/asf/phoenix/blob/40ca9074/phoenix-core/src/test/java/org/apache/phoenix/expression/function/BuiltinFunctionConstructorTest.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/test/java/org/apache/phoenix/expression/function/BuiltinFunctionConstructorTest.java b/phoenix-core/src/test/java/org/apache/phoenix/expression/function/BuiltinFunctionConstructorTest.java
index 69f39fb..4db6628 100644
--- a/phoenix-core/src/test/java/org/apache/phoenix/expression/function/BuiltinFunctionConstructorTest.java
+++ b/phoenix-core/src/test/java/org/apache/phoenix/expression/function/BuiltinFunctionConstructorTest.java
@@ -17,12 +17,14 @@
  */
 package org.apache.phoenix.expression.function;
 
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Method;
-import java.util.ArrayList;
+import java.lang.reflect.Modifier;
 import java.util.List;
 
-import org.apache.phoenix.expression.function.ScalarFunction;
 import org.apache.phoenix.expression.Expression;
 import org.apache.phoenix.expression.ExpressionType;
 import org.junit.Test;
@@ -30,23 +32,22 @@ import org.junit.Test;
 public class BuiltinFunctionConstructorTest {
 
     @Test
-    public void testChildrenListConstructors() {
+    public void testChildrenListConstructors() throws Exception {
         ExpressionType[] types = ExpressionType.values();
-        List<Expression> children = new ArrayList<>();
         for(int i = 0; i < types.length; i++) {
             try {
-                if((ScalarFunction.class.isAssignableFrom(types[i].getExpressionClass())) && (types[i].getExpressionClass() != UDFExpression.class)) {
-                	Method cloneMethod = types[i].getExpressionClass().getMethod("clone", List.class);
+                Class<? extends Expression> expressionClass= types[i].getExpressionClass();
+                if(!Modifier.isAbstract( expressionClass.getModifiers() ) && (ScalarFunction.class.isAssignableFrom(expressionClass)) && (expressionClass != UDFExpression.class)) {
+                	Method cloneMethod = expressionClass.getMethod("clone", List.class);
+                	assertNotNull(cloneMethod);
                 	// ScalarFunctions that implement clone(List<Expression>) don't need to implement a constructor that takes a List<Expression>  
-                	if (cloneMethod==null) {
-	                    Constructor cons = types[i].getExpressionClass().getDeclaredConstructor(List.class);
-	                    cons.setAccessible(true);
-	                    cons.newInstance(children);
+                	if (cloneMethod.getDeclaringClass() == ScalarFunction.class) {
+	                    Constructor cons = expressionClass.getDeclaredConstructor(List.class);
+	                    assertTrue("Constructor for " + expressionClass + " is not public", Modifier.isPublic(cons.getModifiers()));
                 	}
                 }
-            } catch (NoSuchMethodException e) {
-                throw new RuntimeException(e);
             } catch (Exception e) {
+                throw new RuntimeException("Unable to find required List<Expression> constructor " + types[i].getExpressionClass().getName(), e);
             }
         }
     }