You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by sl...@apache.org on 2013/04/02 19:23:37 UTC
git commit: Fix NPE during cql3 select with token()
Updated Branches:
refs/heads/cassandra-1.2 65b9093d4 -> b82027ccb
Fix NPE during cql3 select with token()
patch by slebresne; reviewed by driftx for CASSANDRA-5404
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/b82027cc
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/b82027cc
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/b82027cc
Branch: refs/heads/cassandra-1.2
Commit: b82027ccbc315bfd46f760204c71358e5f85b254
Parents: 65b9093
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Tue Apr 2 19:22:48 2013 +0200
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Tue Apr 2 19:22:48 2013 +0200
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../cassandra/cql3/functions/FunctionCall.java | 6 +++++-
.../cassandra/cql3/statements/Selection.java | 2 ++
3 files changed, 8 insertions(+), 1 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/b82027cc/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index c7d64b4..727ede8 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -16,6 +16,7 @@
* Fix streaming compressed files when using encryption (CASSANDRA-5391)
* cassandra-all 1.2.0 pom missing netty dependency (CASSANDRA-5392)
* Fix writetime/ttl functions on null values (CASSANDRA-5341)
+ * Fix NPE during cql3 select with token() (CASSANDRA-5404)
Merged from 1.1:
* cli: Quote ks and cf names in schema output when needed (CASSANDRA-5052)
* Fix bad default for min/max timestamp in SSTableMetadata (CASSANDRA-5372)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/b82027cc/src/java/org/apache/cassandra/cql3/functions/FunctionCall.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/functions/FunctionCall.java b/src/java/org/apache/cassandra/cql3/functions/FunctionCall.java
index 01c26af..14a9b78 100644
--- a/src/java/org/apache/cassandra/cql3/functions/FunctionCall.java
+++ b/src/java/org/apache/cassandra/cql3/functions/FunctionCall.java
@@ -132,7 +132,11 @@ public class FunctionCall extends Term.NonTerminal
public boolean isAssignableTo(ColumnSpecification receiver)
{
AbstractType<?> returnType = Functions.getReturnType(functionName, receiver.ksName, receiver.cfName);
- return receiver.type.asCQL3Type().equals(returnType.asCQL3Type());
+ // Note: if returnType == null, it means the function doesn't exist. We may get this if an undefined function
+ // is used as argument of another, existing, function. In that case, we return true here because we'll catch
+ // the fact that the method is undefined latter anyway and with a more helpful error message that if we were
+ // to return false here.
+ return returnType == null || receiver.type.asCQL3Type().equals(returnType.asCQL3Type());
}
@Override
http://git-wip-us.apache.org/repos/asf/cassandra/blob/b82027cc/src/java/org/apache/cassandra/cql3/statements/Selection.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/Selection.java b/src/java/org/apache/cassandra/cql3/statements/Selection.java
index 983c35b..e4e59c5 100644
--- a/src/java/org/apache/cassandra/cql3/statements/Selection.java
+++ b/src/java/org/apache/cassandra/cql3/statements/Selection.java
@@ -117,6 +117,8 @@ public abstract class Selection
args.add(makeSelector(cfDef, rawArg, names, null));
AbstractType<?> returnType = Functions.getReturnType(withFun.functionName, cfDef.cfm.ksName, cfDef.cfm.cfName);
+ if (returnType == null)
+ throw new InvalidRequestException(String.format("Unknown function '%s'", withFun.functionName));
ColumnSpecification spec = makeFunctionSpec(cfDef, withFun, returnType);
Function fun = Functions.get(withFun.functionName, args, spec);
if (metadata != null)