You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by td...@apache.org on 2015/06/24 22:24:23 UTC
[27/49] phoenix git commit: PHOENIX-2010 Properly validate number of
arguments passed to the functions in FunctionParseNode#validate(Rajeshbabu)
PHOENIX-2010 Properly validate number of arguments passed to the functions in FunctionParseNode#validate(Rajeshbabu)
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/b7f13824
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/b7f13824
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/b7f13824
Branch: refs/heads/json
Commit: b7f138246328ea80ce53fb73539a1e48413a32d2
Parents: 08fc27d
Author: Rajeshbabu Chintaguntla <ra...@apache.org>
Authored: Sun May 31 07:40:16 2015 +0530
Committer: Rajeshbabu Chintaguntla <ra...@apache.org>
Committed: Sun May 31 07:40:16 2015 +0530
----------------------------------------------------------------------
.../phoenix/end2end/UserDefinedFunctionsIT.java | 14 ++++++++++++++
.../org/apache/phoenix/parse/FunctionParseNode.java | 4 ++++
.../main/java/org/apache/phoenix/parse/PFunction.java | 4 +---
3 files changed, 19 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b7f13824/phoenix-core/src/it/java/org/apache/phoenix/end2end/UserDefinedFunctionsIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/UserDefinedFunctionsIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/UserDefinedFunctionsIT.java
index 7dbde3c..868e19d 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/UserDefinedFunctionsIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/UserDefinedFunctionsIT.java
@@ -442,6 +442,20 @@ public class UserDefinedFunctionsIT extends BaseOwnClusterIT{
rs = stmt.executeQuery("select k from t9 where mysum9(k)=11");
assertTrue(rs.next());
assertEquals(1, rs.getInt(1));
+ try {
+ rs = stmt.executeQuery("select k from t9 where mysum9(k,10,'x')=11");
+ fail("FunctionNotFoundException should be thrown");
+ } catch(FunctionNotFoundException e) {
+ } catch(Exception e) {
+ fail("FunctionNotFoundException should be thrown");
+ }
+ try {
+ rs = stmt.executeQuery("select mysum9() from t9");
+ fail("FunctionNotFoundException should be thrown");
+ } catch(FunctionNotFoundException e) {
+ } catch(Exception e) {
+ fail("FunctionNotFoundException should be thrown");
+ }
stmt.execute("drop function mysum9");
try {
rs = stmt.executeQuery("select k from t9 where mysum9(k)=11");
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b7f13824/phoenix-core/src/main/java/org/apache/phoenix/parse/FunctionParseNode.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/parse/FunctionParseNode.java b/phoenix-core/src/main/java/org/apache/phoenix/parse/FunctionParseNode.java
index d1001ee..be52d89 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/parse/FunctionParseNode.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/parse/FunctionParseNode.java
@@ -41,6 +41,7 @@ import org.apache.phoenix.expression.function.FunctionExpression;
import org.apache.phoenix.expression.function.UDFExpression;
import org.apache.phoenix.parse.PFunction.FunctionArgument;
import org.apache.phoenix.schema.ArgumentTypeMismatchException;
+import org.apache.phoenix.schema.FunctionNotFoundException;
import org.apache.phoenix.schema.ValueRangeExcpetion;
import org.apache.phoenix.schema.types.PDataType;
import org.apache.phoenix.schema.types.PDataTypeFactory;
@@ -133,6 +134,9 @@ public class FunctionParseNode extends CompoundParseNode {
public List<Expression> validate(List<Expression> children, StatementContext context) throws SQLException {
BuiltInFunctionInfo info = this.getInfo();
BuiltInFunctionArgInfo[] args = info.getArgs();
+ if (args.length < children.size() || info.getRequiredArgCount() > children.size()) {
+ throw new FunctionNotFoundException(this.name);
+ }
if (args.length > children.size()) {
List<Expression> moreChildren = new ArrayList<Expression>(children);
for (int i = children.size(); i < info.getArgs().length; i++) {
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b7f13824/phoenix-core/src/main/java/org/apache/phoenix/parse/PFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/parse/PFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/parse/PFunction.java
index f4bac35..8a95ae7 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/parse/PFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/parse/PFunction.java
@@ -95,9 +95,7 @@ public class PFunction implements PMetaDataEntity {
}
public PFunction(PFunction function) {
- this(function.getTenantId(), function.getFunctionName(), function.getFunctionArguments(),
- function.getReturnType(), function.getClassName(), function.getJarPath(), function
- .getTimeStamp());
+ this(function, function.isTemporaryFunction());
}
public String getFunctionName() {