Repository: cassandra
Updated Branches:
  refs/heads/trunk 75409a185 -> 7d68cedec


Don't execute any functions at prepare-time

Patch by Sam Tunnicliffe; reviewed by Tyler Hobbs for CASSANDRA-9037


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/7d68cede
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/7d68cede
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/7d68cede

Branch: refs/heads/trunk
Commit: 7d68cedecd4444537535e48074c38686ccc76f9c
Parents: 75409a1
Author: Sam Tunnicliffe <s...@beobal.com>
Authored: Fri Apr 3 12:51:24 2015 -0500
Committer: Tyler Hobbs <ty...@datastax.com>
Committed: Fri Apr 3 12:51:24 2015 -0500

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../cassandra/cql3/functions/FunctionCall.java  | 22 +-------------------
 2 files changed, 2 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/7d68cede/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index e8cb20b..92c09b1 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 3.0
+ * Don't execute any functions at prepare-time (CASSANDRA-9037)
  * Share file handles between all instances of a SegmentedFile (CASSANDRA-8893)
  * Make it possible to major compact LCS (CASSANDRA-7272)
  * Make FunctionExecutionException extend RequestExecutionException

http://git-wip-us.apache.org/repos/asf/cassandra/blob/7d68cede/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 90ebaaf..a3bd669 100644
--- a/src/java/org/apache/cassandra/cql3/functions/FunctionCall.java
+++ b/src/java/org/apache/cassandra/cql3/functions/FunctionCall.java
@@ -140,33 +140,13 @@ public class FunctionCall extends Term.NonTerminal
                                                                 fun, 
fun.argTypes().size(), terms.size()));
 
             List<Term> parameters = new ArrayList<>(terms.size());
-            boolean allTerminal = true;
             for (int i = 0; i < terms.size(); i++)
             {
                 Term t = terms.get(i).prepare(keyspace, 
Functions.makeArgSpec(receiver.ksName, receiver.cfName, scalarFun, i));
-                if (t instanceof NonTerminal)
-                    allTerminal = false;
                 parameters.add(t);
             }
 
-            // If all parameters are terminal and the function is pure, we can
-            // evaluate it now, otherwise we'd have to wait execution time
-            return allTerminal && scalarFun.isPure()
-                ? makeTerminal(scalarFun, execute(scalarFun, parameters), 
QueryOptions.DEFAULT.getProtocolVersion())
-                : new FunctionCall(scalarFun, parameters);
-        }
-
-        // All parameters must be terminal
-        private static ByteBuffer execute(ScalarFunction fun, List<Term> 
parameters) throws InvalidRequestException
-        {
-            List<ByteBuffer> buffers = new ArrayList<>(parameters.size());
-            for (Term t : parameters)
-            {
-                assert t instanceof Term.Terminal;
-                
buffers.add(((Term.Terminal)t).get(QueryOptions.DEFAULT.getProtocolVersion()));
-            }
-
-            return executeInternal(Server.CURRENT_VERSION, fun, buffers);
+            return new FunctionCall(scalarFun, parameters);
         }
 
         public AssignmentTestable.TestResult testAssignment(String keyspace, 
ColumnSpecification receiver)

Reply via email to